Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Schachuhr

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 02.09.2006, 14:13    Titel: Schachuhr Antworten mit Zitat

Hallo!

Hier ein alter Quellcode und mein Problem von mir:

Dies soll eine Schachuhr darstellen und auch wie eine Schachuhr funktionieren, doch leider läuft diese Schachuhr nicht mit der echten Uhr synchron. Diese Uhr läuft langsamer als die echte Uhr!
1 Minute ist nicht gleich 1 Minute!

Und bei 1 Sekunde kann läuft die Uhr auf Null auch wenn ich noch draufdrücke. Bei einer echten Schachuhr kann ich noch bei 0.5 Sekunden nur 0.1 Sekunden an Zeit verbrauchen hier bei meinem Programm leider nicht!

Wie programmiere ich es so das diese Uhr wie eine echte digitale Schachuhr funktioniert und somit für den Tunierbetrieb einsetzbar ist?

Ich danke im Vorraus!

PS. Wer dieses Programm umprogrammieren will oder irgendwo in sein Programm einbauen will darf das gerne tun!!!

Mit freundlichen Grüßen
ALWIM

Zitat:

DEFINT I
DEFSTR C
C1$ = CHR$(202)
C2$ = CHR$(203)
C3$ = CHR$(204)
C4$ = CHR$(205)
C5$ = CHR$(206)
C6$ = CHR$(185)
C7$ = CHR$(186)
C8$ = CHR$(255)
CST4$ = STRING$(5, C4$)
CST5$ = STRING$(5, C4$)
CST7$ = STRING$(1, C7$)
ZUEGE = 0
ZZUEGE = 0
NM = 0
COLOR 15, 7
0 CLS
LOCATE 12, 1
PRINT "Weiß drückt eine der Tasten Q, A, Y, W, S, X, E, D, C"
LOCATE 14, 1
PRINT "Schwarz drückt eine der Tasten U, J, M, Z, H, N, T, G, B"
LOCATE 16, 1
PRINT "Zum stoppen der Uhr die Taste L drücken!"
LOCATE 18, 1
PRINT "Beenden des Programms funktioniert mit Pfeil-Nach-Oben Taste und š"
LOCATE 2, 1
PRINT "Geben sie bitte die gewünschte Tunierzeit ein!"
LOCATE 4, 1
PRINT "Wieviele Stunden?"
INPUT STUNDEN
LOCATE 6, 1
PRINT "Wieviele Minuten?"
INPUT MINUTEN
LOCATE 8, 1
PRINT "Wieviele Sekunden?"
INPUT SEKUNDEN
CLS
LOCATE 10, 1
PRINT "Wo sitzt Weiß?"
PRINT "Sitzt Weiß bei Nummer 1 oder bei Nummer 2?"
COLOR 5, 7
LOCATE 4, 14
PRINT "1"
LOCATE 4, 65
PRINT "2"
COLOR 15, 15
LOCATE 5, 4
PRINT " "
LOCATE 5, 4
PRINT " WEIß "
COLOR 0, 15
LOCATE 5, 55
PRINT " "
LOCATE 5, 55
PRINT " Schwarz "
COLOR 15, 15
LOCATE 6, 55
PRINT " "
LOCATE 6, 55
PRINT " WEIß "
COLOR 0, 15
LOCATE 6, 4
PRINT " "
LOCATE 6, 4
PRINT " Schwarz "
LOCATE 12, 1
COLOR 15, 15
INPUT "Geben sie bitte die entsprechende Nummer ein!"; NUMMER
ZENTELSEKUNDEN = 0
IF STUNDEN = 0 AND MINUTEN = 0 AND SEKUNDEN = 0 THEN 0
2 CLS
LOCATE 2, 1
COLOR 15, 15
PRINT "Tunierzeit: "; STUNDEN; "h"; " "; MINUTEN; "min"; " "; SEKUNDEN; "sek"
IF NUMMER = 1 THEN 3 ELSE 4
3 COLOR 15, 15
LOCATE 5, 4
PRINT " "
LOCATE 5, 4
PRINT " WEIß "
COLOR 0, 15
LOCATE 5, 55
PRINT " "
LOCATE 5, 55
PRINT " Schwarz "
GOTO 5
4
COLOR 12, 7
LOCATE 20, 30
PRINT "Züge: "; ZUEGE
COLOR 15, 15
LOCATE 5, 55
PRINT " "
LOCATE 5, 55
PRINT " WEIß "
COLOR 0, 15
LOCATE 5, 4
PRINT " "
LOCATE 5, 4
PRINT " Schwarz "
5
COLOR 2, 0
LOCATE 6, 55
STUNDENS = STUNDEN
MINUTENS = MINUTEN
SEKUNDENS = SEKUNDEN
ZENTELSEKUNDENS = ZENTELSEKUNDEN
PRINT STUNDENS; "h"; " "; MINUTENS; "min"; " "; SEKUNDENS; "sek ";
IF SEKUNDEN > 1 THEN SEKUNDEN = SEKUNDEN + 1
IF NUMMER = 1 THEN 20 ELSE 6
6
COLOR 7, 7
LOCATE 10, 4
PRINT " "
PRINT " "
PRINT " "
PRINT " "
PRINT " "
PRINT " "
PRINT " "
PRINT " "
GOTO 30
9
LOCATE 10, 55
PRINT " "
LOCATE 11, 55
PRINT " "
LOCATE 12, 55
PRINT " "
LOCATE 13, 55
PRINT " "
LOCATE 14, 55
PRINT " "
LOCATE 15, 55
PRINT " "
LOCATE 16, 55
PRINT " "
LOCATE 17, 55
PRINT " "
COLOR 2, 0
LOCATE 6, 55
PRINT STUNDENS; "h"; " "; MINUTENS; "min"; " "; SEKUNDENS; "sek "
20
REM Spielbeginn und Tastaturabfrage
IF NUMMER = 1 THEN ZUEGE = ZUEGE + 1
COLOR 12, 7
IF NUMMER = 1 THEN LOCATE 20, 30
IF NUMMER = 1 THEN PRINT "Züge: "; ZUEGE
IC1 = -1
WHILE IC1
CC$ = INKEY$
IF CC$ = "" THEN 21
ICI = ASC(CC$)
ICI = ICI AND &HDF: REM Kleine = große Buchstaben
CC$ = CHR$(ICI)
21 IF CC$ = "š" THEN COLOR 1, 15: LOCATE 20, 12: PRINT "E N D E": END: REM Spielende Abbruchbedingung
COLOR 14, 0
LOCATE 6, 4
PRINT STUNDEN; "h"; " "; MINUTEN; "min"; " "; SEKUNDEN; "sek "
COLOR 12, 7
FOR IY = 1 TO 2
IY1 = IY + 9
LOCATE IY1, 9
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 9
LOCATE IY1, 15
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 12
LOCATE IY1, 15
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 12
LOCATE IY1, 9
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 15
LOCATE IY1, 9
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 15
LOCATE IY1, 15
PRINT CST7$
NEXT IY
LOCATE 12, 16
PRINT CST4$
LOCATE 15, 16
PRINT CST4$
LOCATE 12, 4
PRINT CST4$
LOCATE 12, 10
PRINT CST4$
LOCATE 15, 4
PRINT CST4$
LOCATE 15, 10
PRINT CST4$
LOCATE 15, 9
PRINT C5$
LOCATE 12, 9
PRINT C5$
LOCATE 12, 15
PRINT C5$
LOCATE 15, 15
PRINT C5$
LOCATE 9.5, 6.5
PRINT "Q"
LOCATE 10, 12.5
PRINT "W"
LOCATE 10, 18.5
PRINT "E"
LOCATE 13, 6.5
PRINT "A"
LOCATE 13, 12.5
PRINT "S"
LOCATE 13, 18.5
PRINT "D"
LOCATE 16, 6.5
PRINT "Y"
LOCATE 16, 12.5
PRINT "X"
LOCATE 16, 18.5
PRINT "C"
IF CC$ = "Q" THEN 30: NM = 2
IF CC$ = "A" THEN 30: NM = 2
IF CC$ = "Y" THEN 30: NM = 2
IF CC$ = "W" THEN 30: NM = 2
IF CC$ = "S" THEN 30: NM = 2
IF CC$ = "X" THEN 30: NM = 2
IF CC$ = "E" THEN 30: NM = 2
IF CC$ = "D" THEN 30: NM = 2
IF CC$ = "C" THEN 30: NM = 2
ZENTELSEKUNDEN = ZENTELSEKUNDEN - 1
SOUND 32000, 1.82
IF ZENTELSEKUNDEN < 0 THEN 22 ELSE 23
22
ZENTELSEKUNDEN = 9
SEKUNDEN = SEKUNDEN - 1
23 IF SEKUNDEN < 0 THEN 25 ELSE 26
25
SEKUNDEN = 59
MINUTEN = MINUTEN - 1
26 IF MINUTEN < 0 THEN 27 ELSE 28
27
MINUTEN = 59
STUNDEN = STUNDEN - 1
28 IF STUNDEN = 0 THEN STUNDEN = 0
IF STUNDEN = 0 AND MINUTEN = 0 AND SEKUNDEN = 0 THEN 29
IF CC$ = "L" THEN SLEEP
WEND
GOTO 20
29
COLOR 14, 0
LOCATE 6, 4
PRINT STUNDEN; "h"; " "; MINUTEN; "min"; " "; SEKUNDEN; "sek "
SLEEP 1
LOCATE 6, 4
PRINT " "
COLOR 4, 0
LOCATE 6, 12
PRINT "ZEIT"
FOR i% = 440 TO 750 STEP 5
SOUND i%, i% / 1000
NEXT i%
COLOR 15, 7
LOCATE 20, 30
PRINT "!!!DIE ZEIT IST AUS!!!"
LOCATE 22, 1
PRINT "Neustart des SCHACHUHRPROGRAMMS jJ/nN ?"
INPUT OK$
IF OK$ = "j" OR OK$ = "J" THEN 0 ELSE END
30
LOCATE 10, 4
PRINT " "
PRINT " "
PRINT " "
PRINT " "
PRINT " "
PRINT " "
PRINT " "
PRINT " "
IF NUMMER = 2 THEN ZZUEGE = ZZUEGE + 1
IF NUMMER = 2 THEN LOCATE 20, 30
IF NUMMER = 2 THEN PRINT "Züge: "; ZZUEGE
COLOR 2, 0
LOCATE 6, 4
PRINT STUNDEN; "h"; " "; MINUTEN; "min"; " "; SEKUNDEN; "sek "
31
REM Spielbeginn und Tastaturabfrage
COLOR 12, 7
IF NUMMER = 2 THEN LOCATE 20, 30
IF NUMMER = 2 THEN PRINT "Züge: "; ZZUEGE
IC1 = -1
WHILE IC1
CC$ = INKEY$
IF CC$ = "" THEN 32
ICI = ASC(CC$)
ICI = ICI AND &HDF: REM Kleine = große Buchstaben
CC$ = CHR$(ICI)
32 IF CC$ = "š" THEN COLOR 1, 15: LOCATE 20, 12: PRINT "E N D E": END: REM Spielende Abbruchbedingung
COLOR 14, 0
LOCATE 6, 55
PRINT STUNDENS; "h"; " "; MINUTENS; "min"; " "; SEKUNDENS; "sek "
COLOR 12, 7
FOR IY = 1 TO 2
IY1 = IY + 9
LOCATE IY1, 60
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 9
LOCATE IY1, 66
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 12
LOCATE IY1, 60
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 12
LOCATE IY1, 66
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 15
LOCATE IY1, 60
PRINT CST7$
NEXT IY
FOR IY = 1 TO 2
IY1 = IY + 15
LOCATE IY1, 66
PRINT CST7$
NEXT IY
LOCATE 12, 55
PRINT CST4$
LOCATE 15, 55
PRINT CST4$
LOCATE 12, 61
PRINT CST4$
LOCATE 12, 67
PRINT CST4$
LOCATE 15, 61
PRINT CST4$
LOCATE 15, 67
PRINT CST4$
LOCATE 15, 60
PRINT C5$
LOCATE 12, 60
PRINT C5$
LOCATE 12, 66
PRINT C5$
LOCATE 15, 66
PRINT C5$
LOCATE 9.5, 57
PRINT "T"
LOCATE 10, 63
PRINT "Z"
LOCATE 10, 69
PRINT "U"
LOCATE 13, 57
PRINT "G"
LOCATE 13, 63
PRINT "H"
LOCATE 13, 69
PRINT "J"
LOCATE 16, 57
PRINT "B"
LOCATE 16, 63
PRINT "N"
LOCATE 16, 69
PRINT "M"
IF CC$ = "U" THEN 9: NM = 1
IF CC$ = "J" THEN 9: NM = 1
IF CC$ = "M" THEN 9: NM = 1
IF CC$ = "Z" THEN 9: NM = 1
IF CC$ = "H" THEN 9: NM = 1
IF CC$ = "N" THEN 9: NM = 1
IF CC$ = "T" THEN 9: NM = 1
IF CC$ = "G" THEN 9: NM = 1
IF CC$ = "B" THEN 9: NM = 1
ZENTELSEKUNDENS = ZENTELSEKUNDENS - 1
SOUND 32000, 1.82
IF ZENTELSEKUNDENS < 0 THEN 35 ELSE 36
35
ZENTELSEKUNDENS = 9
SEKUNDENS = SEKUNDENS - 1
36
IF SEKUNDENS < 0 THEN 37 ELSE 38
37
SEKUNDENS = 59
MINUTENS = MINUTENS - 1
38 IF MINUTENS < 0 THEN 39 ELSE 40
39
MINUTENS = 59
STUNDENS = STUNDENS - 1
40 IF STUNDENS = 0 THEN STUNDENS = 0
IF STUNDENS = 0 AND MINUTENS = 0 AND SEKUNDENS = 0 THEN 44
IF CC$ = "L" THEN SLEEP
WEND
GOTO 31
44 COLOR 14, 0
LOCATE 6, 55
PRINT STUNDENS; "h"; " "; MINUTENS; "min"; " "; SEKUNDENS; "sek "
SLEEP 1
LOCATE 6, 55
PRINT " "
COLOR 4, 0
LOCATE 6, 63
PRINT "ZEIT"
COLOR 15, 7
LOCATE 20, 30
FOR i% = 440 TO 750 STEP 5
SOUND i%, i% / 1000
NEXT i%
PRINT "!!!DIE ZEIT IST AUS!!!"
LOCATE 22, 1
PRINT "Neustart des SCHACHUHRPROGRAMMS jJ/nN ?"
INPUT OK$
IF OK$ = "j" OR OK$ = "J" THEN 0 ELSE END

_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 02.09.2006, 21:32    Titel: Antworten mit Zitat

ich hab den source nicht angeschaut, aber vlt hilft dir meine denkweise:


Code:


dim zeit as double

WievielSekunden! = 2

zeit=timer
do
  [Deine Spielschleife]
  if timer > Zeit + WievielSekunden! then
   zeit=timer
   DeineSekunde = DeineSekunde + 1
  end if
  locate 1: print es sind schon"; DeineSekunde; "Sekunden vergangen."
loop until [....]



in meinem beispiel wäre eine sekunde im spiel also erst nach 2 echten sekunden rum... anhalten kannst du auch, indem du z.B in der if-anfrage noch eine variable einbaust.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 03.09.2006, 20:10    Titel: Antworten mit Zitat

Hallo

Wie Jojo schon geschrieben hat, kannst du mit TIMER arbeiten, dann geht deine Uhr einerseits richtig, andererseits kannst du so auch auf Zehntelsekunden genau messen. Aber mal was anderes - hast du schon überlegt, anstelle der Tastatur richtige Taster zu benutzen, die du an den COM-Port anschliessen könntest? Das wäre relativ einfach zu machen und du bräuchtest dazu auch keine Elektronik oder zusätzliche Stromversorgung.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 06.09.2006, 16:32    Titel: Antworten mit Zitat

Nochmal eine Frage!

Welche Taster würdet ihr dazu nehmen?
Wie programmiert man dann so etwas dass man mit den Tastern die Zeit steuert?
Gibt es noch eine Alternative zu Comport?
Ich glaube mein Laptop hat keinen Comport mehr?

Wenn aber erst nach 2 echten Sekunden bei meinem Programm 1 Sekunde vorrüber ist läuft das Programm ja wieder oder immer noch nicht mit der echten Uhr synchron oder?

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 06.09.2006, 16:54    Titel: Antworten mit Zitat

Vielleicht hilft es dir weiter wenn du die Future Lib verwendest???
Die verwendet nämlich einen ziemlich genauen Timer.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 07.09.2006, 00:16    Titel: Antworten mit Zitat

Hallo

Dafür eine lib zu verwenden ist meiner Meinung nach mit Kanonen auf Spatzen geschossen. Ich stelle mir das so vor:

Code:
CLS
KEY(1) ON
ON KEY(1) GOSUB abbruch
PRINT "Start und Wechsel mit einer beliebigen Taste, Abbruch mit F1"

gesamt = 20                'Bedenkzeit je Spieler in Sekunden
zw = gesamt                'zw = Zeit Weiss
zs = gesamt                'zs = Zeit Schwrz
LOCATE 5, 5
PRINT "Weiss  :";
PRINT USING "####.#"; zw
LOCATE 7, 5
PRINT "Schwarz:";
PRINT USING "####.#"; zs

DO: LOOP WHILE INKEY$ = ""
DO
 sz = TIMER
 DO
  dt = TIMER - sz
  IF dt < 0 THEN dt = dt + 86400
  LOCATE 5, 13: PRINT USING "####.#"; ABS(zw - dt)
 LOOP UNTIL INKEY$ <> "" OR dt + .05 > zw
 IF dt + .05 > zw THEN EXIT DO
 zw = zw - dt
 sz = TIMER
 DO
  dt = TIMER - sz
  IF dt < 0 THEN dt = dt + 86400
  LOCATE 7, 13: PRINT USING "####.#"; ABS(zs - dt)
 LOOP UNTIL INKEY$ <> "" OR dt + .05 > zs
 zs = zs - dt
LOOP WHILE zw > .05 AND zs > .05

abbruch:
END


Ist natürlich nur das Grundgerüst. Eine schöne grafische Umsetzung etc. ist Fleissarbeit, die ich dir gerne überlasse...

Als Taster kannst du alles nehmen, was irgendwie Kontakt gibt, also auch was selbstgebasteltes oder einen beliebigen Taster von einem Elektronikhandel oder -versand. Anstelle des COM-Ports ginge auch die Druckerschnittstelle. Ins Programm einbinden kannst du so einen Taster genauso als "Ereignis" wie einen Knopfdruck auf der Tastatur. Wenn es dich interessiert, kann ich dir noch genauer sagen wie.

Gruss
Skilltronic

EDIT: Ich habe noch eine kleine Macke in meinem Programm entdeckt. Manchmal läuft die Uhr um mehr als eine halbe Zehntelsekunde über die Null hinaus. Das Runden durch PRINT USING in Verbindung mit dem ABS (das soll nur die Anzeige von -0.0 verhindern) führt dazu, dass ab und zu am Ende 0.1 Sekunden angezeigt werden. Das müsste man noch irgendwie zurechtbiegen.

EDIT2: Ich hab's mittlerweile zurechtgebogen, jetzt endet es immer bei Null.
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz