hallo,
bin immernoch am testen von glbasic und wollte mal fragen, ob jemand rein zufällig einen code hat, wie ich eine stoppuhr auf den
bildschirm bekomme, bzw. wie ich das am besten berechne könnte ?
würde mich sehr freuen...
danke im vorfeld
gruß
tom
Eine ganz einfache könntest du so machen:
LOCAL Stopuhr = 21 // für 20 Sekunden, weil eine gleich abgezogen wird ;)
LOCAL timer
WHILE TRUE
IF Stopuhr > 0 AND timer < GETTIMERALL() // Ist Stopuhr größer Null,
// und der Timer kleiner als der GETTIMERALL
timer = GETTIMERALL()+1000 // 1000ms = 1 Sekunde
DEC Stopuhr,1 // Stopuhr um eins verringern
ENDIF
IF Stopuhr > 0 // ist Stopuhr größer 0
PRINT Stopuhr,10,10 // Zeige Zeit
ELSE
PRINT "Fertig!",10,10 // Zeige Fertig! ;)
ENDIF
SHOWSCREEN
WEND
END
hi,
danke für die mühe,
wie könnte man die sache umschreiben, um die uhr hochauflösender zu machen?
dass heißt, ich möchte so eine art reaktionsspiel schreiben und möchte nachdem ein bild auf dem screen erscheint, dass man schnell eine taste drücken muß und genau
diese zeit von erscheinen des bildes bis zum tastendruck möchte ich so exakt wie möglich messen; also auch ms...
ich versuche mich mal am umschreiben, falls du/jemand ein tipp hast, immer gerne ;-)
gruß
tom
ohje, ich glaube, das ist doch schwieriger als gedacht :-(
wäre über hilfe sehr froh.
danke tom
Hallo,
ich versuche mich immernoch an einer Stoppuhr und bekomme es einfach nicht hin, daß Problem ist, das ich GETTIMERALL() nicht mehr auf 0 bekomme; mir
ist klar, das ich damit den Start des Programms messen kann, deshalb weiß ich nicht, wie ich es anstellen soll, das eine variable wenn diese 59 erreicht hat also die sekunden, dann
eine weitere um 1 für die Minuten erhöht werden kann. Ohje, ich hoffe Ihr versteht wie ich das meine ?
nach unterem Code rasen die minuten wenn sekunden=59 erreicht hat und so soll es ja nicht sein ;-(
Über Hilfe wäre ich dankbar...
Gruß Tom
LOCAL Stopuhr = 21 // für 20 Sekunden, weil eine gleich abgezogen wird ;)
LOCAL timer
LOCAL minuten,sekunden
LOADFONT "smalfont.png",1
SETFONT 1
stoppuhr:
timer = GETTIMERALL()+1000 // 1000ms = 1 Sekunde
sekunden=timer/1000
IF sekunden>59
minuten=minuten+1
timer=0:sekunden=0
ENDIF
PRINT minuten+" "+sekunden,10,10 // Zeige Zeit
SHOWSCREEN
GOTO stoppuhr
END
Also das ist mir dann doch zu einfach. ;) Am Ehesten lernt man ja durch Fehler und wieder probieren.
Schau mal unter Samples/Projects/s-zero. In dem Spiel läuft auch eine Uhr oben am Bildschirm. Schau mal den Code durch ob du es findest. =D Ist eigentlich nicht schwer. So lernt man am besten. Wenn's nicht klappt dann sag bescheid. :) Und nur nicht aufgeben. :good:
Cheers
Hi,
erstmal Danke für den Tipp, ich habe es soweit hinbekommen; bin mir allerdings noch nicht so 100% sicher, ob der Timer auch genau ist...
Gruß Tom
LOADFONT "smalfont.png",1
SETFONT 1
stoppuhr:
st=st+zeit
PRINT "LeerTaste druecken",0,0
PRINT NiceTime$(st),80,80
zeit = GETTIMER()
IF KEY(57) = 1; PRINT "Reaktionszeit Key weiter", 10, 140
PRINT NiceTime$(st),10,190
st=0
KEYWAIT
ENDIF
SHOWSCREEN
GOTO stoppuhr
FUNCTION NiceTime$: misecs
LOCAL mns, sec, ten, a$
mns = INTEGER(misecs/60000); misecs=misecs-mns*60000
sec = INTEGER(misecs/1000); misecs=misecs-sec*1000
ten = INTEGER(misecs)
a$ =mns + ":" + sec + ":" + ten
RETURN a$
ENDFUNCTION
Stopuhr in die Hand nehmen und nachmessen ;)
Sollte aber normal passen.
nimm GetTimerAll()! Der GETTIMER kann in der Summe abweichen.
ok, danke für den tipp, jetzt rauscht die uhr ja nur so dahin; irgendwie muß ich da wohl noch die
timings anders setzen...
jedenfalls danke für den hinweis...
gruß tom
So hab da mal was für dich gemacht :)
Brauch es nämlich auch bald, also kannste es mitnutzen :P
TYPE tTimer
tTimer_run = FALSE
tTimer_starttime
tTimer_all
tTimer_min
tTimer_sec
tTimer_ms
ENDTYPE
GLOBAL _tTimer[] AS tTimer
// erstelle "Stopuhren"
timer = CreateTimer()
timer2 = CreateTimer()
// Starte Stopuhr
StartTimer(timer)
WHILE TRUE
UpdateAllTimer() // Update alle "stopuhren"
IF KEY(57) THEN StartTimer(timer2) // Wenn Space-Taste gedrückt starte timer2
// Gibt den timer aus ;)
PRINT GetMin(timer)+":"+GetSec(timer)+":"+GetMS(timer), 10,10
PRINT GetMin(timer2)+":"+GetSec(timer2)+":"+GetMS(timer2), 10,30
SHOWSCREEN
WEND
END
FUNCTION CreateTimer: // return timerID
LOCAL t AS tTimer
DIMPUSH _tTimer[],t
RETURN LEN(_tTimer[])-1
ENDFUNCTION
FUNCTION StartTimer: timerID
IF _tTimer[timerID].tTimer_run = FALSE
_tTimer[timerID].tTimer_run = TRUE
_tTimer[timerID].tTimer_starttime = GETTIMERALL()
ENDIF
ENDFUNCTION
FUNCTION StopTimer: timerID
IF _tTimer[timerID].tTimer_run = TRUE
_tTimer[timerID].tTimer_run = FALSE
ENDIF
ENDFUNCTION
FUNCTION UpdateAllTimer:
FOREACH t IN _tTimer[]
IF t.tTimer_run = TRUE
t.tTimer_all = INTEGER(GETTIMERALL() - t.tTimer_starttime)
t.tTimer_ms = MOD(t.tTimer_all,1000)
t.tTimer_sec = INTEGER(t.tTimer_all/1000)-t.tTimer_min*60
t.tTimer_min = INTEGER((t.tTimer_all/1000)/60)
ENDIF
NEXT
ENDFUNCTION
FUNCTION GetAll: timerID
RETURN _tTimer[timerID].tTimer_all
ENDFUNCTION
FUNCTION GetMS: timerID
RETURN _tTimer[timerID].tTimer_ms
ENDFUNCTION
FUNCTION GetSec: timerID
RETURN _tTimer[timerID].tTimer_sec
ENDFUNCTION
FUNCTION GetMin: timerID
RETURN _tTimer[timerID].tTimer_min
ENDFUNCTION
Quote from: Schranz0r on 2008-Oct-28
So hab da mal was für dich gemacht :)
Brauch es nämlich auch bald, also kannste es mitnutzen :P
TYPE tTimer
tTimer_run = FALSE
tTimer_starttime
tTimer_all
tTimer_min
tTimer_sec
tTimer_ms
ENDTYPE
GLOBAL _tTimer[] AS tTimer
// erstelle "Stopuhren"
timer = CreateTimer()
timer2 = CreateTimer()
// Starte Stopuhr
StartTimer(timer)
WHILE TRUE
UpdateAllTimer() // Update alle "stopuhren"
IF KEY(57) THEN StartTimer(timer2) // Wenn Space-Taste gedrückt starte timer2
// Gibt den timer aus ;)
PRINT GetMin(timer)+":"+GetSec(timer)+":"+GetMS(timer), 10,10
PRINT GetMin(timer2)+":"+GetSec(timer2)+":"+GetMS(timer2), 10,30
SHOWSCREEN
WEND
END
FUNCTION CreateTimer: // return timerID
LOCAL t AS tTimer
DIMPUSH _tTimer[],t
RETURN LEN(_tTimer[])-1
ENDFUNCTION
FUNCTION StartTimer: timerID
IF _tTimer[timerID].tTimer_run = FALSE
_tTimer[timerID].tTimer_run = TRUE
_tTimer[timerID].tTimer_starttime = GETTIMERALL()
ENDIF
ENDFUNCTION
FUNCTION StopTimer: timerID
IF _tTimer[timerID].tTimer_run = TRUE
_tTimer[timerID].tTimer_run = FALSE
ENDIF
ENDFUNCTION
FUNCTION UpdateAllTimer:
FOREACH t IN _tTimer[]
IF t.tTimer_run = TRUE
t.tTimer_all = INTEGER(GETTIMERALL() - t.tTimer_starttime)
t.tTimer_ms = MOD(t.tTimer_all,1000)
t.tTimer_sec = INTEGER(t.tTimer_all/1000)-t.tTimer_min*60
t.tTimer_min = INTEGER((t.tTimer_all/1000)/60)
ENDIF
NEXT
ENDFUNCTION
FUNCTION GetAll: timerID
RETURN _tTimer[timerID].tTimer_all
ENDFUNCTION
FUNCTION GetMS: timerID
RETURN _tTimer[timerID].tTimer_ms
ENDFUNCTION
FUNCTION GetSec: timerID
RETURN _tTimer[timerID].tTimer_sec
ENDFUNCTION
FUNCTION GetMin: timerID
RETURN _tTimer[timerID].tTimer_min
ENDFUNCTION
Hi,
yepp, der Code ist wirklich gut....DANKE
Gruß
Tom