Zunächst wieder die Hauptklasse mit der MAIN (UFO)
package ufo;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Ufo extends JFrame{
Container c;
Zeichenbrett z;
public Ufo(){
super("Ufo");
c = getContentPane();
z = new Zeichenbrett(); //Alles was passiert, passiert im Zeichenbrett,
// ist ne saubere Lösung oder?
z.setFocusable(true);
c.add(z);
setTitle("Ufo");
setSize(830,700);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Ufo();
}
}
Das eigentliche Programm.
package ufo;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
public class Zeichenbrett extends JPanel {
static int x = 100;
static int y = 100;
static double ax = 0;
static double ay = 0;
Zeichenbrett z = this;
Zeichenbrett(){
super();
this.addKeyListener(new TastaturEingabe());
Thread g = new Thread(new Gravity());
g.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
zeichneUfo(g, x, y);
}
void zeichneUfo(Graphics g, int xUfo, int yUfo)
{
g.drawRect(xUfo,yUfo,30,15);
g.drawLine(xUfo+15,yUfo-10,xUfo+15,yUfo);
g.drawLine(xUfo+10,yUfo+15,xUfo+5,yUfo+25);
g.drawLine(xUfo+20,yUfo+15,xUfo+25,yUfo+25);
g.drawLine(0,625,800,625);
}
class TastaturEingabe implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
{
ax=ax+10;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT)
{
ax=ax-10;
}
if (e.getKeyCode() == KeyEvent.VK_UP)
{
ay=ay-1;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
ay=ay+1;
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
{
ax=0;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT)
{
ax=0;
}
if (e.getKeyCode() == KeyEvent.VK_UP)
{
ay=0;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
ay=0;
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
class Gravity implements Runnable{
@Override
public void run() {
double yk = (double)y;
double xk = (double)x;
double vy = 0 ;
double vx = 0 ;
long t;
while (y<1000) {
t = System.currentTimeMillis();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t = System.currentTimeMillis()-t;
double ayk = 3 + ay;
vy += ayk*0.005*t;
yk+=(vy*t*0.005);
vx += ax*0.005*t;
xk+=(vx*t*0.005);
if (yk>600) {
vy=-vy/1.5;
yk=599;
vx=-vx/2;
}
if (xk>800) xk=0;
if (xk<0) yk=800;
y = (int)yk;
x = (int)xk;
repaint();
}
}
}
}