 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
b3ast
Anmeldungsdatum: 27.04.2008 Beiträge: 34
|
Verfasst am: 15.12.2009, 22:45 Titel: Timerfunktion |
|
|
hab nen kleinen timer geschrieben und bräuchte eure hilfe. hab jetzt angefangen, den zauberwürfel 3x3x3 und 4x4x4 in zeit zu lösen. da ich mir kein teueres gerät dafür kaufen will, mach ichs einfach mit meinem pc. bin jetzt aber bissl verwirrt, weil der wert ".000067" laut kochbuch nicht korrekt ist, hab da bissl rumprobiert und der timer zählt jetzt ziemlich genau 1 sekunde je sekunde dazu.
was könnte ich noch verbessern?
Code: | y = 1
CLS
begin:
TIMER ON
t = TIMER
sec = 0
min = 0
LOCATE y, 1: PRINT "Zeit: 0 : 0"
DO
SELECT CASE INKEY$
CASE CHR$(27)
END
CASE SPACE$(1)
GOSUB prog
END SELECT
LOOP
prog:
DO
LOCATE y, 10: PRINT CINT(sec)
LOCATE y, 6: PRINT CINT(min)
sec = sec + .000067
IF sec > 59 THEN
sec = 0
min = min + 1
END IF
LOOP UNTIL INKEY$ = SPACE$(1)
DO
LOCATE 1, 20: INPUT "Wollen Sie weitere Messungen vornehmen? [J / N]"; fr$
IF fr$ = "j" OR fr$ = "J" THEN
y = y + 1
GOSUB begin
END IF
IF fr$ <> "" THEN END
LOOP
|
|
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 17.12.2009, 17:09 Titel: |
|
|
den "prog:" - teil würde an deiner stelle so umwandeln, dass die zählung der zeit nicht abhängig von der prozessorleistung ist, sondern mit der im pc eingebauten uhr funtioniert.
dafür brauchst du den befehl TIMER
er gibt dir die anzahl der sekunden die seit mitternacht vergangen sind auf mehrere stellen nach dem komma an:
Eingabe:
t#=TIMER
PRINT t#
SLEEP
Ausgabe:
10765.59315447
deine sub würde dann so aussehen:
starttime#=TIMER 'aktuelle startzeit festhalten
DO
akttime#=TIMER 'aktuelle zeit festhalten
runtime#=starttime#-akttime# 'bereits verstrichene zeit = startzeit - aktuelle zeit
LOCATE y, 10:PRINT CINT(runtime#);" sec."
LOOP UNTIL INKEY$ 'bei beliebigem tastendruck schleife verlassen
(muss jetz weg, das umwandeln in minuten bleibt jetzt dir überlassen. aber ich schaue heute abend noch mal rein und hilf dir gegebenenfalls weiter ) |
|
Nach oben |
|
 |
b3ast
Anmeldungsdatum: 27.04.2008 Beiträge: 34
|
Verfasst am: 17.12.2009, 20:24 Titel: |
|
|
oh, mein fehler, wollte die timer funktion eigentlich einbauen und hab dann ohne die variable gearbeitet.
den befehl "cint" habe ich jetzt durch "fix" getauscht, da damit nicht gerundet, sondern nur die kommastelle weggeschnitten wird. wie ich die minuten ausrechne weiss ich auch, soweit bin ich noch gekommen.
jetzt habe ich aber trotzdem ein problem. wie bekomme ich bei 60 sekunden die sekunden aber wieder auf 0, da steh ich irgendwie auf n schlauch. das macht mich immer so aggressiv, wenn was nicht hinhaut. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 18.12.2009, 01:11 Titel: |
|
|
Z. B. mit runtime# MOD 60 _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
b3ast
Anmeldungsdatum: 27.04.2008 Beiträge: 34
|
Verfasst am: 18.12.2009, 18:27 Titel: |
|
|
ah danke, jetzt funzt das endlich. |
|
Nach oben |
|
 |
b3ast
Anmeldungsdatum: 27.04.2008 Beiträge: 34
|
Verfasst am: 18.12.2009, 19:32 Titel: |
|
|
jetzt wollte ich das programm kompilieren und die exe datei lässt sich nicht ausführen.
es wird der fehler "illegal function call in line no line number in module timer at adress 06b6:00b5" ausgespuckt.
hier der code:
Code: | CLS
y = 5
zaehler = 1
'---Zeichnen des Spielfeldes
LOCATE 2, 2: PRINT " ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
FOR j = 3 TO 39
LOCATE j, 2: PRINT "±³"
NEXT j
LOCATE 40, 2: PRINT "±ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
LOCATE 41, 2: PRINT "±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±"
FOR i = 3 TO 39
LOCATE i, 79: PRINT "³"
NEXT i
LOCATE 3, 10: PRINT "S T A C K M A T v1.1 (C) Copyright by Steff Dezember 2009"
LOCATE 4, 3: PRINT "Ã"
LOCATE 4, 79: PRINT "Ž"
FOR k = 4 TO 78
LOCATE 4, k: PRINT "Ä"
NEXT k
LOCATE 50, 2: PRINT "Zum Starten die Leertaste drcken!"
start:
LOCATE y, 5: PRINT zaehler
LOCATE y, 7: PRINT ".)"
LOCATE y, 10: PRINT "0 : 0"
DO: LOOP UNTIL INKEY$ = SPACE$(1)
starttime# = TIMER 'aktuelle startzeit festhalten
DO
akttime# = TIMER 'aktuelle zeit festhalten
runtime# = (starttime# - akttime#) 'bereits verstrichene zeit = startzeit - aktuelle zeit
LOCATE y, 14: PRINT FIX(runtime# MOD (60)) * -1
min# = FIX(runtime# / 60)
LOCATE y, 9: PRINT min# * -1
LOOP UNTIL INKEY$ = SPACE$(1) 'bei beli ebigem tastendruck schleife verlassen
LOCATE y, 24: INPUT "Wollen Sie erneut die Zeit messen? [J/N] ", in$
IF in$ = "j" OR in$ = "J" THEN
y = y + 1
zaehler = zaehler + 1
GOSUB start
ELSE
IF in$ <> "" THEN END
END IF
|
|
|
Nach oben |
|
 |
b3ast
Anmeldungsdatum: 27.04.2008 Beiträge: 34
|
Verfasst am: 18.12.2009, 21:05 Titel: |
|
|
hat sich erledigt. das lag an dem rahmen, den ich außenrum gemacht habe. weiss nicht genau, wieviele zeichen ich da verwenden darf, jedenfalls konnte die exe datei den rahmen nicht komplett anzeigen und hat deshalb nen fehler ausgespuckt. |
|
Nach oben |
|
 |
|
|
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.
|
|