123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #
- -- $Source$
- -- $State$
- -- $Revision$
- #include "dec.ocm"
- -- General utilities: read and write strings.
- proc puts(value s[]) =
- seq i = [1 for s[byte 0]]
- output ! s[byte i]
- :
- proc gets(var s[]) =
- var length, finished, c:
- seq
- finished := false
- length := 0
-
- while not finished
- seq
- input ? c
- if
- c = 10
- finished := true
- true
- seq
- length := length + 1
- s[byte length] := c
-
- s[byte 0] := length
- :
- -- Our random number generator.
- var seed:
- proc randomise(value s) =
- seq
- seed := s
- :
- proc random(value range, var result) =
- seq
- seed := (20077 * seed) + 12345
- if
- seed < 0
- seed := -seed
- true
- skip
- result := seed \ range
- :
- -- Does the reading-in-the-name thing.
- proc getname =
- var seed, buffer[128]:
- seq
- puts("*nHi there! Before we start, what is your name?*n")
- puts("> ")
- gets(buffer)
-
- seed := 0
- seq i = [1 for buffer[byte 0]]
- seed := seed + buffer[byte i]
- randomise(seed)
- puts("*nHello, ")
- puts(buffer)
- puts("! ")
- :
- -- Plays a single game.
- proc game =
- var Number, Attempts, finished, guess:
- seq
- puts("See if you can guess my number.*n")
- random(100, Number)
- Attempts := 1
- finished := false
- while not finished
- seq
- puts("*n> ")
- var c:
- seq
- c := '*s'
- decin(input, guess, c)
-
- if
- guess = Number
- seq
- puts("*nYou got it right in only ")
- decout(output, Attempts, 0)
- puts(" ")
- if
- Attempts = 1
- puts("go")
- true
- puts("goes")
- puts("!*n")
- finished := true
-
- guess < Number
- puts("*nTry a bit higher.*n")
- guess > Number
- puts("*nTry a bit lower.*n")
- Attempts := Attempts + 1
- :
- var finished, buffer[128]:
- seq
- output ! TEXT
- getname
-
- finished := false
- while not finished
- seq
- game
-
- puts("*nWould you like another go?*n")
- puts("> ")
- gets(buffer)
- if
- (buffer[byte 1] = 'n') or (buffer[byte 1] = 'N')
- seq
- finished := true
- puts("*nThanks for playing --- goodbye!*n")
- true
- puts("*nExcellent! ")
-
|