Professional Documents
Culture Documents
Kolko Krzyzyk Mips
Kolko Krzyzyk Mips
data
tab: .byte '1', '2', '3', '4', '5', '6', '7', '8', '9'
text1: .asciiz " | "
text2: .asciiz "\n---------\n"
text3: .asciiz "\nKolko czy krzyzyk?(0 - X, 1 - O)\n"
text4: .asciiz "\nIle gier gramy? [1, 5]\n"
text5: .asciiz "\nUzytkownik wygrywa!"
text6: .asciiz "\nKomputer wygrywa!"
text7: .asciiz "\nRemis!"
text8: .asciiz "\nWynik na koniec gry: "
text9: .asciiz "\n"
text10: .asciiz "\nWpisz numer pola[1,9]: "
# t3 - znak uzytkownika
# t4 - znak komputera
# t2 - ile gier sie skonczylo
# t6 - ile gier wygral uzytkownik
# t7 - ile gier wygral komputer
# t5 - ile gier musimy grac
.text
main:
la $a0, text3
li $v0, 4
syscall
li $v0, 5
syscall
#odczytujemy O albo X
beq $v0, 0, krzyz
bne $v0, 1, main
add $t3, $zero, 79 # O
add $t4, $zero, 88 # X
j ileGier
krzyz:
add $t3, $zero, 88
add $t4, $zero, 79
ileGier: # odczytujemy ile gier bedziemy mieli
la $a0, text4
li $v0, 4
syscall
li $v0, 5
syscall
la $a0, text10
li $v0, 4
syscall
#pytamy uztkownika gdzie on che umieszcic
znak
li $v0, 5
syscall
#sprawdzamy czy mozna wrzuczic znak na
podane miejsce
blt $v0, 1, nextChoice
bgt $v0, 9, nextChoice
sb $t3, tab($v0)
#sprawdzamy czy po kroku uzytkownika ktos
wygral
jal whoWin
#jak nie to komputer wybiera gdzie
umiesci swoj znak
jal aiChoice
#sprawdzamy czy ktos wygral
jal whoWin
#jak nie to przechodzimy na nastepny krok
j nextChoice
endStats:
la $a0, text2
li $v0, 4
syscall
#sprawdzamy kto wygral
bgt $t6, $t7, userWin
bgt $t7, $t6, aiWin
#ty wypisujemy ze mamy remis
la $a0, text7
li $v0, 4
syscall
#wyswietlamy wynik
j showResult
aiWin: #wygral komputer
la $a0, text6
li $v0, 4
syscall
j showResult
userWin: #wygral uzytkownik
la $a0, text5
li $v0, 4
syscall
showResult: #wyswietlenie wyniku
la $a0, text8
li $v0, 4
syscall
la $a0, text1
li $v0, 4
syscall
j end
whoWin: #sprawdzenie czy ktos wygral
add $t0, $zero, -3
lineLoop: #sprawdzamy wierzy
add $t0, $t0, 3
bgt $t0, 6, columnCheck
add $s0, $t0, 0
add $s1, $t0, 1
add $s2, $t0, 2
lb $s0, tab($s0)
lb $s1, tab($s1)
lb $s2, tab($s2)
lb $s0, tab($s0)
lb $s1, tab($s1)
lb $s2, tab($s2)
lb $s0, tab($s0)
lb $s1, tab($s1)
lb $s2, tab($s2)
lb $s0, tab($s0)
lb $s1, tab($s1)
beq $s0, $s1, mbWin
j loop2
mbWin:
bne $s0, $t8, loop2
add $s1, $t0, 2
lb $s1, tab($s1)
bgt $s1, 78, loop2
lb $s0, tab($s0)
lb $s1, tab($s1)
beq $s0, $s1, mbWin2
j loop3
mbWin2:
bne $s0, $t8, loop3
add $s1, $t0, 0
lb $s1, tab($s1)
bgt $s1, 78, loop3
lb $s0, tab($s0)
lb $s1, tab($s1)
beq $s0, $s1, mbWin6
j loop7
mbWin6:
bne $s0, $t8, loop7
add $s1, $t0, 1
lb $s1, tab($s1)
bgt $s1, 78, loop7
lb $s1, tab($s1)
bgt $s1, 78, loop4
lb $s0, tab($s0)
lb $s1, tab($s1)
beq $s0, $s1, mbWin4
j loop5
mbWin4:
bne $s0, $t8, loop5
add $s1, $t0, 0
lb $s1, tab($s1)
bgt $s1, 78, loop5
lb $s0, tab($s0)
lb $s1, tab($s1)
beq $s0, $s1, mbWin7
j loop8
mbWin7:
bne $s0, $t8, loop8
add $s1, $t0, 3
lb $s1, tab($s1)
bgt $s1, 78, loop8
lb $a0, tab($t0)
li $v0, 11
syscall
la $a0, text2
li $v0, 4
syscall
j printloop
endloop:
lb $a0, tab($t0)
li $v0, 11
syscall
j back
skip:
lb $a0, tab($t0)
li $v0, 11
syscall
la $a0, text1
li $v0, 4
syscall
j printloop
nextLine: #nastepny wierz
la $a0, text9
li $v0, 4
syscall
j back
back:
jr $ra
end:
li $v0, 10
syscall