Programação Java: Jogo da Velha em Java

Linguagem Java , Programação Java, Java Curso gratis.

  • Click here to study this Java Tutorial in English

Após estudar Herança , Polimorfismo , Classes e Métodos Abstratos  chegou a hora de colocarmos nossos conhecimentos em prática para fazer algo realmente útil e bacana:
um jogo da velha.
Aprenda como fazer um Jogo da Velha em Java !
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

Primeiramente, como essa versão é a mais simples, só é possível jogar Humano contra Humano. Em breve ensinaremos como programar o computador para jogar.

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 for(int coluna=0 ; coluna tabuleiro[linha][coluna]=0;
}

public void exibeTabuleiro(){
System.out.println();
for(int linha=0 ; linha
for(int coluna=0 ; 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
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
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 for(int coluna=0 ; 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. Computadorn");
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++;
        <span style="color: #7f0055; font-weight: bold;">return</span> <span style="color: #7f0055; font-weight: bold;">true</span>;
} 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] System.out.println("Linha inválida. É 1, 2 ou 3");

}while( tentativa[0] > 3 ||tentativa[0]
do{
System.out.print("Coluna: ");
tentativa[1] = entrada.nextInt();

if(tentativa[1] > 3 ||tentativa[1] System.out.println("Coluna inválida. É 1, 2 ou 3");

}while(tentativa[1] > 3 ||tentativa[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){

}
}