sábado, 27 de novembro de 2010

Jogo da Forca em Java

Olá pessoas!
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

terça-feira, 20 de abril de 2010

Hello world, soma em JSP - JavaServer Pages - Java para web

Olá pessoal! Bem vindos ao site que a um ano prublica tudo quanto é tipo de "hello world" em java. Mas esse vocês ainda não viram, pelo menos não aqui.

Estou usando o NetBeans 6.8, completo. Devidamente instalado (já vimos como fazer isso).

Vou criar minha primeira JSP! Que emoção!

Com a IDE aberta, vamos em file->New Project. Escolha "Java Web" e "Web Application". Next.


Agora definimos onde vamos salvar os arquivos e qual vai ser o nome do projeto. Chamamos ele de "hello". Next.

O próximo passo é configurar "quem" vai rodar essas páginas. Durante a instalação instalamos o "GlassFish" que é um servidor web que entende JAVA. Tipo um "mod-php" do apache. Finish.


Depois do finish, ele vai demorar um pouco, criar arquivos, diretórios, registrar qualquer coisa... e vai te largar numa tela como a seguinte:



Nosso código ficou assim:
int a = 5;
int b = 8;        
int r = a+b;

Veja a tela - preste atenção nos delimitadores do bloco de instruções (linha 18 e 22):


Observem que junto a "resultado" tem o comando para imprimir o r.

Buenas! É isso!



Bom feriado!

sexta-feira, 16 de abril de 2010

Soma em Java, com swing!

Hoje, durante a aula de Delphi, sem nada para fazer vi que tinha instalado na máquina da escola o Jdeveloper. Pensei em ver se eu ainda sabia alguma coisa, já que faz quase um ano que não digito uma linha de Java.

Buenas, passo a passo.
1 - Abra o Jdevelopper. File > New > General > Generic Application. Next.
2 - Escolha o nome, onde salvar ... Next

Na próxima tela ele vai pedir "que tecnologias" você quer adicionar no seu projeto.
3 - Na aba "project tecnologies" adicione para sua aplicação "swing/awt". Next
4 - Finish

Agora vamos ao código, com o projeto criado, faça uma nova classe, a "Calculo" que faz a incrível soma:
package javal;

public class Calculo {
    private int va;
    private int vb;


    public void setVa(int va) {
        this.va = va;
    }

    public int getVa() {
        return va;
    }

    public void setVb(int vb) {
        this.vb = vb;
    }

    public int getVb() {
        return vb;
    }
    
    public int getSoma(){
        return this.va + this.vb;
    }
}


Agora vamos criar a tela gráfica. File > New. Selecione "Client Tier" > Frame. Veja abaixo.
De ok. Na tela seguinte é deinido o nome da classe, no meu caso coloquei o nome de "Window". Em seguida adicionei os componentes, jTextField's e JButton. Ficou como na figuira a seguir.


Legal!
Agora vamos fazer a tela que tem o main(), que inicia, roda o sistema todo!

Faça uma nova classe, chamei ela de Sistema. Segue o código.
package javal;

public class Sistema {
    public Sistema() {
    }

    public static void main(String[] args) {
        Sistema sistema = new Sistema();
        Window win = new Window();
        System.out.print("Running...");
        win.setVisible(true);
    }
}

Agora o que temos a fazer é na classe Window, fazer pegar o que o usuário digita nos campos, e fazer a chamada dos métodos de Calculo. De um clique duplo no botão, aí vai o seguinte código. Ele é auto-explicativo.

int A = Integer.parseInt(jTextField1.getText());
        int B = Integer.parseInt(jTextField2.getText());
        int C = 0;
                                                         
        Calculo c = new Calculo();
        
        c.setVa(A);
        c.setVb(B);
        C = c.getSoma();
        
        jTextField3.setText(String.valueOf(C));   

O primeiro campo é p jTextField1 e assim na sequencia, como está na tela. Lembre que antes de passar o vaor para o método c.setVa ele tem que estar no formato/tipo correto, por isso tem que dar um Integer.parseInt() no getText do jTextField.

O mesmo antes de mandar imprimir o valor, tem que converter para string. Aqui usamos o String.valueOf().

Bem, funciona! Até o próximo.

sexta-feira, 26 de fevereiro de 2010

Primeira postagem \o/ - Exercícios em Java - Parte I

Bom dia!!!
É minha primeira postagem aqui no blog!

No semestre passado, comecei a matéria "Linguagem de Programação I" na faculdade de Ciência da Computação na UNIJUÍ, a qual se trata de Java.

É claro que tem que haver exercícios. E é claro que praticamente ninguém faz o trabalho totalmente sozinho. Copia um pouco de um, um pouco de outro, e faz um pouquinho também.

Então, esses exercícios que pretendo postar,aviso desde já, são meus, mas com participações de alguns colegas que não vou citar, porque não lembro com quem peguei o que ^^

Bom, como são 20 exercícios (que professor cruel...), vou postar 5 hoje, talvez 5 amanhã, e assim consecutivamente (eta palavra difícil!).

Bom, então vamos ao que interessa: vou postar primeiro a questão dada pelo professor, e em seguida o código da solução.


Sugestões de modos diferentes, de complementos, críticas e talz, por favor, nos comentário.
Let's go!


1) Escrever um programa que lê três valores, que são os lados de um triângulo, e calcule a área deste triângulo:
Área  = raíz quadrada(  S ( S – A ) ( S – B ) ( S – C ) )
onde S é o semi-perímetro


Solução:
Arquivo: exe1.java
import java.util.Scanner;

class exe1

{

  static public void main (String[] args) {



     double x,a,b,c,s,area;



     Scanner myScanner= new Scanner(System.in);

     System.out.println ("Digite o lado 'A' do triangulo: ");

     a=myScanner.nextDouble();

     System.out.println ("Digite o lado 'B' do triangulo: ");

     b=myScanner.nextDouble();

     System.out.println ("Digite o lado 'C' do triangulo: ");

     c=myScanner.nextDouble();



     s=(a+b+c)/2;

     area= s*(s-a)*(s-b)*(s-c);

     area=Math.sqrt(area);

     System.out.println ("A area do triangulo e "+area);

   }

}




2) Escrever um programa que determine o número de notas necessárias para compor o salário de um funcionário. Supondo a existência das notas de R$ 100,00, R$ 50,00, R$ 20,00, R$ 5,00, R$ 2,00 e R$ 1,00 um salário de R$ 1234,00 deveria ser decomposto da seguinte maneira:

Notas------------Quantidade
R$ 100,00....................12
R$ 50,00........................0
R$ 20,00........................1
R$ 10,00 .......................1
R$ 5,00..........................0
R$ 2,00..........................2
R$ 1,00..........................0
Total..................1234,00

Solução:

import java.util.Scanner;

class exe2

{ 

 static public void main (String[] args) {



 Scanner myScanner = new Scanner(System.in);

 int sal,nota1,nota2,nota3,nota4,nota5,nota6,nota7,resto;

 System.out.println("Escreva o salario liquido do funcionario: ");

 sal=myScanner.nextInt();

 nota1=sal/100;

 resto=sal%100;

 nota2=resto/50;

 resto=resto%50;

 nota3=resto/20;

 resto=resto%20;

 nota4=resto/10;

 resto=resto%10;

 nota5=resto/5;

 resto=resto%5;

 nota6=resto/2;

 nota7=resto%2;

 System.out.println(" Notas "+"    Quantidade  ");

 System.out.println("R$ 100,00 "+nota1);

 System.out.println("R$ 50,00  "+nota2);

 System.out.println("R$ 20,00  "+nota3);

 System.out.println("R$ 10,00  "+nota4);

 System.out.println("R$ 5,00  "+nota5);

 System.out.println("R$ 2,00  "+nota6);

 System.out.println("R$ 1,00  "+nota7);



 System.out.println("Total: R$   "+sal);

    }




3) Faça um programa em JAVA que leia o tempo de duração de um evento em uma fábrica expressa em segundos e mostre-o expresso em horas, minutos e segundos.

Solução:

import java.util.Scanner;

class exe3

{

  static public void main (String[] args) {

 

 int seg,min,hor;

 Scanner myScanner=new Scanner(System.in);

 System.out.println("Digite os segundos: ");

 seg=myScanner.nextInt();

 hor=seg/3600;

 seg=seg%3600;

 min=seg/60;

 seg=seg%60;



 System.out.println(hor+":"+min+":"+seg);

      }

}



4) Escrever um programa que receba um par de valores X,Y que representam as coordenadas de um ponto no plano e determine o quadrante ao qual pertence o ponto ou se está sobre a origem ou ainda se está sobre um dos eixos cartesianos.

Solução:

import java.util.Scanner;

class exe4

{

  static public void main (String[] args) {



 double coord1,coord2;

 double quadrante = 0d;

 Scanner myScanner = new Scanner(System.in);

 System.out.println ("Digite a cordenada de x: ");

 coord1=myScanner.nextDouble();

 System.out.println ("Digite a cordenada de y: ");

 coord2=myScanner.nextDouble();

 if (coord1==0 & coord2==0){

  System.out.println ("Nenhum quadrante");

 }

 else

 {

  if(coord1>0)  {

   if(coord2>0){

     quadrante=1d;

   }

   else{

     quadrante=4d;

   }

  }

  else{

  

    if(coord2>0){

     quadrante=2d;

    }

    else{

     quadrante=3d;

    }

  }

 }

 System.out.println ("As coordenadas de x,y estão no: "+quadrante+" quadrante");

    }

}

 


5) Escrever um programa que leia quatro valores e os exiba em ordem decrescente.

Solução:
import java.io.*;

import java.util.Scanner;

import java.util.Arrays;



class exe5 {

 static public double[] reverse(double array[]) {

  double newArray[] = new double[array.length];

  int j = (array.length - 1);

  for(int i = 0; i < array.length; ++i){

   newArray[i] = array[j];

   --j;

  }

  return newArray;

 }



 static public void main (String[] args) {

  double values[] = new double[4];

  

  Scanner scanner = new Scanner(System.in);

  

  for(int i = 0; i < 4; ++i){

   System.out.println ("Digite o valor " + (i + 1));

   values[i] = scanner.nextDouble();

  }

  

  Arrays.sort(values);

  values = reverse(values);

  System.out.println ("\nValores\n");

  

  for(int i = 0; i < values.length; ++i){

   System.out.println(values[i]);

  }           

  

 }

}



Bom, aí estão os primeiros exercícios. Por favor, não sejam cruéis em seu comentário... hehehe... Foi no semestre passado, ja nem lembro direito... hehehe...
Vou esperar vossa avaliação...
Fui e ....
...Voltaremos!

quarta-feira, 24 de fevereiro de 2010

Instalando JDeveloper 11g no Windows

Olá pessoal, este é meu primeiro post aqui no Foo Java e, apesar do Helton ter dito em seu post (recomendo a leitura) que não haveria um tutorial de instalação para Windows pois segue o padrão NNF, vou colocar aqui os passos e algumas dicas para deixar seu Windows pronto para programar em Java, bem, vamos lá!!

Na minha máquina estou utilizando Windows 7 mas sei que funciona em XP e Vista também, abaixo disso não sei. Para começar é necessário se cadastrar no site da Oracle e fazer o download do JDeveloper (download - 993 MB) e do JDK (download).

Feito os downloads, primeiramente instalamos o JDK (NNF) e após ir até a pasta bin da instalação que provavelmente será "C:\Program Files\Java\jdk1.5.0_14\bin", copie este caminho, depois abra propriedades do sistema (Super+pause+break), clique em "Configurações avançadas do sistema" que está no lado esquerdo, veja imagem.


Vai abrir um nova janela, abra a aba "Avançado" e depois clique em "Váriaveis de Ambiente...", nesta nova janela procure por "Path" nas variáveis do sistema, selecine e clica em editar, vai abrir uma nova janela, adicione um ponto e vírgula (;) ao final do que já estiver ai dentro e depois cole o caminho que está guardado na memória (bin JDK) conforme imagem abaixo.


Clique em Ok, Ok e Ok e pronto, vamos agora testar se foi instalado corretamente, no prompt de comando digite os seguintes comandos: "java -version" e "javac -version", um de cada vez, deve aparecer algo semelhante a imagem abaixo se estiver ok.


Vamos agora instalar o JDeveloper em si (NNF), na primeira vez vai pedir para selecinoar qual interface carregar e tal, isso tudo você já viu no post do Helton Instalando JDeveloper 11 em Linux, no Windows é semelhante.

Bom pessoal, quando aprender algo novo (Java) que o Helton ainda não tenha escrito aqui eu volto, se quiser dar uma passada no meu blog clique em Blog do Bolívar!


Abraços!