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:" | |
5 | lost_msg: .asciiz "Vous avez perdu !" | |
6 | win_msg: .asciiz "Vous avez gagné !" | |
7 | temp_msg: .asciiz " bien placé" | |
8 | exclamation_point: .asciiz "! " | |
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 |
f24104ee JB |
41 | |
42 | generate_sequence: | |
43 | la $t0, guess_value | |
44 | ||
45 | li $a1, 8 | |
46 | li $v0, 42 | |
47 | syscall | |
48 | addi $a0, $a0, 1 # Put the integer into the [1-8] range | |
49 | ||
50 | sb $a0, 0($t0) | |
51 | ||
52 | li $a1, 8 | |
53 | li $v0, 42 | |
54 | syscall | |
55 | addi $a0, $a0, 1 # Put the integer into the [1-8] range | |
56 | ||
57 | sb $a0, 1($t0) | |
58 | ||
59 | li $a1, 8 | |
60 | li $v0, 42 | |
61 | syscall | |
62 | addi $a0, $a0, 1 # Put the integer into the [1-8] range | |
63 | ||
64 | sb $a0, 2($t0) | |
65 | ||
66 | li $a1, 8 | |
67 | li $v0, 42 | |
68 | syscall | |
69 | addi $a0, $a0, 1 # Put the integer into the [1-8] range | |
70 | ||
71 | sb $a0, 3($t0) | |
72 | ||
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 | |
84 | ||
85 | la $a0, ($s0) | |
86 | li $v0, 1 | |
87 | syscall | |
88 | la $a0, interrogation_point | |
89 | li $v0, 4 | |
90 | syscall | |
91 | ||
92 | la $a0, input_value # Store the answer | |
93 | li $a1, 5 | |
94 | li $v0, 8 # Load syscall read_string | |
95 | syscall # Make the syscall | |
96 | ||
97 | # check that each input values are in the right range | |
98 | check_input: | |
99 | la $t7, input_value | |
100 | ||
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 | |
106 | ||
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 | |
112 | ||
113 | lb $t5, 2($t7) | |
114 | andi $t5, $t5, 0x0F # ASCII code to integer | |
115 | beq $t5, $zero, input | |
116 | addi $t5, $t5, -9 | |
117 | bgez $t5, input | |
118 | ||
119 | lb $t5, 3($t7) | |
120 | andi $t5, $t5, 0x0F # ASCII code to integer | |
121 | beq $t5, $zero, input | |
122 | addi $t5, $t5, -9 | |
123 | bgez $t5, input | |
124 | ||
125 | la $s2, ($zero) # Same counter | |
126 | la $s3 ($zero) | |
127 | compare_input: | |
128 | la $t7, input_value | |
129 | la $t6, guess_value | |
130 | la $t5, O | |
131 | la $t4, X | |
132 | la $t3, tiret | |
133 | ||
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) | |
142 | addi $s2, $s2, 1 | |
143 | different1: | |
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 | |
163 | different3: | |
164 | lb $t0, 3($t7) | |
165 | andi $t0, $t0, 0x0F # ASCII code to integer | |
166 | lb $t1, 3($t6) | |
167 | beq $t0, $t1, same4 | |
168 | j different4 | |
169 | same4: | |
170 | sb $zero, 3($t7) | |
171 | sb $t5, 3($s1) | |
172 | addi $s2, $s2, 1 | |
173 | different4: | |
174 | beq $s2, 4, won | |
175 | ||
176 | ||
177 | print_comp_result: | |
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 | |
193 | ||
194 | addi $s0, $s0, 1 | |
195 | j loop | |
196 | ||
197 | won: | |
198 | la $a0, newline | |
199 | li $v0, 4 | |
200 | syscall | |
201 | la $a0, win_msg | |
202 | li $v0, 4 | |
203 | syscall | |
204 | ||
205 | j exit | |
206 | lost: | |
207 | la $a0, newline | |
208 | li $v0, 4 | |
209 | syscall | |
210 | la $a0, lost_msg | |
211 | li $v0, 4 | |
212 | syscall | |
213 | ||
214 | j exit | |
215 | exit: | |
216 | li $v0, 10 | |
217 | syscall |