-
Notifications
You must be signed in to change notification settings - Fork 0
/
tictactoe.mil
88 lines (73 loc) · 2.51 KB
/
tictactoe.mil
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
// 819 unop
// 745 function def
// 722 immediate cast
// 712 advanced immediate cast
// 682 && || instructions
// 658 void return type
fn<C> getchar() -> (i32)
fn<C> putchar(char: i32) -> (i32)
fn<C> exit(code: i32) -> (i32)
fn<C> printf(str: i64, v1: i64) -> (i32)
player: i8 = 0
board: [i8] = @i8[
'1', '2', '3',
'4', '5', '6',
'7', '8', '9'
]
marks: [i8] = @i8['O', 'X']
game_running: i8 = 1
played: i8 = 0
while(1) {
print_board(board)
input: i32 = getchar()
putchar('\n')
if(input == 'q') { exit(0) }
if(input == '1' && board@i8[0] != 1) { board@i8[0] = marks@i8[player] played = 1 }
if(input == '2' && board@i8[1] != 2) { board@i8[1] = marks@i8[player] played = 1 }
if(input == '3' && board@i8[2] != 3) { board@i8[2] = marks@i8[player] played = 1 }
if(input == '4' && board@i8[3] != 4) { board@i8[3] = marks@i8[player] played = 1 }
if(input == '5' && board@i8[4] != 5) { board@i8[4] = marks@i8[player] played = 1 }
if(input == '6' && board@i8[5] != 6) { board@i8[5] = marks@i8[player] played = 1 }
if(input == '7' && board@i8[6] != 7) { board@i8[6] = marks@i8[player] played = 1 }
if(input == '8' && board@i8[7] != 8) { board@i8[7] = marks@i8[player] played = 1 }
if(input == '9' && board@i8[8] != 9) { board@i8[8] = marks@i8[player] played = 1 }
if played {
if(check_win(board)) {
print_board(board)
printf("Player '%c' won!\n", marks@i8[player])
exit(0)
}
if (player == 0) { player = 1 } else { player = 0 }
played = 0
}
}
fn check_win(board: i64) -> (i8) {
won: i8 = 0
if(check_single(board@i8[0], board@i8[1], board@i8[2])) { won = 1 }
if(check_single(board@i8[3], board@i8[4], board@i8[5])) { won = 1 }
if(check_single(board@i8[6], board@i8[7], board@i8[8])) { won = 1 }
if(check_single(board@i8[0], board@i8[3], board@i8[6])) { won = 1 }
if(check_single(board@i8[1], board@i8[4], board@i8[7])) { won = 1 }
if(check_single(board@i8[2], board@i8[5], board@i8[8])) { won = 1 }
if(check_single(board@i8[0], board@i8[4], board@i8[8])) { won = 1 }
if(check_single(board@i8[2], board@i8[4], board@i8[6])) { won = 1 }
return won
}
fn check_single(v1: i8, v2: i8, v3: i8) -> (i8) {
return v1 == v2 && v1 == v3
}
fn print_board(board: i64) {
printf("%c ", board@i8[0])
printf("%c ", board@i8[1])
printf("%c \n", board@i8[2])
printf("%c ", board@i8[3])
printf("%c ", board@i8[4])
printf("%c \n", board@i8[5])
printf("%c ", board@i8[6])
printf("%c ", board@i8[7])
printf("%c \n", board@i8[8])
putchar('=')
putchar('\n')
return;
}
return 0