Commit | Line | Data |
---|---|---|
f24104ee | 1 | .data |
93bb4f4c | 2 | |
f24104ee JB |
3 | welcome: .asciiz "Bienvenue dans le jeu de Mastermind.\nUne sequence de quatre chiffres de 1 à 8 a ete générée.\nA vous de la deviner !" |
4 | play: .asciiz "Commencer à jouer:" | |
aa71919b | 5 | lost_msg: .asciiz "Vous avez perdu !" |
f24104ee | 6 | win_msg: .asciiz "Vous avez gagné !" |
aa71919b JB |
7 | temp_msg: .asciiz " bien placé" |
8 | exclamation_point: .asciiz "! " | |
f24104ee JB |
9 | interrogation_point: .asciiz "? " |
10 | newline: .asciiz "\n" | |
93bb4f4c | 11 | |
f24104ee JB |
12 | O: .ascii "O" |
13 | X: .ascii "X" | |
14 | tiret: .ascii "-" | |
93bb4f4c | 15 | |
f24104ee JB |
16 | compare_buffer: .space 5 |
17 | input_value: .byte 0:5 | |
18 | guess_value: .byte 0:5 | |
93bb4f4c | 19 | |
f24104ee | 20 | .text |
93bb4f4c JB |
21 | |
22 | main: | |
23 | ||
f24104ee JB |
24 | # show intro and rules |
25 | display_welcome: | |
26 | la $a0, newline | |
27 | li $v0, 4 | |
93bb4f4c | 28 | syscall |
f24104ee JB |
29 | la $a0, welcome |
30 | li $v0, 4 | |
93bb4f4c | 31 | syscall |
f24104ee JB |
32 | la $a0, newline |
33 | li $v0, 4 | |
93bb4f4c | 34 | syscall |
f24104ee JB |
35 | la $a0, play |
36 | li $v0, 4 | |
93bb4f4c | 37 | syscall |
f24104ee JB |
38 | la $a0, newline |
39 | li $v0, 4 | |
93bb4f4c | 40 | syscall |
aa71919b | 41 | |
f24104ee JB |
42 | generate_sequence: |
43 | la $t0, guess_value | |
aa71919b | 44 | |
f24104ee JB |
45 | li $a1, 8 |
46 | li $v0, 42 | |
47 | syscall | |
48 | addi $a0, $a0, 1 # Put the integer into the [1-8] range | |
aa71919b | 49 | |
f24104ee | 50 | sb $a0, 0($t0) |
aa71919b | 51 | |
f24104ee JB |
52 | li $a1, 8 |
53 | li $v0, 42 | |
54 | syscall | |
55 | addi $a0, $a0, 1 # Put the integer into the [1-8] range | |
aa71919b | 56 | |
f24104ee | 57 | sb $a0, 1($t0) |
aa71919b | 58 | |
f24104ee JB |
59 | li $a1, 8 |
60 | li $v0, 42 | |
61 | syscall | |
62 | addi $a0, $a0, 1 # Put the integer into the [1-8] range | |
aa71919b | 63 | |
f24104ee | 64 | sb $a0, 2($t0) |
aa71919b | 65 | |
f24104ee JB |
66 | li $a1, 8 |
67 | li $v0, 42 | |
68 | syscall | |
69 | addi $a0, $a0, 1 # Put the integer into the [1-8] range | |
aa71919b | 70 | |
f24104ee | 71 | sb $a0, 3($t0) |
aa71919b | 72 | |
f24104ee JB |
73 | generate_sequence_loop_end: |
74 | ||
75 | la $s0, ($zero) # Initialize loop counter to zero | |
76 | la $s1, compare_buffer | |
77 | loop: | |
78 | beq $s0, 10, lost | |
79 | # ask user for the next input | |
80 | input: | |
81 | la $a0, newline | |
82 | li $v0, 4 | |
83 | syscall | |
aa71919b | 84 | |
f24104ee JB |
85 | la $a0, ($s0) |
86 | li $v0, 1 | |
87 | syscall | |
88 | la $a0, interrogation_point | |
89 | li $v0, 4 | |
90 | syscall | |
aa71919b | 91 | |
f24104ee JB |
92 | la $a0, input_value # Store the answer |
93 | li $a1, 5 | |
94 | li $v0, 8 # Load syscall read_string | |
aa71919b | 95 | syscall # Make the syscall |
f24104ee | 96 | |
aa71919b | 97 | # check that each input values are in the right range |
f24104ee JB |
98 | check_input: |
99 | la $t7, input_value | |
aa71919b | 100 | |
f24104ee JB |
101 | lb $t5, 0($t7) |
102 | andi $t5, $t5, 0x0F # ASCII code to integer | |
103 | beq $t5, $zero, input | |
104 | addi $t5, $t5, -9 | |
105 | bgez $t5, input | |
aa71919b | 106 | |
f24104ee JB |
107 | lb $t5, 1($t7) |
108 | andi $t5, $t5, 0x0F # ASCII code to integer | |
109 | beq $t5, $zero, input | |
110 | addi $t5, $t5, -9 | |
111 | bgez $t5, input | |
aa71919b | 112 | |
f24104ee JB |
113 | lb $t5, 2($t7) |
114 | andi $t5, $t5, 0x0F # ASCII code to integer | |
115 | beq $t5, $zero, input | |
116 | addi $t5, $t5, -9 | |
aa71919b JB |
117 | bgez $t5, input |
118 | ||
f24104ee JB |
119 | lb $t5, 3($t7) |
120 | andi $t5, $t5, 0x0F # ASCII code to integer | |
121 | beq $t5, $zero, input | |
122 | addi $t5, $t5, -9 | |
aa71919b JB |
123 | bgez $t5, input |
124 | ||
433eeade | 125 | la $s2, ($zero) # Same counter |
aa71919b | 126 | la $s3 ($zero) |
f24104ee JB |
127 | compare_input: |
128 | la $t7, input_value | |
129 | la $t6, guess_value | |
130 | la $t5, O | |
131 | la $t4, X | |
aa71919b JB |
132 | la $t3, tiret |
133 | ||
f24104ee JB |
134 | lb $t0, 0($t7) |
135 | andi $t0, $t0, 0x0F # ASCII code to integer | |
136 | lb $t1, 0($t6) | |
137 | beq $t0, $t1, same1 | |
138 | j different1 | |
139 | same1: | |
140 | sb $0, 0($t7) | |
141 | sb $t5, 0($s1) | |
aa71919b JB |
142 | addi $s2, $s2, 1 |
143 | different1: | |
f24104ee JB |
144 | lb $t0, 1($t7) |
145 | andi $t0, $t0, 0x0F # ASCII code to integer | |
146 | lb $t1, 1($t6) | |
147 | beq $t0, $t1, same2 | |
148 | j different2 | |
149 | same2: | |
150 | sb $zero, 1($t7) | |
151 | sb $t5, 1($s1) | |
152 | addi $s2, $s2, 1 | |
153 | different2: | |
154 | lb $t0, 2($t7) | |
155 | andi $t0, $t0, 0x0F # ASCII code to integer | |
156 | lb $t1, 2($t6) | |
157 | beq $t0, $t1, same3 | |
158 | j different3 | |
159 | same3: | |
160 | sb $zero, 2($t7) | |
161 | sb $t5, 2($s1) | |
162 | addi $s2, $s2, 1 | |
aa71919b | 163 | different3: |
f24104ee JB |
164 | lb $t0, 3($t7) |
165 | andi $t0, $t0, 0x0F # ASCII code to integer | |
166 | lb $t1, 3($t6) | |
167 | beq $t0, $t1, same4 | |
aa71919b JB |
168 | j different4 |
169 | same4: | |
f24104ee JB |
170 | sb $zero, 3($t7) |
171 | sb $t5, 3($s1) | |
172 | addi $s2, $s2, 1 | |
173 | different4: | |
aa71919b JB |
174 | beq $s2, 4, won |
175 | ||
176 | ||
177 | print_comp_result: | |
f24104ee JB |
178 | la $a0, newline |
179 | li $v0, 4 | |
180 | syscall | |
181 | la $a0, ($s0) | |
182 | li $v0, 1 | |
183 | syscall | |
184 | la $a0, exclamation_point | |
185 | li $v0, 4 | |
186 | syscall | |
187 | la $a0, ($s2) | |
188 | li $v0, 1 | |
189 | syscall | |
190 | la $a0, temp_msg | |
191 | li $v0, 4 | |
192 | syscall | |
aa71919b | 193 | |
f24104ee | 194 | addi $s0, $s0, 1 |
aa71919b JB |
195 | j loop |
196 | ||
f24104ee JB |
197 | won: |
198 | la $a0, newline | |
199 | li $v0, 4 | |
200 | syscall | |
201 | la $a0, win_msg | |
202 | li $v0, 4 | |
aa71919b JB |
203 | syscall |
204 | ||
f24104ee | 205 | j exit |
aa71919b | 206 | |
f24104ee JB |
207 | lost: |
208 | la $a0, newline | |
209 | li $v0, 4 | |
aa71919b | 210 | syscall |
f24104ee JB |
211 | la $a0, lost_msg |
212 | li $v0, 4 | |
aa71919b JB |
213 | syscall |
214 | ||
f24104ee | 215 | j exit |
aa71919b | 216 | |
f24104ee JB |
217 | exit: |
218 | li $v0, 10 | |
433eeade | 219 | syscall |