mirror of
https://github.com/irmen/prog8.git
synced 2024-11-25 04:31:20 +00:00
94 lines
2.7 KiB
Plaintext
94 lines
2.7 KiB
Plaintext
|
%output prg
|
||
|
%import c64lib
|
||
|
%import mathlib
|
||
|
|
||
|
~ main {
|
||
|
str name = "?" * 80
|
||
|
str guess = "?" * 80
|
||
|
byte secretnumber = 0
|
||
|
byte attempts_left = 10
|
||
|
memory word freadstr_arg = $22 ; argument for FREADSTR
|
||
|
|
||
|
|
||
|
start:
|
||
|
c64.init_system()
|
||
|
c64.VMCSB |= 2 ; lowercase charset
|
||
|
|
||
|
; greeting
|
||
|
c64scr.print_string("Enter your name: ")
|
||
|
Y = c64scr.input_chars(name)
|
||
|
c64.CHROUT("\n")
|
||
|
c64.CHROUT("\n")
|
||
|
c64scr.print_string("Hello, ")
|
||
|
c64scr.print_string(name)
|
||
|
c64.CHROUT(".")
|
||
|
c64.CHROUT("\n")
|
||
|
|
||
|
; create a secret random number from 1-100
|
||
|
c64.RNDA(0) ; fac = rnd(0)
|
||
|
c64.MUL10() ; fac *= 10
|
||
|
c64.MUL10() ; .. and now *100
|
||
|
c64.FADDH() ; add 0.5..
|
||
|
c64.FADDH() ; and again, so +1 total
|
||
|
AY = c64flt.GETADRAY()
|
||
|
secretnumber=A
|
||
|
;A=math.randbyte()
|
||
|
;A+=c64.RASTER
|
||
|
;A-=c64.TIME_LO
|
||
|
;X,secretnumber=math.divmod_bytes(A, 99)
|
||
|
|
||
|
c64scr.print_string("I am thinking of a number from 1 to 100!You'll have to guess it!\n")
|
||
|
|
||
|
printloop:
|
||
|
c64scr.print_string("\nYou have ")
|
||
|
c64scr.print_byte_decimal(attempts_left)
|
||
|
c64scr.print_string(" guess")
|
||
|
|
||
|
; @todo comparison expression so we can do if attempts_left>0 ...
|
||
|
A = attempts_left
|
||
|
A--
|
||
|
; @todo (conditional): if_zero A goto ask_guess
|
||
|
c64scr.print_string("es")
|
||
|
ask_guess:
|
||
|
c64scr.print_string(" left.\nWhat is your next guess? ")
|
||
|
Y = c64scr.input_chars(guess)
|
||
|
c64.CHROUT("\n")
|
||
|
freadstr_arg = guess
|
||
|
c64.FREADSTR(A)
|
||
|
AY = c64flt.GETADRAY()
|
||
|
A -= secretnumber ; @todo condition so we can do if guess > secretnumber....
|
||
|
; @todo (conditional): if_zero goto correct_guess
|
||
|
; @todo (conditional): if_gt goto too_high
|
||
|
c64scr.print_string("That is too ")
|
||
|
c64scr.print_string("low!\n")
|
||
|
goto continue
|
||
|
|
||
|
correct_guess:
|
||
|
c64scr.print_string("\nThat's my number, impressive!\n")
|
||
|
goodbye()
|
||
|
return
|
||
|
|
||
|
too_high:
|
||
|
c64scr.print_string("That is too ")
|
||
|
c64scr.print_string("high!\n")
|
||
|
|
||
|
continue:
|
||
|
attempts_left--
|
||
|
; @todo (conditional): if_zero attempts_left goto game_over
|
||
|
goto printloop
|
||
|
|
||
|
game_over:
|
||
|
c64scr.print_string("\nToo bad! It was: ")
|
||
|
c64scr.print_byte_decimal(secretnumber)
|
||
|
c64.CHROUT("\n")
|
||
|
return goodbye()
|
||
|
goodbye() ; @todo fix subroutine usage tracking, it doesn't register this one
|
||
|
return
|
||
|
|
||
|
sub goodbye ()->() {
|
||
|
c64scr.print_string("\nThanks for playing. Bye!\n")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
}
|