um jogo da velha.
Essa é uma versão simples, para ser jogada com duas pessoas. Note que, em uma aplicação Java simples como esta, o resultado saiu por volta de 300 linhas de código.
Mas deixamos as classes e tudo pronto para que, em um próximo tutorial de Java, possamos adicionar o computador em dois modos: modo fácil e modo infalível.
Sim, existe uma estratégia que podemos adotar (ou o computador pode adotar) para nunca perder uma partida de jogo da velha:
http://pt.wikihow.com/Ganhar-no-Jogo-da-Velha
Como Jogar o jogo da velha em Java
Então, escolha Jogador 1 como Humano e Jogador 2 também.
Após isso, basta escolher a linha e a coluna do tabuleiro onde você quer jogar.
Lembrando que o Jogador 1 é sempre o 'X' e o Jogador 2 é sempre o 'O'.
Após isto, basta jogar normalmente. Quando o jogador completar uma linha, coluna ou diagonal o jogo pára.
Ou pára quando o tabuleiro estiver completo e der empate.
Para os programadores Java:
Como criar um Jogo da Velha em Java
Como os códigos deram mais de 300 linhas de código Java, vamos explicar cada classe, método e idéia em outro post:Código comentado sobre como criar um Jogo da Velha em Java
Código Java do Jogo da Velha, modo texto Humano x Humano
Crie um projeto com o nome 'JogoDaVelha', e adicione as 6 classes a seguir, rode e seja feliz.-->JogoDaVelha.java
public class JogoDaVelha { public static void main(String[] args) { Jogo jogo = new Jogo(); } }
-->Tabuleiro.java
public class Tabuleiro { private int[][] tabuleiro= new int[3][3]; public Tabuleiro(){ zerarTabuleiro(); } public void zerarTabuleiro(){ for(int linha=0 ; linha<3 ; linha++) for(int coluna=0 ; coluna<3 ; coluna++) tabuleiro[linha][coluna]=0; } public void exibeTabuleiro(){ System.out.println(); for(int linha=0 ; linha<3 ; linha++){ for(int coluna=0 ; coluna<3 ; coluna++){ if(tabuleiro[linha][coluna]==-1){ System.out.print(" X "); } if(tabuleiro[linha][coluna]==1){ System.out.print(" O "); } if(tabuleiro[linha][coluna]==0){ System.out.print(" "); } if(coluna==0 || coluna==1) System.out.print("|"); } System.out.println(); } } public int getPosicao(int[] tentativa){ return tabuleiro[tentativa[0]][tentativa[1]]; } public void setPosicao(int[] tentativa, int jogador){ if(jogador == 1) tabuleiro[tentativa[0]][tentativa[1]] = -1; else tabuleiro[tentativa[0]][tentativa[1]] = 1; exibeTabuleiro(); } public int checaLinhas(){ for(int linha=0 ; linha<3 ; linha++){ if( (tabuleiro[linha][0] + tabuleiro[linha][1] + tabuleiro[linha][2]) == -3) return -1; if( (tabuleiro[linha][0] + tabuleiro[linha][1] + tabuleiro[linha][2]) == 3) return 1; } return 0; } public int checaColunas(){ for(int coluna=0 ; coluna<3 ; coluna++){ if( (tabuleiro[0][coluna] + tabuleiro[1][coluna] + tabuleiro[2][coluna]) == -3) return -1; if( (tabuleiro[0][coluna] + tabuleiro[1][coluna] + tabuleiro[2][coluna]) == 3) return 1; } return 0; } public int checaDiagonais(){ if( (tabuleiro[0][0] + tabuleiro[1][1] + tabuleiro[2][2]) == -3) return -1; if( (tabuleiro[0][0] + tabuleiro[1][1] + tabuleiro[2][2]) == 3) return 1; if( (tabuleiro[0][2] + tabuleiro[1][1] + tabuleiro[2][0]) == -3) return -1; if( (tabuleiro[0][2] + tabuleiro[1][1] + tabuleiro[2][0]) == 3) return 1; return 0; } public boolean tabuleiroCompleto(){ for(int linha=0 ; linha<3 ; linha++) for(int coluna=0 ; coluna<3 ; coluna++) if( tabuleiro[linha][coluna]==0 ) return false; return true; } }
-->Jogo.java
import java.util.Scanner; public class Jogo { private Tabuleiro tabuleiro; private int rodada=1, vez=1; private Jogador jogador1; private Jogador jogador2; public Scanner entrada = new Scanner(System.in); public Jogo(){ tabuleiro = new Tabuleiro(); iniciarJogadores(); while( Jogar() ); } public void iniciarJogadores(){ System.out.println("Quem vai ser o Jogador 1 ?"); if(escolherJogador() == 1) this.jogador1 = new Humano(1); else this.jogador1 = new Computador(1); System.out.println("----------------------"); System.out.println("Quem vai ser o Jogador 2 ?"); if(escolherJogador() == 1) this.jogador2 = new Humano(2); else this.jogador2 = new Computador(2); } public int escolherJogador(){ int opcao=0; do{ System.out.println("1. Humano"); System.out.println("2. Computador\n"); System.out.print("Opção: "); opcao = entrada.nextInt(); if(opcao != 1 && opcao != 2) System.out.println("Opção inválida! Tente novamente"); }while(opcao != 1 && opcao != 2); return opcao; } public boolean Jogar(){ if(ganhou() == 0 ){ System.out.println("----------------------"); System.out.println("\nRodada "+rodada); System.out.println("É a vez do jogador " + vez() ); if(vez()==1) jogador1.jogar(tabuleiro); else jogador2.jogar(tabuleiro); if(tabuleiro.tabuleiroCompleto()){ System.out.println("Tabuleiro Completo. Jogo empatado"); return false; }
vez++; rodada++;return true;
} else{ if(ganhou() == -1 ) System.out.println("Jogador 1 ganhou!"); else System.out.println("Jogador 2 ganhou!"); return false; } } public int vez(){ if(vez%2 == 1) return 1; else return 2; } public int ganhou(){ if(tabuleiro.checaLinhas() == 1) return 1; if(tabuleiro.checaColunas() == 1) return 1; if(tabuleiro.checaDiagonais() == 1) return 1; if(tabuleiro.checaLinhas() == -1) return -1; if(tabuleiro.checaColunas() == -1) return -1; if(tabuleiro.checaDiagonais() == -1) return -1; return 0; } }
-->Jogador.java
public abstract class Jogador { protected int[] tentativa = new int[2]; protected int jogador; public Jogador(int jogador){ this.jogador = jogador; } public abstract void jogar(Tabuleiro tabuleiro); public abstract void Tentativa(Tabuleiro tabuleiro); public boolean checaTentativa(int[] tentativa, Tabuleiro tabuleiro){ if(tabuleiro.getPosicao(tentativa) == 0) return true; else return false; } }
-->Humano.java
import java.util.Scanner; public class Humano extends Jogador{ public Scanner entrada = new Scanner(System.in); public Humano(int jogador){ super(jogador); this.jogador = jogador; System.out.println("Jogador 'Humano' criado!"); } @Override public void jogar(Tabuleiro tabuleiro){ Tentativa(tabuleiro); tabuleiro.setPosicao(tentativa, jogador); } @Override public void Tentativa(Tabuleiro tabuleiro){ do{ do{ System.out.print("Linha: "); tentativa[0] = entrada.nextInt(); if( tentativa[0] > 3 ||tentativa[0] < 1) System.out.println("Linha inválida. É 1, 2 ou 3"); }while( tentativa[0] > 3 ||tentativa[0] < 1); do{ System.out.print("Coluna: "); tentativa[1] = entrada.nextInt(); if(tentativa[1] > 3 ||tentativa[1] < 1) System.out.println("Coluna inválida. É 1, 2 ou 3"); }while(tentativa[1] > 3 ||tentativa[1] < 1); tentativa[0]--; tentativa[1]--; if(!checaTentativa(tentativa, tabuleiro)) System.out.println("Esse local já foi marcado. Tente outro."); }while( !checaTentativa(tentativa, tabuleiro) ); } }
-->Computador.java
public class Computador extends Jogador{ public Computador(int jogador){ super(jogador); System.out.println("Jogador 'Computador' criado!"); } @Override public void jogar(Tabuleiro tabuleiro){ } @Override public void Tentativa(Tabuleiro tabuleiro){ } }
38 comentários:
Muito bom o site !! Um parabéns aos organizadores pela boa vontade de compartilhar conhecimento de uma maneira muito profissional e de graça .. compartilhando o site e clicando no botao +1 para incentivar o projeto.
gostei muito desse site!! gostei do vosso trabalho, vou acompanhar sempre o vosso trabalho.parabéns
http://helplusplus.com/tradicional-jogo-da-velha-java/
vocês são os melhores.....
Excelente Curso. Estou gostando muito.
Só tenho uma correção (me desculpe se estiver errado).
Na classe Jogo.java, onde está:
if (opcao != 1 || opcao != 2)
Deve ser trocado para:
if (opcao != 1 && opcao != 2)
Senão vai ser apresentado a mensagem de opção inválida mesmo selecionando a opção 1 ou 2 (opções corretas).
E onde está:
while (opcao != 1 || opcao != 2)
Trocar para:
while (opcao != 1 && opcao != 2)
Senão você vai ficar em looping mesmo selecionando a opção 2.
De resto está perfeito, aprendi muito com esse jogo.
Obrigado mais uma vez.
Olá Leonardo, obrigado pelo aviso.
Deve ter sido um erro na hora de formatar pra publicar aqui, pois do jeito que estava não teria dado pra jogar, pois não dava pra escolher o jogador.
Gostaria desse codigo para usar em netbeans.
Olá Anônimo,
Como pode ver, o código do Jogo da Velha está todo nesta página, com os nomes das classes e tudo mais.
Qual sua dúvida?
Meu prof pediu m jogo da velha maquina x jogador, feito em netbeans e eu to desesperada
pois nada q faço ta dando certo.
muito bom o site gostaria se possível
uma ajuda to rodando esse programa ele ta dando erro no import java.util.Scanner(classe,interface, ou enumeração esperada) já pesquisei pra caramba não to conseguindo pode ajudar?
Olá Marcelo,
Copia e cola a mensagem de erro que está dando.
segue os erros:
jogodavelha.java:133: class, interface, or enum expected
import java.util.Scanner;
^
jogodavelha.java:307: class, interface, or enum expected
import java.util.Scanner;
^
2 errors
C:\Documents and Settings\adiministrador\Desktop\prog.java>
Estou gostando muito mesmo. muito didático. Vou acabar aprendendo POO.
Sucesso aos organizadores.
Oi eu estou com dificuldades nesta parte aque,
JogoDaVelha.java
publicclass JogoDaVelha {
publicstaticvoid main(String[] args) {
Jogo jogo = new Jogo();
}
}
-na linha ond está, (Jogo jogo = new jogo(
Está aparecendo ( cannot determine simple type name "Jogo") quando eu clico no botão (build)
Obs: nãotenho pc fasso td pelo celular, usando o j2me sdk mobile!
Em Jogo.java,
tabuleiro = new Tabuleiro();
não deveria ser
Tabuleiro tabuleiro = new Tabuleiro();
?
Ótimo trabalho com o Java Progressivo. Continue assim!
Olá Anônimo,
Na verdade, ali no começo da classe já tínhamos declarado a variável 'tabuleiro':
private Tabuleiro tabuleiro;
-->Jogo.java 120
-->Humano.Java 266
import java.util.Scanner;
copiei e colei o codigo e não funfa...., ja mudei para javac.util... e verifiquei que nao...
Você copiou tudo, colou e tentou rodar?
Não é javac mesmo é java.util..., como disse no comentário anterior.
E se copiar e colar, realmente não é pra funcionar. tem que dividir as classes, dar os nomes certos...
Esses "--> Jogo.java" não fazem parte do código, são pra sinalizar os nomes e conteúdos das diferentes classes que você deve criar separadamente, conforme fomos explicando e usando no decorrer do curso.
Oi primeiramente gostaria de agradecer pelo tutorial está muito bom, segundo eu gostaria de saber como fazer esse jogo rodar em uma tela feita no NetBeans ? Teria como você explicar ? Desde já obrigado !!!
Computador nao joga com esse codigo.
Ele pega a vez, mas ele nao joga, eh como se pulasse a vez do computador.
Bom dia meu nome é fabio, nao entendo porque nao aparece a jogada do computador so aparece que ele fez a jogada na rodada mas nao aparece a marcação
Boa tarde, copiei o código exatamente igual ao do site, mas a barra não aparece quando é pra utilizar a 3 coluna, verifique isso pra mim. Curti demais o site e o tutorial. Estou recente em programação Java, que continuem assim. abraço
como faça para jogar em modo rede, um contra o outro.
Como será o código em linguagem c
Como fica o código em linguagem c
Muito Bom esse jogo!!! Mas me surgiu
uma duvida!!Como faço para a pessoa por engano adicionar uma letra ao inves de numero na hora que for adicionar a coluna ou linha?
Ótima iniciativa! É legal quando as pessoas colaboram e contribuem, sem pedir nada em troca! Colocar linhas de programação ao alcance dos leitores é um ato generoso. Espero que mais gente resolva colaborar dessa forma!
boa Tarde
como faço para rodar no netbeans, digitei, conforme estava, mas na hora de rodar, esta informando que a classe não tem um método principal
sendo que eu criei ele na classe java principal.
ótimo código, porém nao aparece a jogada do computador, ele apenas pula a vez
preciso do jogo 4 em linha tal igual a esse
pode me ajudar a fazer o jogo quatro em linha tal igual a esse
obrigado
opa gostaria de saber da classe computador quando seria feita ou se pode postar como resposta a esse comentario
Tem exemplo de implementação de jogadas pelo computador automaticamente?
Opa! Boa noite. Quando sai o Jogo da velha com inteligência artificial? queria aprender como se faz
Olá, fiz exatamente igual ao código mas esta dando erro, este erro em especifico:
at JogoDaVelha.main(public class JogoDaVelha {.java:4)
Unresolved compilation problems:
Jogo cannot be resolved to a type
Jogo cannot be resolved to a type
Alguém poderia ajudar?
Postar um comentário