Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Programação Estruturada / Aula
Já desenhamos o tabuleiro. Como fazer, então, para definir de que forma serão feitas as marcações de cada jogador?
Vimos, há pouco, que precisamos definir uma variável (jog) para armazenar o jogador da vez.
Com base nessa variável é que o computador vai definir de quem é a vez e o símbolo que será marcado. A função jogar, cujo código completo você verá mais adiante, recebe como argumento uma variável do tipo int, a que chamamos jogador.
O programa lê o argumento e define, a partir dele, quem é o jogador da vez para, em seguida, informar isso aos usuários. Veja o trecho de código a seguir.
public static void jogar (int jogador) {
if (jogador == 1) {
jog = 1;
} else {
jog = 2;
}
}
O programa recebe o argumento no procedimento jogar e, caso o valor da variável jogador seja 1, esse valor é armazenado na variável jog. O mesmo ocorre se o valor da variável for 2. Esse valor é determinado na rotina principal (main, que veremos mais adiante) do programa, quando o procedimento jogar é “chamado”.
A variável jog será utilizada na mensagem que informa ao usuário de quem é a vez.
System.out.println("\n\n Vez do Jogador " + jog);
Bom, já sabemos como mostrar de quem é a vez de jogar. Mas ainda temos que determinar como serão feitas as marcações no tabuleiro. Precisamos, para isso, oferecer as opções para que o jogador escolha em que campo do tabuleiro (em que linha e coluna da matriz) irá fazer a sua marcação.
As variáveis (linha e coluna) do tipo int que declaramos junto com a variável jog lá no início serão utilizadas nesse momento, para armazenar os valores das linhas e colunas digitados pelo jogador. Podemos fazer isso acrescentando ao código anterior a solicitação para que o jogador da vez escolha a linha e a coluna em que fará sua marcação. Veja:
System.out.print("Escolha a Linha (1,2,3):");
// lendo a linha escolhida
linha = leitor.nextInt();
System.out.print("Escolha a Coluna (1,2,3):");
// lendo a coluna escolhida
coluna = leitor.nextInt();
Mas não é só isso. Precisamos validar a escolha do jogador. Se a linha ou coluna escolhida for maior que 3 ou menor que 1, a marcação não pode ser feita, pois o nosso tabuleiro só tem linhas e colunas de 1 a 3.
É importante avisar ao jogador, caso isso ocorra. Veja o código a seguir, com o procedimento jogar ainda incompleto, mas um pouco mais elaborado, com a validação da escolha do usuário.
public static void jogar(int jogador) {
// inicializando contador da estrutura while
int i = 0;
// definindo o jogador da vez
if (jogador == 1) {
jog = 1;
} else {
jog = 2;
}
System.out.println("\n\n Vez do Jogador " + jog);
while (i == 0) {
linha = 0; // inicializando valor da linha
coluna = 0; // inicializando valor da coluna
while (linha < 1 || linha > 3) {
System.out.print("Escolha a Linha (1,2,3):");
// lendo a linha escolhida
linha = leitor.nextInt();
// Aviso de linha inválida, caso o jogador tenha
// escolhido linha menor que 1 ou maior que 3
if (linha < 1 || linha > 3) {
System.out.println("Linha invalida! Escolha uma linha entre 1 e 3.");
}
}
while (coluna < 1 || coluna > 3) {
System.out.print("Escolha a Coluna (1,2,3):");
// lendo a coluna escolhida
coluna = leitor.nextInt();
if (coluna < 1 || coluna > 3) {
System.out.println("Coluna invalida! Escolha uma coluna entre 1 e 3.");
}
}
// Ajusta índices para começar do zero
linha = linha - 1;
coluna = coluna - 1;
(...)
Leia os comentários que estão no código (as linhas com //, lembra?).
Veja que, após a leitura da escolha do usuário (para a linha e para a coluna), temos um IF que valida a escolha, avisando que não é permitido escolher linha ou coluna menor que 1 ou maior que 3.
Veja, também, que a seleção da linha e a seleção da coluna estão inseridas, cada uma, em uma estrutura while. Isso é feito para que, enquanto o valor da linha e/ou da coluna digitado pelo jogador for inválido, a mensagem que solicita a escolha de uma linha e/ou coluna válida seja exibida.
Dessa forma, o programa só passa para a parte seguinte do código após a seleção validada desse ponto de vista (linha e coluna com valor entre 1 e 3). Feito isso, ainda falta uma validação importante: se o jogador tentar marcar um campo que não esteja vazio, ele deve ser avisado de que não pode fazer isso. Veja o trecho de código a seguir.
if (casa[linha][coluna] == 0) {
// se não estiver marcado
// marcar com o símbolo do jogador da vez
casa[linha][coluna] = jog;
i = 1;
} else { // se o campo escolhido já estivar marcado
System.out.println("Posição ocupada!");
}
O trecho de código analisa se o campo selecionado pelo jogador da vez não está marcado. Se não estiver, é feita a marcação com o símbolo do jogador da vez (jog) e o contador do laço while recebe o valor 1. Essa alteração no valor do contador ocorre para que, ao ser feita a marcação, a execução saia do laço (lembre-se de que a condição para o laço era o contador i = 0). Já que a marcação foi realizada, não há mais porque permanecer no laço.
Caso o campo escolhido pelo jogador já esteja marcado, o IF não é executado, mas sim o ELSE, em que uma mensagem avisa ao jogador para escolher outro campo. A jogada só é concluída quando a condição do IF é atendida. Só assim a marcação é realizada e o contador é alterado, para a execução sair do laço. Veja o código do procedimento jogar completo a seguir.
public static void jogar(int jogador) {
// inicializando contador da estrutura while
int i = 0;
// definindo o jogador da vez
if (jogador == 1) {
jog = 1;
} else {
jog = 2;
}
System.out.println("\n\n Vez do Jogador " + jog);
while (i == 0) {
linha = 0; // inicializando valor da linha
coluna = 0; // inicializando valor da coluna
while (linha < 1 || linha > 3) {
System.out.print("Escolha a Linha (1,2,3):");
// lendo a linha escolhida
linha = leitor.nextInt();
// Aviso de linha inválida, caso o jogador tenha
// escolhido linha menor que 1 ou maior que 3
if (linha < 1 || linha > 3) {
System.out.println("Linha invalida! Escolha uma linha entre 1 e 3.");
}
}
while (coluna < 1 || coluna > 3) {
System.out.print("Escolha a Coluna (1,2,3):");
// lendo a coluna escolhida
coluna = leitor.nextInt();
if (coluna < 1 || coluna > 3) {
System.out.println("Coluna invalida! Escolha uma coluna entre 1 e 3.");
}
}
// Ajusta índices para começar do zero
linha = linha - 1;
coluna = coluna - 1;
if (casa[linha][coluna] == 0) {
// se não estiver marcado
// marcar com o símbolo do jogador da vez
casa[linha][coluna] = jog;
i = 1;
} else { // se o campo escolhido já estivar marcado
System.out.println("Posição ocupada!");
}
}
}
Versão 5.3 - Todos os Direitos reservados