Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

cristiano moreira

Jogo da velha

Mensagens Recomendadas

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
 

 

Editado por cristiano moreira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.