Centro de Ciências Exatas, Ambientais e de Tecnologias
Faculdade de Engenharia de Computação
Paradigmas de Linguagens de Programação
3o. Laboratório - 06, 07, 10 e 12 de Março
Assuntos: Acesso a Membros de Classe (Tabuleiro de um Jogo da Velha)
Salve a classe Tabuleiro.class em uma pasta, aplique
sobre ela o comando javap (javap Tabuleiro) e veja quais são os membros desta classe.
Perceba que ela tem três propriedades estáticas (o que indica que elas são membros da Classe e não de Instância) que são:
- private static char T[][], que representa o tabuleiro. Ele será uma matriz 3x3 de caracteres;
- private static int VEZ, que indicará de quem é a vez de jogar(X ou O); e
- private static int Jogadas, que indicará quantas jogadas ainda restam para o término do jogo;
Perceba que, por todas as propriedades serem private (privativas), nenhuma outra classe consegue acessá-las.
Os métodos apresentados na classe são:
- public static void MostraTabuleiro(), que apenas exibe o tabuleiro com todas as jogadas realizadas até o momento em tela;
- public static void Novo(), que limpa o tabuleiro e inicia o contador de jogadas;
- public static char VezDeQuem(), que indica se a vez é do jogador X ou O;e
- public static char Jogada(int Lin, int Col), que tenta realizar a jogada com o jogador da vez na linha e coluna indica retornando os seguintes valores nas seguintes situações:
- ' ' (espaço em branco), caso a jogada tenha sido realizada sem finalizar o jogo;
- 'V', caso a jogada tenha sido realizada causando a situação de VELHA;
- 'X', caso a jogada tenha sido realizada causando vitória do jogador 'X';
- 'O', caso a jogada tenha sido realizada causando vitória do jogador 'O'; e
- 'E', caso a jogada NÂO tenha sido realizada pela posição já estar ocupada;
Siga os passos descritos abaixo e, utilizando a classe Tabuleiro, desenvolva uma classe JogoDaVelha que tenha um void main() que permita a interação de dois jogadores em um jogo da velha.
Para compilar a sua classe, utilize a linha de comando abaixo:
javac -classpath . Velha.java
Antes de desenvolver o jogo, execute a classe listada abaixo e depois altere-a incluindo uma chamada para cada método da classe Tabuleiro e perceba também os retornos do método char Jogada(int.int).
A classe abaixo tem por finalidade demostrar a utilização de membros qualificados como static. Compile a classe abaixo conforme a linha de comando indicada, execute a classe, observe o resultado e responda a pergunta feita logo após o código.
class JogoDaVelha
{
public static void main(String Args[])
{
Tabuleiro T01 = new Tabuleiro(); // Instanciando um objeto da classe Tabuleiro
Tabuleiro T02 = new Tabuleiro(); // Instanciando um objeto da classe Tabuleiro
T01.Novo();
T02.Novo();
System.out.println("Tabuleiro 01");
T01.MostraTabuleiro();
System.out.println("Tabuleiro 02");
T02.MostraTabuleiro();
T01.Jogada(1,1);
System.out.println("Tabuleiro 01");
T01.MostraTabuleiro();
System.out.println("Tabuleiro 02");
T02.MostraTabuleiro();
Tabuleiro.Novo();
System.out.println("Tabuleiro 01");
T01.MostraTabuleiro();
System.out.println("Tabuleiro 02");
T02.MostraTabuleiro();
}
}
A que conclusões podemos chegar com relação à declaração e utilização de membros qualificados como static?
Apague as instâncias criadas e execute as chamadas dos métodos usando diretamente o nome da classe. Qual a diferença ?
Para desenvolver a Classe JogoDaVelha:
- Primeira Etapa
- Crie uma classe contendo como membro o método public static void main(String Args[])
No main, declare e instancie um objeto do tipo BufferedReader, relacione a ele uma instancia do objeto InputStreamReader ligado ao System.in.
Não se esqueça de importar os pacotes necessário no início do seu arquivo e nem de colocar o throws IOException no método main().
Acione o método Novo() da classe Tabuleiro para iniciar um novo Jogo da velha.
Usando a instancia do BufferedReader, solicite ao usuário a digitação de uma Linha e de uma Coluna. Não se esqueça de declarar as variáveis para armazenar estes valores.
Acione o método char Jogada(int,int) da classe Tabuleiro passando como parâmetro os dois valores digitados pelo usuário.
Acione o método MostraTabuleiro() da classe Tabuleiro para verificar a realização da jogada acima.
Compile e execute a sua classe.
- Segunda Etapa
- Adicione um comando que implemente uma repetição, a princípio infinita, permitindo ao usuário indicar várias jogadas. A cada nova jogada, exiba novamente o tabuleiro.
Utilize o método char VezDeQuem() da classe tabuleiro para indicar ao usuário de quem é a vez da jogada.
Compile e execute a sua classe novamente.
- Terceira Etapa
- Imprima em tela o retorno do método char Jogada(int,int) da classe Tabuleiro para que você acompanhe os acontecimentos do jogo. Após verificar o comportamento do método de acordo com as 5 situações, retire a impressão do retorno pois ela não é necessária.
Utilize o retorno do método char Jogada(int,int) da classe Tabuleiro para encerrar a partida quando algum jogador ganhar (X ou O) ou quando der Velha. Altere o comando de repetição para que ela não seja mais infinita.
Emita mensagens ao usuário quando o jogo for terminado ou quando a jogada não puder ser realizada.
Compile e execute a sua classe novamente.
- Quarta Etapa
- Teste todas as possibilidades de jogo (jogue em posições já ocupadas, deixe o jogo acabar em Velha, deixe o jogador X ganhar e deixe o jogador O ganhar).
- Quinta Etapa
- Efetue as melhorias que julgar apropriadas
BOM TRABALHO !!!