Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

cristiano moreira

Jogo da velha

Recommended Posts

cristiano moreira

gostaria se alguem pode me dar uma ajuda de como criar o jogo da velha em assembly no mips 

.data

cabecalho: .asciiz "Jogo da Velha "
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
 

 

Edited by cristiano moreira

Share this post


Link to post
Share on other sites
M6

Tens de colocar as tuas dúvidas e questões de forma concreta e clara.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.