Voltando a postar no Blog.
Desta vez, vou postar um joguinho que tivemos que fazer para a aula de Java, um jogo da Forca. Não é muito complicado, visual bonitinho e funciona \o/
Vou colocar as telas e o código abaixo.
Tela Inicial:
Nesta tela, temos o desenho da forca e onde será colocado as letras para verificação e aparecem as dicas. Para jogar, é necessário ir em Arquivo, Novo Jogo, que habilitará as caixas de texto e ja sorteara uma palavra. Claro que pode não haver nenhuma palavra cadastrada, então o usuário terá que ir no menu Cadastrar, Palavras e Dicas, que será explicado depois.
Voltando ao jogo, uma palavra foi sorteada, como na imagem abaixo, mostrando a dica:
Após aparecer a dica, o usuário pode testar as letras, embaixo aparecerão riscos, mostrando quantas letras a palavra possui.
Testarei a letra E:
Como a letra não existe na palavra, ele ja mostra uma parte da figura que formará o corpo do enforcado.
Vou agora inserir a letra A:
Como esta letra existe na palavra, ela aparece em seu(s) respectivo(s) lugar(es) nos riscos abaixo.
Completando com as letras C e S:
Como eu acertei a palavra, o programa exibe uma mensagem de que eu venci o jogo e me pede se eu quero jogar novamente. Se eu escolher Sim, ele sorteará uma nova palavra; se eu escolher Não, o programa será fechado.
Vou colocar agora os códigos para ver como funciona.
O Primeiro código será do botão Novo Jogo:
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { lblDigite.enable(true);//habilita os campos do jogo CampoTentar.enable(true); // btVerifica.enable(true); não desabilitar botão pq depois não habilita TxtDica.enable(true); PalavraForca.enable(true); // Dá um reset no jogo: PalavraForca.setText("");//limpa os campos Tentativas.clear();//limpa as tentativas sortearpalavra(); //pega uma palavra do Txt e sorteia FimDoJogo=false; //Como ainda não é o fim do jogo, a opção se torna falsa LabelImagem.setIcon(icon0); //seta o ícone normal, do desenho da forca NumTentativas=0; // zera o numero de tentativas desenharpalavra(false);//a palavra só será desenhada se o usuário perder o jogo }
O próximo código, é o do botao verificar:
private void btVerificaActionPerformed(java.awt.event.ActionEvent evt) { if(!FimDoJogo){//verifica se não é o fim do jogo tentarletra(CampoTentar.getText());//se não for, pega a letra escrita e verifica se tem na palavra CampoTentar.setText("");//deixa o campo onde são digitadas as letras vazio } }
Agora, vou colocar os métodos utilizados, que são chamados no menu e botão:
public class principal extends javax.swing.JFrame { //criacao de variáveis e definição das imagens e cria os vetores String PalavraSorteada = new String(); ArrayList Tentativas = new ArrayList(); int MaxTentativas = 6 ; int NumTentativas = 0 ; boolean FimDoJogo = true; ImageIcon icon0 = new ImageIcon("forca00.jpg"); ImageIcon icon1 = new ImageIcon("forca11.jpg"); ImageIcon icon2 = new ImageIcon("forca22.jpg"); ImageIcon icon3 = new ImageIcon("forca33.jpg"); ImageIcon icon4 = new ImageIcon("forca44.jpg"); ImageIcon icon5 = new ImageIcon("forca55.jpg"); ImageIcon icon6 = new ImageIcon("forca66.jpg"); ArrayList PalavrasArquivo = new ArrayList(); ArrayList DicasArquivo = new ArrayList();
Essas são as declarações no começo da classe; é necessário importar:
import java.awt.Image; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import javax.swing.ImageIcon; import javax.swing.JDialog;
Abaixo, o método que faz o sorteio da palavra:
public void sortearpalavra() { try { File Arquivo = new File("Palavras.txt"); //lê o arquivo Txt FileReader leitor = new FileReader(Arquivo); BufferedReader leitorBuf = new BufferedReader(leitor); PalavrasArquivo.clear(); //limpa o temporario que armazena as palavras DicasArquivo.clear(); //limpa o temporaio que aramzena a dica String linha=null; while((linha = leitorBuf.readLine()) !=null){ String colunas[] = linha.split("#"); //lê a linha contendo a palavra e a dica, sabendo q as mesmas sao separadas pelo PalavrasArquivo.add(colunas[0]);//caractere # DicasArquivo.add(colunas[1]); } leitorBuf.close(); int TotalPalavras = PalavrasArquivo.size();//lê o tamanho da palavra para desenhar os traços int CodPalavraSorteada = (int) (Math.random()*(TotalPalavras)) ;//sorteia uma palavra randomicamente PalavraSorteada = (String) PalavrasArquivo.get(CodPalavraSorteada);//pega a plavra sorteada PalavraSorteada= PalavraSorteada.toUpperCase();//coloca em maiusculo TxtDica.setText("DICA: "+(String) DicasArquivo.get(CodPalavraSorteada));//pega a dica e exibe } catch(Exception ex) { System.out.println("Erro: "+ ex.toString());}; }
O próximo método, é o que desenha a palavra na tela, nos riscos, quando o usuário acerta a palavra:
public void desenharpalavra(boolean MostrarTodaAPalavra){ String tempTexto = new String(); boolean faltauma = false; for(int n=1;n<=PalavraSorteada.length();n++){ //pega o tamanho da palavra e cria os tracinhos if((MostrarTodaAPalavra) || (Tentativas.contains(PalavraSorteada.substring(n-1, n)))){ tempTexto=tempTexto+PalavraSorteada.substring(n-1, n); }else{ tempTexto=tempTexto+"_"; faltauma=true; } tempTexto=tempTexto+" "; } PalavraForca.setText(tempTexto); if(!faltauma){ FimDoJogo=true; if ((NumTentativas)<6){ //verifica se o num de tentativas é menor q 6; se for, o usuario ganhou joga_nov.pack(); //abre a mensagem q pede se o usuário quer jogar novamente joga_nov.setLocationRelativeTo(null); joga_nov.setVisible(true); } // Dá pra mostrar uma outra mensagem aqui. } }
O próximo método, é o qe verifica as letras se existem na palavra:
public void tentarletra(String Letra){ Letra= Letra.toUpperCase(); if(Tentativas.contains(Letra)){ // Mostrar mensagem de q já foi tentada esta letra }else{ // Armazena a letra nova na lista de tentativas. Tentativas.add(Letra); if(PalavraSorteada.contains(Letra)){ // Acertou desenharpalavra(false); }else{ NumTentativas=NumTentativas+1;//vai adicionando o num de tentativas; se errar, adiciona o desenho switch(NumTentativas){ case(1):{ LabelImagem.setIcon(icon1); break; } case(2):{ LabelImagem.setIcon(icon2); break; } case(3):{ LabelImagem.setIcon(icon3); break; } case(4):{ LabelImagem.setIcon(icon4); break; } case(5):{ LabelImagem.setIcon(icon5); break; } case(6):{ LabelImagem.setIcon(icon6); FimDoJogo=true; desenharpalavra(true); FimDoJogo=true; jogo_novo.pack(); jogo_novo.setLocationRelativeTo(null); jogo_novo.setVisible(true); break; } } } } }
Esta é a tela que aparece se o usuário ganha o Jogo. Se clicar em Sim, o jogo recomeçará, com uma nova palavra; se Não, o jogo seá fechado.
O código no botão Sim é o seguinte:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // Dá um reset no jogo: PalavraForca.setText(""); Tentativas.clear(); sortearpalavra(); FimDoJogo=false; LabelImagem.setIcon(icon0); NumTentativas=0; desenharpalavra(false); joga_nov.setVisible(false); }
E no botão Não:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); }
Quando o usuário perde o jogo, as mensagens são as mesmas, com os mesmos códigos.
Vou passar agora para a parte do Cadastro. O post ta grandinho ja hehehe
Não estou explicando muito o código porque a maior parte está comentada. E acho que o código não é muito difícil de entender.
Continuando, a seguir a tela de Cadastro.
No primeiro Campo, o usuário digita a Palavra que ele quer que seja usada no jogo; na segunda, a Dica da palavra.
No botão Salvar, o código é o seguinte:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { BufferedWriter arquivo; String valores = txtpalavra.getText() + "#" + txtdica.getText(); try { // abre o arquivo de texto para acrescentar linhas arquivo = new BufferedWriter(new FileWriter("Palavras.txt", true)); // escreve a linha de texto arquivo.write(valores); // insere uma quebra de linha arquivo.newLine(); // força a gravação dos dados em disco arquivo.flush(); arquivo.close(); txtpalavra.setText(""); txtdica.setText(""); } catch (IOException erro) { // trata o erro } }
É claro que terá alguns imports também, nada muito complicado.
Bom, acho que no básico é isso.
Não sou uma grande Expert em Java, mas to aprendendo ^^
Faltou implementar algumas coisas também, quem sabe depois de modificar eu posto as mudanças aqui.
Eabaixo, segue o Link pra quem quiser fazer download do Jogo. Só não consegui fazer o .jar executável funcionar XD
http://www.4shared.com/file/NKEODY4G/FORCA.html
Fui! :D