Começando a Programar o Jogo
A estrutura de dados do Array e ArrayList pavimentou a estrada para implementar o jogo Roda Da Fortuna em texto. Já descrevemos a estória do jogo. Agora vamos começar a fazer a primeira versão.
A estrutura é feita de dois tipos de objetos: o initializer e o player como as interações entre eles. Apesar de o jogo Roda da Fortuna 1 ter três jogadores, qualquer jogador pode entrar no jogo, contudo somente um jogador joga por vez.
Para ficar mais fácil o desenvolvimento do joga na sua primeira versão, vamos apenas fazer o jogo com um jogador. Vamos ver algumas ações do jogo:
Initializer | Player |
1. Crie uma palavra ou frase | 2. O jogador insere um caractere qualificado |
3. Verifica se o caractere existe na palavra ou frase | 4. Se o jogador acertar vá para o passo2. Se o jogador errar, o próximo jogador inicia no passo 2. |
A Roda da Fortuna 1, inicia com uma palavra ou frase, o qual é um tipo de String, o jogador insere um caractere que é um tipo char. Assim que o jogador insere o caractere, o caractere é buscado dentro da palavra.
Como mencionado, um String é diferente de um array de char. Felizmente, uma String também consiste em caracteres. A classe String tem um método charAt() que pode adotar para procurar char individuais inseridas pelo jogador.
O resultado da busca pode não dar certo, ache um caractere ou mais. O caractere encontrado está indexado em uma posição que pode ser mostrado em um campo onde está guardada a palavra ou frase. Devido ao fato de não sabermos quantas vezes o jogador irá acertar o caractere, podemos utilizar o ArrayList<Integer>.
A Primeira Versão
Nessa primeira versão, vamos ignorar as funcionalidades e ações do painel que mostra os caracteres. Vamos implementar apenas algumas funcionalidades, tais como o initializer e o jogador(player) que estiver jogando.
Vamos ter quatro classes no jogo, vejamos o diagrama.
A classe de UML indica que a classe main WheelFortune.java “utiliza” a classe GamePanel.java. Aqui, “utiliza” significa que a classe WheelFortune.java instância um objeto da classe GamePanel.java e “utiliza” funcionalidade para completar tarefas atribuídas a ele.
O Pseudo Código
Com isso, a classe GamePanel.java utiliza a classe Initializer.java e Player.java. Isso significa que a classe GamePanel.java “utiliza” as funcionalidades dos dois objetos e fornece uma comunicação que permite trabalharem juntos para realizar o objetivo do jogo. O pseudo código do jogo Roda da Fortuna 1 pode ficar assim.
1. O projeto Roda da Fortuna 1 tem quatro classes: WheelFortune.java, GamePanel.java, Initializer.java e Player.java.
2. A classe principal WheelFortune1.java instância um objeto gamePanel da classe GamePanel.java.
3. A classe GamePanel.java faz o seguinte:
a) Instância um objeto initializer da classe Initializer.java e um objeto da classe Player.java
b) Chama initializer.initSentence() para inicializar a frase “Hello World.”
c) Chama player.inputGuess() para deixar o jogador inserir um guessedChar (letra que o jogador acha que tem na frase).
d) Passa o guessedChar para o método initializer.receiveGuess(), o qual procura o guessedChar pela frase. Se a letra for encontrada, o indexador na frase é adicionado dentro do ArrayList idxList. Depois de terminado o processo, o método retorna o idxList para a classe GamePanel.java.
e) Se o idxList estiver vazia, significa que a letra não foi encontrada, o programa termina a execução.
f) Se o idxList não estiver vazia indica que pelo menos uma letra foi encontrada, o jogador continua seu jogo indo para o passo 3.
A classe GamePanel.java implementa a “raiz” do programa e a “raiz” tem um “while” até o passo 3f e começa no 3c. Os métodos correspondentes são despachados das classes Initializer.java e Player.java correspondentemente.
O maior recurso é o método initializer.receiveGuess() que procura na palavra a letra guardada no guessedChar. Vamos ao código.
Classe Initializer.java do projeto Roda da Fortuna 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import java.util.ArrayList; public class Initializer{ private String sentence; private int sentenceLen; public Initializer(){} public int initSentence(){ sentence = "Hello World"; sentence = sentence.toUpperCase(); sentenceLen = sentence.length(); showMsg("O jogo está pronto. Comece a jogar"); return sentenceLen; } public ArrayList<Integer> receiveGuess(char inputChar){ inputChar = Character.toUpperCase(inputChar); ArrayList<Integer> idxList = new ArrayList(); for(int i = 0; i < sentenceLen; i++){ if(sentence.charAt(i) == inputChar){ idxList.add(i); } return idxList; } } public void showMsg(String msg){ System.out.println(msg); } } |
O método initializer.receiveGuess(inputChar) demonstra a partida em processo. A sentence é uma String, mas o parâmetro inputChar é um simples char.
O método charAt() da classe String é invocado com um simples caractere da sentence e compara com o inputChar.
1 2 3 4 5 |
... if(sentence.charAt(i) == inputChar){ idxList.add(i); } ... |
Esse código adiciona o “index” dentro do ArrayList idxList para ser utilizando mais tarde. O “for” inicia no index 0 e vai até o (sentence.length() – 1) para comparar o inputChar com todos os caracteres da sentence. Assim que o “for” terminar, o ArrayList idxList irá guardar todos os indexes que ocorreram da partida.
O método initializer.receiveGuess() é modelado como uma função, o qual retorna o ArrayList idxList para chamar o gamePanel. O gamePanel checa o tamanho do idxList e mostra no console da aplicação. Se o guessedChar não encontrar nenhuma letra, o programa é terminado.
O jogo ainda não vai funcionar porque não temos as outras classes para fazer a execução do jogo. Mas logo teremos.
Fonte: Learning Java with Games
Deixe um comentário