/
game.rap
executable file
·74 lines (68 loc) · 1.93 KB
/
game.rap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
proc GAME ()
extern: GAME_START, YOUR_TURN, MY_TURN, WRONG
intern: RIDDLE, MIN, MAX, YOU_GUESSED, I_GUESSED
output: "Who'll guess first?"
GAME_START()
do
output: "Your turn:"; YOUR_TURN()
output: "My turn."; MY_TURN()
case
when YOU_GUESSED and I_GUESSED:
output: "Nobody won!"
when YOU_GUESSED:
output: "You won!"
when I_GUESSED:
output: "I won!"
esac
if YOU_GUESSED or I_GUESSED then
return
fi
until WRONG()
output: "You've missed somewhere!"
output: "I don't want to play anymore."
end
proc GAME_START ()
extern: RIDDLE, MIN, MAX, YOU_GUESSED, I_GUESSED
output: "Think of a number from 1 to 1000"
output: "and try to guess mine"
RIDDLE := int_rand(1000)
MIN := 0
MAX := 1001
YOU_GUESSED := no
I_GUESSED := no
end
proc YOUR_TURN ()
extern: RIDDLE, YOU_GUESSED
intern: ATTEMPT
input: ATTEMPT
case
when ATTEMPT>RIDDLE:
output: "My number is less!"
when ATTEMPT<RIDDLE:
output: "My number is greater!"
esac
YOU_GUESSED:= (ATTEMPT = RIDDLE)
end
proc MY_TURN ()
extern: MIN, MAX, I_GUESSED
intern: ATTEMPT, ANSWER, ANSWER_CORRECT
ATTEMPT:= (MIN+MAX) // 2
output: "Is it ", ATTEMPT, "?"
do
output: "Answers: =, > (riddle>", ATTEMPT, "), < (riddle<", ATTEMPT, ")"
input text: ANSWER
ANSWER_CORRECT:= yes
case ANSWER
when ">": MIN := ATTEMPT
when "<": MAX := ATTEMPT
when "=": I_GUESSED := yes
else ANSWER_CORRECT:= no
output:"You did a mistake"
esac
until ANSWER_CORRECT
end
fun WRONG ()
extern: MAX, MIN
return MIN+1=MAX
end
GAME()