Jogo da Velha em Java Netbeans
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.
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
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.
Código comentado sobre como criar um Jogo da Velha em Java
-->JogoDaVelha.java
-->Jogo.java
-->Jogador.java
-->Humano.java
-->Computador.java
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){ } }
Comentários
Enviar um comentário
De seu comentario acerca desta aula, sua dica, sua critica ou sugestao para que eu possa melhorar o conteudo deste Blog. Obrigado Pela Atencao dispensada boa aula a todos.