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