Code:
import java.awt.*;
import java.awt.event.* ;
import javax.swing.*;
import java.util.Random;
class männchen_Spiel1 extends JFrame implements KeyListener,Runnable
{
int x = 100,y = 150,v=0,x_,y_;
static int zahl=0;
boolean tarn=false;
Color Farbe = new Color(30,200,60);
Random zufall = new Random();
Thread t1;
public static void main (String [] args)
{
männchen_Spiel1 s = new männchen_Spiel1 ();
s.setSize(500,500);
s.setVisible(true);
s.set_v();
WindowQuitter wquit = new WindowQuitter();
s.addWindowListener( wquit );
}
public männchen_Spiel1()
{
super("männchen_Spiel1");
addKeyListener(this);
} public void keyPressed(KeyEvent e){
setBackGround();
switch ( e.getKeyCode() ){
case KeyEvent.VK_1:
{ v=1;
zahl++; break;
}
case KeyEvent.VK_2:
{ v=3;
zahl++; break;
}
case KeyEvent.VK_3:
{ v=5;
zahl++; break;
}
case KeyEvent.VK_4:
{ v=7;
zahl++; break;
}
case KeyEvent.VK_5:
{ v=9;
zahl++; break;
}
case KeyEvent.VK_6:
{ v=11;
zahl++; break;
}
case KeyEvent.VK_7:
{ v=13;
zahl++; break;
}
case KeyEvent.VK_8:
{ v=15;
zahl++; break;
}
case KeyEvent.VK_9:
{ v=17;
zahl++; break;
}
case KeyEvent.VK_0:
{ v=20;
zahl++; break;
}
}
if ( zahl > 0 ) t1.start();
if ( e.getKeyCode()== KeyEvent.VK_LEFT) if(x-v>10) x-=v;
if ( e.getKeyCode()== KeyEvent.VK_RIGHT) if(x+v<490)x+=v;
if ( e.getKeyCode()== KeyEvent.VK_UP) if(y-v>50) y-=v;
if ( e.getKeyCode()== KeyEvent.VK_DOWN) if(y+v<495)y+=v;
if ( e.getKeyCode()== KeyEvent.VK_SPACE){
int r = Math.abs( zufall.nextInt() ) % 256;
int g = Math.abs( zufall.nextInt() ) % 256;
int b = Math.abs( zufall.nextInt() ) % 256;
Farbe = new Color(r,g,b);
System.out.println(Farbe);
}
if ( e.getKeyCode()== KeyEvent.VK_ENTER)
{
if ( tarn )tarn = false;
else tarn = true;
}
if ( !tarn )
drawPerson( x,y,0 ); // enttarnt
if ( e.getKeyCode()== KeyEvent.VK_ESCAPE)
{ this.dispose(); System.exit(0); }
movePerson( x_,y_,0 );
}
public void keyReleased(KeyEvent e)
{
drawPerson( x,y,0 );
}
public void keyTyped(KeyEvent e){}
public void set_v()
{
final Graphics2D g = (Graphics2D) getGraphics();
g.setColor(Color.white);
g.fillRect(0,0,10000,10000);
g.setColor(Color.black);
g.drawString("Wie schnell soll sich das Männchen bewegen?",30,50);
g.drawString("(1 = langsam,2 = etwas schneller,.,.,.,0(=10) = sehr schnell)",30,80);
g.drawString("Leertaste = Farbwechsel(Schild)",30,150);
g.drawString("Tarnung ein/aus = Enter.",30,480);
}
public void setBackGround()
{
final Graphics2D g = (Graphics2D) getGraphics();
g.setColor(Color.white);
g.fillRect(0,0,10000,10000);
}
public void drawPerson( int x, int y, int pause )
{ final Graphics2D g = (Graphics2D) getGraphics();
g.setColor(Farbe); //Farbe des Schildes
g.drawOval(x-12,y-18,23,24); // Schutzschild
g.drawOval(x-12,y-18,24,23); // Schutzschild
g.setColor(Color.black);
g.drawLine(x-3,y+3,x,y); //linkes Bein
g.drawLine(x+3,y+3,x,y); //rechtes Bein
g.drawLine(x,y,x,y-6); //Bauch
g.drawLine(x,y-6,x-4,y-8); //linker Arm
g.drawLine(x,y-6,x+4,y-8); //rechter Arm
g.drawLine(x,y-6,x,y-12); //Hals
g.drawOval(x-2,y-15,4,4);
}
public void movePerson( int x, int y, int pause )
{
final Graphics2D g = (Graphics2D) getGraphics();
g.setColor(Color.white);
drawPerson(x,y,pause);
}
public void run()
{int Kx = Math.abs( zufall.nextInt() ) % 400, // Kugel X
Ky = Math.abs( zufall.nextInt() ) % 400; // Kugel y
final Graphics2D f = (Graphics2D) getGraphics();
while( true )
{
f.setColor(Color.white);
f.drawOval(Kx,Ky,7,7);
if( Kx < x ) Kx++; if( Ky < y ) Ky++;
if( Kx > x ) Kx--; if( Ky > y ) Ky--;
f.setColor(Farbe);
f.drawOval(Kx,Ky,7,7);
}
}
}
class WindowQuitter extends WindowAdapter
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
Hallo an alle Leser,
ich hab hier ein kleines Programm - ein Versuch ein kleines Spiel zu schreiben -
das Männchen kann schon gut vom user bewegt werden, aber der Thread lässt sich im KeyListener nicht starten.
Ich weiß zwar,dass AWT-EventQue-0 auftritt, aber nicht,wann ich den "Kugelthread" sonst starten könnte.
Danke im Voraus