Animação 2D de um fantasma em Java

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;
import javax.swing.JFrame;


/**
 * Site: http://programjm.blogspot.com.br/
 * @author João Matheus Santos Assis
 * @version 1.00 2013-06-29
 */
@SuppressWarnings("serial")
public class Fantasma extends JFrame {
    
    // Diretório onde a imagem encontrasse.
    String imagem = "C:\\Users\\Cliente\\Desktop\\fantasma.JPG";
    // Carregando a imagem.
    Image image = Toolkit.getDefaultToolkit().getImage(imagem);

    Random numberRandon = new Random();

    // Atributos dos fantasmas.
    private int moverX = 40;
    private int moverY = 40;
    private int transparenciaDaImagem;
    private int larguraDaImagem;
    private int alturaDaImagem;


    /**
     * É aqui que é repintada a tela depois que o sleep
     * acaba seu repouso de 0,5 segundos.
     */
    public void desenharGraficos() {

        Graphics g = getGraphics();
Graphics2D g2d = (Graphics2D) g.create();

g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, getWidth(), getHeight());
AlphaComposite alpha = 
                AlphaComposite.getInstance(
                AlphaComposite.SRC_OVER, 
(float) transparenciaDaImagem / 100
);
g2d.setComposite(alpha); 


g2d.drawImage(
            image, 
            moverX, 
            moverY, 
            larguraDaImagem, 
            alturaDaImagem,
            this
);  

g2d.dispose();

    }


    /**
     * A transparência do fantasma será definida neste método.
     * O máximo valor que transparenciaDaImagem poderá atingir
     * é 90 e o mínimo 10.
     */
    public void transparencia() {

        transparenciaDaImagem = 10 + numberRandon.nextInt(80);
    }


    /**
    * Aqui é definido a largura e a altura da imagem, 
    * que é gerada aleatoriamente para deixar a aplicação
    * mas dinâmica e "imprevisível".
    */
    public void tamanho() {

        larguraDaImagem = 200 + numberRandon.nextInt(160);
alturaDaImagem = 101 + numberRandon.nextInt(71);
    }


    /**
    * Se a variável moverX for menor do que a largura 
    * da janela subtraido por 120, esta será acrescida
    * de 10, caso o contrário é atribuido a ela o valor 40.
    * 
    * Se a variável moverY for menor do que a altura 
    * da janela subtraido por 120, esta será acrescida
    * de 10, caso o contrário é atribuido a ela o valor 40.
    */ 
    public void mover(){

        moverX = (moverX  < getWidth() - 120) ? moverX += 10 : 40;
moverY = (moverY  < getHeight() - 120) ? moverY += 10 : 40;
    }


    /** Aqui chamamos o método mover, tamanho e transparência.*/
    public void atualizar() {

        mover(); 
tamanho();
transparencia();
    }


    /** 
    * Propriedades da Janela, ou seja,
    * o título, o que acontecerá quando for solicitado
    * o fechamento do JFrame, o tamanho, se ele 
    * poderá ser maximizada ou não, a localização
    * inicial, o layout e a visibilidade da janela.
    */
    public void inicializar() {

        setTitle("Fantasma!");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(700, 700);
setResizable(false);
setLocationRelativeTo(null);
setLayout(null);
setVisible(true);
    }


    /**
    * Método gerenciador da execução da aplicação.
    */
    public void run() {

        inicializar();

while (true) {

            atualizar();
            desenharGraficos();
   
            /* 
             * De 0,5 segundos(500 milissegundos) em
             * 0,5 segundos a janela é atualizada.
             */
            try {
                Thread.sleep(500);
            } catch (Exception e) {
                System.out.println("Thread Interrompida!");
            }
}
  
    }


    /**
     * Método Principal da aplicação.
     */
    public static void main(String[] args) {

        Fantasma janela = new Fantasma();
        janela.run();

    }

}


Palavras-Chaves: Animação, Java 2D, Mover Imagem na tela, Transparência da Imagem, Randomização, Largura, Altura, Atualizar, Inicializar, Métodos, Segundos, Milissegundos, Thread, Laço Infinito, Gerenciador, Execução, Diretório, Aplicação, Propriedades da Janela, Fantasma, Java.



Nota.: Para que este programa execute perfeitamente é necessário ter uma imagem no diretório indicado no Código-Fonte. Baixe uma imagem de um fantasma (recomendamos) ou algo que desejar. O diretório também pode ser perfeitamente alterado para atender as necessidades do programador e/ou usuário.


Artigos relacionados em Java:




Feito no NetBeans-7.1 | Executável





Outra Sugestão!

Feito no NetBeans-7.1 | Executável




Inglês Instrumental em Pascal

Program AULA_BASICA_DE_INGLES_INSTRUMENTAL;
uses crt;
var
opcao : integer;

    // Site: http://programjm.blogspot.com.br/
    // Autor: João Matheus Santos Assis.

    {
     Neste programa pretende-se desenvolver habilidades de
     leitura e Escrita de Números, Dias da Semana e Meses do
     Ano na Lingua Inglesa.

     Aqui é proporcionado condições de tradução de palavras,
     sendo uma forma dinâmica e até mesmo educativa de
     aprender o Inglês Instrumental.

     O Inglês Instrumental é o Inglês com Objetivos Específicos,
     ou seja, entender textos das áreas de interesse do aluno.
     Neste caso este programa fornece ferramenta úteis para quem
     é iniciante no Inglês e buscam testar a escrita.
    }


    procedure numero;
    // Aqui colocamos as variáveis que serão usadas só neste procedimento.
    var
    vetorNumero : array[1..10] of String;
    vetorVerificacaoNumero : array[1..10] of String;
    numeroDeAcerto: integer;
    i : integer;
    begin

        numeroDeAcerto := 0;

        for i := 1 to 10 do begin
            write (i, ' - ');
            readln(vetorNumero[i]);
        end;

        {
         No vetorVerificacaoNumero é definido a resposta
         correta, ou seja, os Numeros de 1 à 10 em Inglês.
        }
        vetorVerificacaoNumero[1] := 'ONE';
        vetorVerificacaoNumero[2] := 'TWO';
        vetorVerificacaoNumero[3] := 'THREE';
        vetorVerificacaoNumero[4] := 'FOUR';
        vetorVerificacaoNumero[5] := 'FIVE';
        vetorVerificacaoNumero[6] := 'SIX';
        vetorVerificacaoNumero[7] := 'SEVEN';
        vetorVerificacaoNumero[8] := 'EIGHT';
        vetorVerificacaoNumero[9] := 'NINE';
        vetorVerificacaoNumero[10] := 'TEN';

        writeln;

        {
         Aqui é feito a correção do questionário; Tanto a resposta
         estando Certa como Errada é mostrado os Numeros em Inglês.
        }
        for i := 1 to 10 do begin
            if (UpCase(VetorNumero[i]) = vetorVerificacaoNumero[i]) then begin
               writeln (' Correct! ', i ,' - ', vetorVerificacaoNumero[i]);
               numeroDeAcerto := numeroDeAcerto + 1;
            end else
                writeln ('   Wrong! ', i, ' - ', vetorVerificacaoNumero[i]);
        end;

        writeln;
        // Exibindo o número de acerto do usuário.
        writeln('Number of Hits: ', numeroDeAcerto);

        // É esperado aqui que o usuário pressione uma tecla para continuar.
        readln;
    end;



    procedure diaDaSemana;
    //Aqui colocamos as variáveis que serão usadas só neste procedimento.
    var
    vetorDiaDaSemana : array[1..7] of String;
    vetorVerificacaoDiaDaSemana : array[1..7] of String;
    numeroDeAcerto : integer;
    i : integer;
    begin

        numeroDeAcerto := 0;

        for i := 1 to 7 do begin
            // chr(167): retorna um caractere da Tabela Ascii.
            write (i, chr(167) ,' Day of the week - ');
            readln(vetorDiaDaSemana[i]);
        end;

        vetorVerificacaoDiaDaSemana[1] := 'SUNDAY';
        vetorVerificacaoDiaDaSemana[2] := 'MONDAY';
        vetorVerificacaoDiaDaSemana[3] := 'TUESDAY';
        vetorVerificacaoDiaDaSemana[4] := 'WEDNESDAY';
        vetorVerificacaoDiaDaSemana[5] := 'THURSDAY';
        vetorVerificacaoDiaDaSemana[6] := 'FRIDAY';
        vetorVerificacaoDiaDaSemana[7] := 'SATURDAY';

        writeln;

        for i := 1 to 7 do begin
            if (UpCase(vetorDiaDaSemana[i]) = vetorVerificacaoDiaDaSemana[i]) then begin
               writeln (' Correct! ', i, chr(167), ' Day of the week - ',
               vetorVerificacaoDiaDaSemana[i]);
               numeroDeAcerto := numeroDeAcerto + 1;
            end else
            writeln ('   Wrong! ', i , chr(167) ,' Day of the week - ',
            vetorVerificacaoDiaDaSemana[i]);
        end;

        writeln;
        writeln('Number of Hits: ', numeroDeAcerto);

        readln;
    end;



    procedure mesesDoAno;
    // Aqui colocamos as variáveis que serão usadas só neste procedimento.
    var
    vetorMesesDoAno : array[1..12] of String;
    vetorVerificacaoMesesDoAno : array[1..12] of String;
    numeroDeAcerto : integer;
    i : integer;
    begin

        numeroDeAcerto := 0;

        for i := 1 to 12 do begin
            write (i, chr(167) ,' Month of the year - ');
            readln(vetorMesesDoAno[i]);
        end;

        vetorVerificacaoMesesDoAno[1] := 'JANUARY';
        vetorVerificacaoMesesDoAno[2] := 'FEBRUARY';
        vetorVerificacaoMesesDoAno[3] := 'MARCH';
        vetorVerificacaoMesesDoAno[4] := 'APRIL';
        vetorVerificacaoMesesDoAno[5] := 'MAY';
        vetorVerificacaoMesesDoAno[6] := 'JUNE';
        vetorVerificacaoMesesDoAno[7] := 'JULY';
        vetorVerificacaoMesesDoAno[8] := 'AUGUST';
        vetorVerificacaoMesesDoAno[9] := 'SEPTEMBER';
        vetorVerificacaoMesesDoAno[10] := 'OCTOBER';
        vetorVerificacaoMesesDoAno[11] := 'NOVEMBER';
        vetorVerificacaoMesesDoAno[12] := 'DECEMBER';

        writeln;

        for i := 1 to 12 do begin
            if (UpCase(vetorMesesDoAno[i]) = vetorVerificacaoMesesDoAno[i]) then begin
               writeln (' Correct! ', i , chr(167) ,' Month of the year - ',
               vetorVerificacaoMesesDoAno[i]);
               numeroDeAcerto := numeroDeAcerto + 1;
            end else
            writeln ('   Wrong! ', i , chr(167) ,' Month of the year - ',
            vetorVerificacaoMesesDoAno[i]);
        end;

        writeln;
        writeln('Number of Hits: ', numeroDeAcerto);

        readln;
    end;



    {
     Aqui é feito o procedimento cabeçalho do Menu Ativo,
     facilitando assim a compreenção do software para o usuário.
    }
    procedure cabecalho(Titulo: String);
    var
    linha: integer;
    begin
  
        // Escreve traço (-) e espaço em brancos ( ).
        for linha := 1 to 39 do
            write ('- ');
     
        // Quebra de Linha.
        writeln;
     
        // Escreve espaço em branco seguido pelo Título enviado por parâmetro.
        for linha := 1 to 30 do
            write (' ');

        writeln (Titulo);
     
        for linha := 1 to 39 do
            write ('- ');
     
        writeln;
        writeln;
    end;
  


    // Programa Principal.
    begin

        // O Laço de repetição só terá fim quando o usuário digitar 4 como opção.
        repeat
     
            cabecalho ('ENGLISH INSTRUMENTAL');

            // Menu de Opção.
            writeln (' 1 - NUMBERS');
            writeln (' 2 - DAYS OF THE WEEK');
            writeln (' 3 - MONTHS OF THE YEAR');
            writeln (' 4 - EXIT');
            writeln;

            // Leitura da Opção escolhida.
            write ('Enter option: ');
            readln(opcao);


            // Apaga o que estiver na tela.
            clrscr;
     
     
            // Seletor responsável por desviar para o parâmetro correspondente.
            CASE (opcao) OF

                1 : begin
                    cabecalho ('NUMBERS');
                    Numero;
                end;
          
                2 : begin
                    cabecalho ('DAYS OF THE WEEK');
                    diaDaSemana;
                end;
          
                3 : begin
                    cabecalho ('MONTHS OF THE YEAR');
                    mesesDoAno;
                end;
            end;

            clrscr;
     
        until (opcao = 4);

        readkey;
    end.



Palavras-Chaves: Número, Dias da Semana, Meses do Ano, Sair do Programa, Questionário, Teste de Aprendizado, Software Educacional, Caixa Alta em Pascal, Vetor, Operadores Condicionais, Uso do Case,  If...Then, Procedimentos, Procedure, Laço de repetição, Repeat...Until, For...To, Número de Acertos, Menu de Opção, Limpar a tela, Quebra de Linha, Parâmetro, Título da aplicação, Lógica de Programação, Resposta, Correção, Tabela Ascii, Dev-Pascal, Usuário, Inglês Instrumental, Pascal.





Feito no Dev-Pascal 1.9.2 | Executável




Feito no Dev-Pascal 1.9.2 | Executável

Sabatina da Multiplicação em Java

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.*;


public class MultiplicadorGrafico extends JFrame {
    
    
    /*
     * Este é um Software Educacional destinado
     * a estudantes do Ensino básico e Fundamental,
     * e a pessoas que se dedicam a resolução de
     * contas mentalmente.
     */
    
    
    
    // Instânciando um objeto da classe Random.
    Random RandomNumber = new Random();
    
    
    final int NívelDeDificuldadeMáximo = 10;
    final int NívelDeDificuldadeMínimo = 1;
    
    
    int Multiplicando;
    int Multiplicador;
        
    
    
    
    public MultiplicadorGrafico() {
        super("Testando aprendizagem");
        
        /*
         * http://programjm.blogspot.com.br/
         * @Autor: João Matheus Santos Assis
        */
        
        
        // Construtor da classe MultiplicadorGrafico.
        initComponents();
    }
    
    
    
    
    // Método com os componentes de inicialização.
    private void initComponents() {
        
        
        setLayout(new FlowLayout());
        
        
        /* 
         * Instanciando classe interna responsável por
         * tratar os Eventos.
         */
        ButtonHandler handler = new ButtonHandler();
        PanelNível = new JPanel();
        
        
        
        // Propriedades do ButtonDiminirNível.
        ButtonDiminirNível = new JButton();
        ButtonDiminirNível.setText("-");
        ButtonDiminirNível.setToolTipText("Diminuir Nível de Dificuldade");
        ButtonDiminirNível.setEnabled(false);
        ButtonDiminirNível.addActionListener(handler);
        PanelNível.add(ButtonDiminirNível);
        
        
        
        // Propriedades do ButtonAumentarNível.
        ButtonAumentarNível = new JButton();
        ButtonAumentarNível.setText("+");
        ButtonAumentarNível.setToolTipText("Aumentar Nível de Dificuldade");
        ButtonAumentarNível.addActionListener(handler);
        PanelNível.add(ButtonAumentarNível);
        
        
        add(PanelNível, BorderLayout.NORTH);
        
        
        PanelCentral = new JPanel();
        
        
        // Propriedades do LabelVisualizadorDeNível.
        LabelVisualizadorDeNível = new JLabel();
        LabelVisualizadorDeNível.setFont(new 
                Font("Serif" , Font.PLAIN , 16)
        );
        LabelVisualizadorDeNível.setText("Nível: 1");
        PanelNível.add(LabelVisualizadorDeNível);
        
        
        
        // Propriedades do LabelPergunta.
        LabelPergunta = new JLabel(); 
        LabelPergunta.setFont(new 
                Font("Serif" , Font.BOLD , 16)
        );
        PanelCentral.add(LabelPergunta);
        
        
        
        // Propriedades do TextFieldResposta.
        TextFieldResposta = new JTextField();
        TextFieldResposta.setColumns(8);
        PanelCentral.add(TextFieldResposta);
        
        
        
        // Propriedades do ButtonPróximo.
        ButtonPróximo = new JButton();
        ButtonPróximo.setText("Gerar Novos Números");
        ButtonPróximo.setMnemonic('N');
        ButtonPróximo.addActionListener(handler);
        PanelCentral.add(ButtonPróximo);
        
        
        
        // Propriedades do ButtonConfirmar.
        ButtonConfirmar = new JButton();
        ButtonConfirmar.setText("Confirmar");
        ButtonConfirmar.setSelected(true);
        getRootPane().setDefaultButton(ButtonConfirmar);
        ButtonConfirmar.addActionListener(handler);
        PanelCentral.add(ButtonConfirmar);
        
        
        
        // Definindo o tamanho que o JPanel deve assumir.
        PanelCentral.setPreferredSize(new Dimension(280,80));
        /* 
         * Criando as Bordas do JPanel e definindo a cor 
         * da linha como preta.
         */
        PanelCentral.setBorder(
                BorderFactory.createLineBorder(Color.BLACK)
        );
        add(PanelCentral, BorderLayout.CENTER);
        
        
        
        /*
         * Chamando o Método ObterXY enviando o valor 1,
         * que representa o NívelDeDificuldade.
         */
        ObterXY(1);
          
    }
    
    
    
    
    
    // Classe Interna que trata os Eventos.
    private class ButtonHandler implements ActionListener {
        
       private int NívelDeDificuldade = 1;

        @Override
        public void actionPerformed(ActionEvent event ) {
            
            
            /* 
             * A variável NívelDeDificuldade só poderá ser 
             * decrementada se seu valor for maior ou igual a 2.
             */
            if (NívelDeDificuldade > NívelDeDificuldadeMínimo) {
                if (event.getSource() == ButtonDiminirNível) {
                    NívelDeDificuldade--;
                    ObterXY(NívelDeDificuldade);
                }
            }
            
            
            
            /* 
             * A variável NívelDeDificuldade só poderá ser 
             * incrementada se seu valor for menor ou igual a 9.
             */
            if (NívelDeDificuldade < NívelDeDificuldadeMáximo) {
                if (event.getSource() == ButtonAumentarNível) {
                    NívelDeDificuldade++;
                    ObterXY(NívelDeDificuldade);
                }
            }
            
            
            
            /* 
             * O ButtonPróximo será responsável por gerar 
             * novos números à serem multiplicados.
             */
            if (event.getSource() == ButtonPróximo) {
                ObterXY(NívelDeDificuldade);
            }
            
            
            
            /* 
             * Método responsável por desabilitar os 
             * botões quando for necessário.
             */
            DesabilitarButton(NívelDeDificuldade);
            
            
            
            /*
             * O usuário quando tiver certeza do resultado da 
             * multiplicação deverá clicar no ButtonConfirmar
             * e se o resultado estiver correto exibirá uma 
             * mensagem parabenizando o usuário jogador, caso
             * o contrário uma mensagem motivante.
             */
            if (event.getSource() == ButtonConfirmar) {
                
                if (TextFieldResposta.getText().equals
                        (String.valueOf(Multiplicando * Multiplicador)) ) {
                    
                    JOptionPane.showMessageDialog(MultiplicadorGrafico.this,
                            "Parabéns, Você Acertou!\n" +
                            Multiplicando + " X " + Multiplicador +
                            " = " + Multiplicando * Multiplicador, 
                            "Conseguiu..." ,
                            JOptionPane.INFORMATION_MESSAGE);
                    
                } else {
                    
                    JOptionPane.showMessageDialog(MultiplicadorGrafico.this
                            "Não foi dessa vez..., Tente Novamente",
                            "Perdeu..." ,
                            JOptionPane.INFORMATION_MESSAGE);
                }
            }
            
            
            
            // Exibindo o NívelDeDificuldade.
            LabelVisualizadorDeNível.setText("Nível: " + NívelDeDificuldade);
                
        }
    }
    
    
    
    
     
    public void ObterXY(int NívelDeDificuldade){
        
        // Criando e definindo o valor da variável ValorDeDeslocamentoX.
        int ValorDeDeslocamentoX = 1 + ((NívelDeDificuldade - 1) * 10);
        
        
        /* 
         * O método nextInt é chamado passando por parâmetro 
         * o número (n) 10 e retornará um valor entre 
         * 0 (inclusive) e n-1 = 10 - 1 = 9 (inclusive).
         * O valor retornado será acrescido do ValorDeDeslocamentoX.
         */
        Multiplicando = ValorDeDeslocamentoX + RandomNumber.nextInt(10);
        
        
        int ValorDeDeslocamentoY = (NívelDeDificuldade-1)*10;
        Multiplicador = ValorDeDeslocamentoY  + RandomNumber.nextInt(10);
        
        
        // Exibindo a Questão Multiplicativa.
        LabelPergunta.setText(
                "Quanto é " + Multiplicando + " X " + Multiplicador + " ?"
        );
        
    }
    
    
    
    
    
    public void DesabilitarButton(int NívelDeDificuldade) {
        
        /* 
         * Se o valor da variável NívelDeDificuldade 
         * for 1 o ButtonDiminirNível ficará inativado.
         */
        if (NívelDeDificuldade > NívelDeDificuldadeMínimo)
            ButtonDiminirNível.setEnabled(true);
        else
            ButtonDiminirNível.setEnabled(false);
                
        
        /* 
         * Se o valor da variável NívelDeDificuldade 
         * for 10 o ButtonAumentarNível ficará inativado.
         */
        if (NívelDeDificuldade < NívelDeDificuldadeMáximo)
            ButtonAumentarNível.setEnabled(true);
        else
            ButtonAumentarNível.setEnabled(false);
         
    }
     
    
    
    
    // Método Principal.
    public static void main(String [] args) {
        
        MultiplicadorGrafico Multiplicador = new MultiplicadorGrafico();
        
        // Adicionando propriedades do JFrame.
        Multiplicador.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Multiplicador.setSize(320,200);
        Multiplicador.setVisible(true);
        Multiplicador.setResizable(false);
        Multiplicador.setLocationRelativeTo(null);
        
    }
    
    
    
    
    // Componentes Gráficos utilizados.
    private JPanel PanelNível;
        private JButton ButtonDiminirNível;
        private JButton ButtonAumentarNível;
    
    private JPanel PanelCentral;
        private JLabel  LabelVisualizadorDeNível;
        private JLabel  LabelPergunta; 
        private JTextField TextFieldResposta;
    
    private JButton ButtonPróximo;
    private JButton ButtonConfirmar;
    
    
}




Palavras-Chaves: Exame, Prova, Avaliação, Questionário, Inquisição, Arguição, Argumentação, Nível, Multiplicando, Multiplicador, Números Aleatórios, Componentes Gráficos, JFrame, JPanel, JButton, JLabel, JTextField,  JOptionPane, Matemática, Multiplicação, Operações Numéricas, Mensagens de Alerta, Software Educacional, Interface Gráfica, Tecnologia, Linguagem de Programação, Java.




Artigos relacionados em Java:




Feito no NetBeans-7.1 | Executável



Feito no NetBeans-7.1 | Executável