Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Another easy one... Timer problem?
#1
Riddle me this, Batmen...  easy for most, hard for me! When I run this bit of code, I expect Score to be 10,20,30...
If I then delay beyond the 5 seconds allowed and enter N$ again, I expect the score to be 39 (which it is)
But if I then enter N$ again (within the 5 seconds allowed),  I get 50, instead of the 49 I expect.  What am I doing wrong?
Code: (Select All)
Pick = 0
GetInput:
T1 = Timer: '                             start timer
Input N$
Pick = Pick + 1
T2 = Timer '                              read timer again
TimePenalty = Int((T2 - T1) / 5) '        penalty 5 points per second since last input
Score = Pick * 10 - TimePenalty '         calculate score as Pick * 10 - TimePenalty
Print "Pick:"; Str$(Pick); "  t1:"; Str$(T1); "  t2:"; T2; "  Timepenalty:"; TimePenalty; "  Score:"; Score
GoTo GetInput
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, Western Australia.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply
#2
The issue is that `score` isn't cumulative, instead it's set equal to `Pick * 10 - TimePenalty` on each loop. `TimePenalty` is only the penalty for the current loop, it doesn't include any penalties for previous loops - even though there was a 1 point penalty on the previous loop to get 39 that penalty is lost when you do the next loop and `TimePenalty` is set to 0 (because you're within the 5 second window).

A simple solution is to do `TimePenalty = TimePenalty + Int((T2 - T1) / 5)`, that way `TimePenalty` will include any penalties from previous loops.

Alternatively you could stop using `Pick` and do `Score = Score + 10 - TimePenalty`, so that way score retains the penalties.

Of course, don't do both of the options or you'll double-count the penalties Big Grin
Reply
#3
(03-19-2025, 06:05 AM)DSMan195276 Wrote: The issue is that `score` isn't cumulative, instead it's set equal to `Pick * 10 - TimePenalty` on each loop. `TimePenalty` is only the penalty for the current loop, it doesn't include any penalties for previous loops - even though there was a 1 point penalty on the previous loop to get 39 that penalty is lost when you do the next loop and `TimePenalty` is set to 0 (because you're within the 5 second window).

A simple solution is to do `TimePenalty = TimePenalty + Int((T2 - T1) / 5)`, that way `TimePenalty` will include any penalties from previous loops.

Alternatively you could stop using `Pick` and do `Score = Score + 10 - TimePenalty`, so that way score retains the penalties.

Of course, don't do both of the options or you'll double-count the penalties Big Grin

Ahh, thanks DSMan.
Another silly oversight on my part! Now I can continue with my new game.  Smile
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, Western Australia.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply
#4
Quote:' penalty 5 points per second since last input

Don't you want to multiply by 5, not divide by 5 for 5 point penalty for every second (delay of input)
b = b + ...
Reply
#5
(03-19-2025, 10:53 AM)bplus Wrote:
Quote:'        penalty 5 points per second since last input

Don't you want to multiply by 5, not divide by 5 for 5 point penalty for every second (delay of input)

Hi bplus.
No, I didn't want 5 points penalty per second, I wanted 1 point per 5 seconds.
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, Western Australia.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply
#6
LOL how could I have read this wrong!

Quote:' penalty 5 points per second since last input
b = b + ...
Reply
#7
(03-19-2025, 11:24 PM)bplus Wrote: LOL how could I have read this wrong!

Quote:' penalty 5 points per second since last input

Oops, my bad (again)! Sorry!
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, Western Australia.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply
#8
Okay, subtracting 5pts from Phil's rep as we speak... This will only take a second!

Pete Big Grin Big Grin Big Grin
Reply
#9
Gosh, haven't you guys learned after all these years of coding:  Comments can *say* anything.  That doesn't mean the code actually *does* that, or is even supposed to do what the comments say.  Tongue
Reply
#10
(03-20-2025, 01:16 AM)Pete Wrote: Okay, subtracting 5pts from Phil's rep as we speak... This will only take a second!

Pete Big Grin Big Grin Big Grin

But I did that deliberately, so bplus et al would take notice! Honest! Cry 
C'n I have my points back, pleeeeze Peter???
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, Western Australia.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply




Users browsing this thread: 1 Guest(s)