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