Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Nillew

#1
Java / Código do jogo Invasores em Java!!
08 de September , 2009, 10:38:40 AM
Como primeira contribuição envio o código do joguinho classico Invasores em java...

muito bacana...

/*

Invasores - videogame
Copyright (C) 2009 Ricardo Ueda Karpischek

*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.Timer;

/*
    nossa classe principal herda tudo da classe Frame
*/
public class invasores extends Frame implements ActionListener, KeyListener {
    public static final long serialVersionUID = 1;

    // posicao da nave, da bala e do alien
    int pos, novapos, balax, balay, novabalay, apos, anovapos, adir;

    // timer, flag primeira chamada, dimensoes da janela em pixels
    Timer meutimer;
    boolean pc = true, pronto = false;
    int altura = 600, largura = 400;

    // construtor
    public invasores() {

        // construtor da superclasse
        super("invasores!");

        // propriedades da janela
        setSize(largura,altura); setVisible(true); setResizable(false);

        // inicializa posicao da nave, da bala e do alien
        pos = 310;  novapos = 300;  balax = -1;
        apos = 301; anovapos = 300; adir = -1;

        // atendimento do teclado
        addKeyListener(this);

        // timer de 40ms e seu atendimento
        meutimer = new javax.swing.Timer(40, null);
        meutimer.addActionListener(this); meutimer.setActionCommand("timer"); meutimer.start();
    }

    // quando a JVM chama este metodo ja esta tudo pronto pra desenhar
    public void addNotify() {
        super.addNotify();
        pronto = true;
    }

    // desenha nave
    public void desenharNave(Graphics g) {
        Polygon p = new Polygon();

        /*      xxxx
                x  x
             xxxx  xxxx
             x        x
             xxxxxxxxxx
        */
        p.addPoint(pos,altura-20);    p.addPoint(pos+30,altura-20); p.addPoint(pos+30,altura-30);
        p.addPoint(pos+20,altura-30); p.addPoint(pos+20,altura-40); p.addPoint(pos+10,altura-40);
        p.addPoint(pos+10,altura-30); p.addPoint(pos,altura-30);
        g.fillPolygon(p);
    }

    // desenha alien
    public void desenharAlien(Graphics g) {
        Polygon p = new Polygon();

        /*
                xxxx
             xxxx  xxxx
             x        x
             xxxxxxxxxx
                x  x
              xx    xxx
        */
        p.addPoint(apos   ,100);
        p.addPoint(apos+9 ,100);
        p.addPoint(apos+5 ,104);
        p.addPoint(apos+2 ,104);
        p.addPoint(apos+2 ,106);
        p.addPoint(apos+7 ,106);
        p.addPoint(apos+11,100);
        p.addPoint(apos+19,100);
        p.addPoint(apos+23,106);
        p.addPoint(apos+28,106);
        p.addPoint(apos+28,104);
        p.addPoint(apos+25,104);
        p.addPoint(apos+21,100);
        p.addPoint(apos+30,100);
        p.addPoint(apos+30, 90);
        p.addPoint(apos+20, 90);
        p.addPoint(apos+20, 85);
        p.addPoint(apos+10, 85);
        p.addPoint(apos+10, 90);
        p.addPoint(apos,    90);
        g.fillPolygon(p);
    }

    // redesenha a janela
    public void paint(Graphics g) {

        // primeira chamada - pinta o fundo
        if (pc) {
            g.setColor(Color.white);
            g.fillRect(0,0,largura,altura);
            pc = false; return;
        }

        // redesenha nave
        if (novapos != pos) {
            g.setColor(Color.white); desenharNave(g);
            pos = novapos;
            g.setColor(Color.black); desenharNave(g);
        }

        // redesenha alien
        if (anovapos != apos) {
            g.setColor(Color.white); desenharAlien(g);
            apos = anovapos;
            g.setColor(Color.black); desenharAlien(g);
        }

        // apaga e redesenha a bala, se ela ainda nao sumiu no alto da tela
        if ((balax >= 0) && (novabalay != balay)) {
            g.setColor(Color.white); g.fillRect(balax,balay,5,5);
            if (balay < 30)
                balax = -1;
            else {
                balay = novabalay;
                g.setColor(Color.black); g.fillRect(balax,balay,5,5);
            }
        }
    }

    // alternativa sem parametros para paint
    public void repaint() {
        paint(this.getGraphics());
    }

    // atendimento de teclado
    public void keyPressed(KeyEvent e) {

        // codigo da tecla
        int c = e.getKeyCode();

        // seta para esquerda
        if ((c == 37) && (pos > 10))
            novapos = pos - 10;

        // seta para direita
        else if ((c == 39) && (pos < (largura-40)))
            novapos = pos+10;

        // barra de espaco - dispara se ja nao houver bala
        else if ((c == 32) && (balax < 0)) {
            balax = pos + 13;
            balay = novabalay = altura-50;
        }

        // redesenha a janela
        if (pronto) repaint();
    }

    // outros metodos da interface KeyListener
    public void keyReleased(KeyEvent e) {}
    public void keyTyped(KeyEvent e) {}

    // atendimento dos eventos de acao
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().compareTo("timer") == 0) {

            // corrige posicao da bala
            if (balax >= 0) novabalay = balay - 10;

            // corrige posicao do alien
            if (adir == -1)
                if (apos > 10)
                    anovapos = apos - 1;
                else {
                    adir = 1; anovapos = apos + 1;
                }
            else
                if (apos < (largura-40))
                    anovapos = anovapos + 1;
                else {
                    adir = -1; anovapos = apos - 1;
                }

            // testa se a bala atingiu o alien
            if ((balax>=0) && (anovapos<=balax) && (balax<=anovapos+30) && (85<=novabalay) && (novabalay<=100)) {
                novabalay = 0; System.out.println("atingiu o alien");
            }

            // redesenha a janela
            if (pronto) repaint();
        }
    }

    // instancia a classe para comecar o jogo
    public static void main(String args[]) {
        new invasores();
    }
}


Abraços...
#2
Windows XP / Re: Criando icone "Mostrar area de trabalho"
03 de September , 2009, 10:53:37 AM
Valeww, ótima dica!!!!  8)