-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtmain.nim
100 lines (83 loc) · 2.92 KB
/
tmain.nim
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import unittest
import tables
import turn_based_game
import examplegame
const three_poss = {"1": "Take One", "2": "Take Two", "3": "Take Three"}.toOrderedTable
suite "run the simple example game of Thai 21":
test "play a full game with three players":
var game = GameOfThai21()
game.setup(@[Player(name: "A"), Player(name: "B"), Player(name: "C")])
var possibleMoves: OrderedTable[string, string]
# player A, round 1
assert game.status == "[21] flags available."
game.set_possible_moves(possibleMoves)
assert possibleMoves == three_poss
discard game.make_move("2")
game.determine_winner
game.finish_turn
assert game.winner_player_number == 0
# player B, round 1
assert game.status == "[19] flags available."
game.set_possible_moves(possibleMoves)
assert possibleMoves == three_poss
discard game.make_move("2")
game.determine_winner
game.finish_turn
assert game.winner_player_number == 0
# player C, round 1
assert game.status == "[17] flags available."
game.set_possible_moves(possibleMoves)
assert possibleMoves == three_poss
discard game.make_move("2")
game.determine_winner
game.finish_turn
assert game.winner_player_number == 0
# player A, round 2
assert game.status == "[15] flags available."
game.set_possible_moves(possibleMoves)
assert possibleMoves == three_poss
discard game.make_move("3")
game.determine_winner
game.finish_turn
assert game.winner_player_number == 0
# player B, round 2
assert game.status == "[12] flags available."
game.set_possible_moves(possibleMoves)
assert possibleMoves == three_poss
discard game.make_move("3")
game.determine_winner
game.finish_turn
assert game.winner_player_number == 0
# player C, round 2
assert game.status == "[9] flags available."
game.set_possible_moves(possibleMoves)
assert possibleMoves == three_poss
discard game.make_move("3")
game.determine_winner
game.finish_turn
assert game.winner_player_number == 0
# player A, round 3
assert game.status == "[6] flags available."
game.set_possible_moves(possibleMoves)
assert possibleMoves == three_poss
discard game.make_move("3")
game.determine_winner
game.finish_turn
assert game.winner_player_number == 0
# player B, round 3
assert game.status == "[3] flags available."
game.set_possible_moves(possibleMoves)
assert possibleMoves == three_poss
discard game.make_move("2")
game.determine_winner
game.finish_turn
assert game.winner_player_number == 0
# player C, round 3
assert game.status == "[1] flags available."
game.set_possible_moves(possibleMoves)
assert possibleMoves == {"1": "Take One"}.toOrderedTable
discard game.make_move("1")
game.determine_winner
game.finish_turn
assert game.winner_player_number == 3 # player C wins!
assert game.is_over()