.data
cabecalho: .asciiz “Jogo da Velha - Saulu Meira - zaspeando.com”
espaco: .asciiz ” “
bl: .asciiz “n”
um: .asciiz “1″
dois: .asciiz “2″
tres: .asciiz “3″
barra: .asciiz “|”
jog1: .asciiz “JOGADOR 1:n”
jog2: .asciiz “JOGADOR 2:n”
posicao: .asciiz “Digite linha e coluna (xy): “
erro: .asciiz “Posicao Invalida.n”
victory1: .asciiz “Parabens JOGADOR 1, voce ganhou.”
victory2: .asciiz “Parabens JOGADOR 2, voce ganhou.”
empat: .asciiz “Empatou, chora.”
.text
.globl main
main:
addi $t0 $zero 45 #Inicializa os registradores em ‘-’
addi $t1 $zero 45
addi $t2 $zero 45
addi $t3 $zero 45
addi $t4 $zero 45
addi $t5 $zero 45
addi $t6 $zero 45
addi $t7 $zero 45
addi $t8 $zero 45
la $a0 cabecalho #Imprime o cabeçalho
li $v0 4
syscall
#comeca a diversao
j print1
j fim
print1: #Imprime a grade do jogo.
la $a0 bl #linha branco
li $v0 4
syscall
la $a0 espaco
syscall
la $a0 espaco
syscall
la $a0 espaco
syscall
la $a0 um
syscall
la $a0 espaco
syscall
la $a0 dois
syscall
la $a0 espaco
syscall
la $a0 tres
syscall
la $a0 bl #linha branco
syscall
la $a0 espaco #comeco primeira linha
syscall
la $a0 um
syscall
la $a0 barra
syscall
move $a0 $t0
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t1
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t2
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
la $a0 bl #fim primeira linha
li $v0 4
syscall
la $a0 espaco #comeco segunda linha
syscall
la $a0 dois
syscall
la $a0 barra
syscall
move $a0 $t3
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t4
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t5
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
la $a0 bl #fim segunda linha
li $v0 4
syscall
la $a0 espaco #comeco terceira linha
syscall
la $a0 tres
syscall
la $a0 barra
syscall
move $a0 $t6
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t7
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t8
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
la $a0 bl #fim terceira linha
li $v0 4
syscall
j testejog2 #Chama teste para jogador 2
print2:
la $a0 bl #linha branco
li $v0 4
syscall
la $a0 espaco
syscall
la $a0 espaco
syscall
la $a0 espaco
syscall
la $a0 um
syscall
la $a0 espaco
syscall
la $a0 dois
syscall
la $a0 espaco
syscall
la $a0 tres
syscall
la $a0 bl #linha branco
syscall
la $a0 espaco #comeco primeira linha
syscall
la $a0 um
syscall
la $a0 barra
syscall
move $a0 $t0
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t1
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t2
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
la $a0 bl #fim primeira linha
li $v0 4
syscall
la $a0 espaco #comeco segunda linha
syscall
la $a0 dois
syscall
la $a0 barra
syscall
move $a0 $t3
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t4
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t5
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
la $a0 bl #fim segunda linha
li $v0 4
syscall
la $a0 espaco #comeco terceira linha
syscall
la $a0 tres
syscall
la $a0 barra
syscall
move $a0 $t6
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t7
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
move $a0 $t8
li $v0 11
syscall
la $a0 barra
li $v0 4
syscall
la $a0 bl #fim terceira linha
li $v0 4
syscall
j testejog1 #Chama teste para jogador 1
jogador1:
la $a0 jog1 #Imprime chamada para jogador 1
li $v0 4
syscall
la $a0 posicao #Le a posição
syscall
li $v0 5
syscall
move $16 $v0
beq $16 11 umum
beq $16 12 umdois #switch para por X na posicao digitada
beq $16 13 umtres
beq $16 21 doisum
beq $16 22 doisdois
beq $16 23 doistres
beq $16 31 tresum
beq $16 32 tresdois
beq $16 33 trestres
la $a0 erro #Teste para posição invalida
li $v0 4
syscall
j jogador1
umum:
bgt $t0 45 jogador1 #se ja estiver valor nesta posicao chama de novo
addi $t0 $zero 88 #senao poe valor na posicao
j print2 #…os demais casos são testados da mesma maneira…
umdois:
bgt $t1 45 jogador1
addi $t1 $zero 88
j print2
umtres:
bgt $t2 45 jogador1
addi $t2 $zero 88
j print2
doisum:
bgt $t3 45 jogador1
addi $t3 $zero 88
j print2
doisdois:
bgt $t4 45 jogador1
addi $t4 $zero 88
j print2
doistres:
bgt $t5 45 jogador1
addi $t5 $zero 88
j print2
tresum:
bgt $t6 45 jogador1
addi $t6 $zero 88
j print2
tresdois:
bgt $t7 45 jogador1
addi $t7 $zero 88
j print2
trestres:
bgt $t8 45 jogador1
addi $t8 $zero 88
j print2
jogador2:
la $a0 jog2 #Chamada para jogador 2
li $v0 4
syscall
la $a0 posicao #Lê a posição
syscall
li $v0 5
syscall
move $16 $v0
beq $16 11 umum2
beq $16 12 umdois2
beq $16 13 umtres2
beq $16 21 doisum2 #switch para por O na posicao digitada
beq $16 22 doisdois2
beq $16 23 doistres2
beq $16 31 tresum2
beq $16 32 tresdois2
beq $16 33 trestres2
la $a0 erro #Teste de posição inválida
li $v0 4
syscall
j jogador2
umum2:
bgt $t0 45 jogador2 #se ja estiver valor nesta posicao chama de novo
addi $t0 $zero 79 #senao poe valor na posicao
j print1 #…os demais casos de teste são iguais…
umdois2:
bgt $t1 45 jogador2
addi $t1 $zero 79
j print1
umtres2:
bgt $t2 45 jogador2
addi $t2 $zero 79
j print1
doisum2:
bgt $t3 45 jogador2
addi $t3 $zero 79
j print1
doisdois2:
bgt $t4 45 jogador2
addi $t4 $zero 79
j print1
doistres2:
bgt $t5 45 jogador2
addi $t5 $zero 79
j print1
tresum2:
bgt $t6 45 jogador2
addi $t6 $zero 79
j print1
tresdois2:
bgt $t7 45 jogador2
addi $t7 $zero 79
j print1
trestres2:
bgt $t8 45 jogador2
addi $t8 $zero 79
j print1
fim:
jr $ra
testejog2: #Testa se jogador 2 ganhou
add $a0 $t0 $t1 #Testa se o jogo termina empatado
add $a0 $a0 $t2
add $a0 $a0 $t3
add $a0 $a0 $t4
add $a0 $a0 $t5
add $a0 $a0 $t6
add $a0 $a0 $t7
add $a0 $a0 $t8
beq $a0 756 empate
add $a0 $t0 $t1
add $a0 $a0 $t2 #linha 1
beq $a0 237 jog2ganhou
add $a0 $t3 $t4
add $a0 $a0 $t5 #linha 2
beq $a0 237 jog2ganhou
add $a0 $t6 $t7
add $a0 $a0 $t8 #linha 3
beq $a0 237 jog2ganhou
add $a0 $t0 $t3
add $a0 $a0 $t6 #coluna 1
beq $a0 237 jog2ganhou
add $a0 $t1 $t4
add $a0 $a0 $t7 #coluna 2
beq $a0 237 jog2ganhou
add $a0 $t2 $t5
add $a0 $a0 $t8 #coluna 3
beq $a0 237 jog2ganhou
add $a0 $t0 $t4
add $a0 $a0 $t8 #diagonal 1
beq $a0 237 jog2ganhou
add $a0 $t2 $t4
add $a0 $a0 $t6 #diagonal 2
beq $a0 237 jog2ganhou
j jogador1 #Chama jogador 1
jog2ganhou: #Imprime que jogador dois ganhou e sai
la $a0 victory2
li $v0 4
syscall
j fim
testejog1: #Testa se jogador 1 ganhou
add $a0 $t0 $t1 #Testa se o jogo terminou empatado
add $a0 $a0 $t2
add $a0 $a0 $t3
add $a0 $a0 $t4
add $a0 $a0 $t5
add $a0 $a0 $t6
add $a0 $a0 $t7
add $a0 $a0 $t8
beq $a0 756 empate
add $a0 $t0 $t1
add $a0 $a0 $t2 #linha 1
beq $a0 264 jog1ganhou
add $a0 $t3 $t4
add $a0 $a0 $t5 #linha 2
beq $a0 264 jog1ganhou
add $a0 $t6 $t7
add $a0 $a0 $t8 #linha 3
beq $a0 264 jog1ganhou
add $a0 $t0 $t3
add $a0 $a0 $t6 #coluna 1
beq $a0 264 jog1ganhou
add $a0 $t1 $t4
add $a0 $a0 $t7 #coluna 2
beq $a0 264 jog1ganhou
add $a0 $t2 $t5
add $a0 $a0 $t8 #coluna 3
beq $a0 264 jog1ganhou
add $a0 $t0 $t4
add $a0 $a0 $t8 #diagonal 1
beq $a0 264 jog1ganhou
add $a0 $t2 $t4
add $a0 $a0 $t6 #diagonal 2
beq $a0 264 jog1ganhou
j jogador2 #Chama jogador 2
jog1ganhou: #Imprime que jogador 1 ganhou e sai
la $a0 victory1
li $v0 4
syscall
j fim
empate: #Imprime EMPATE e sai
la $a0 empat
li $v0 4
syscall
j fim
0 comentários: