suche beispielcode für stoppuhr !

Previous topic - Next topic

xverbatim

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

Schranz0r

Eine ganz einfache könntest du so machen:

Code (glbasic) Select

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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

xverbatim

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




xverbatim

ohje, ich glaube, das ist doch schwieriger als gedacht :-(

wäre über hilfe sehr froh.

danke tom

xverbatim

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

BumbleBee

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
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

xverbatim

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

Schranz0r

Stopuhr in die Hand nehmen und nachmessen ;)
Sollte aber normal passen.
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

nimm GetTimerAll()! Der GETTIMER kann in der Summe abweichen.

xverbatim

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

Schranz0r

So hab da mal was für dich gemacht :)
Brauch es nämlich auch bald, also kannste es mitnutzen :P

Code (glbasic) Select
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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

xverbatim

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

Code (glbasic) Select
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