Código do jogo Invasores em Java!!

Started by Nillew, 08 de September , 2009, 10:38:40 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Nillew

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...