Code:
import java.awt.*;
import java.awt.event.* ;
import javax.swing.*;
import java.util.Random;
class männchen_Spiel1 extends JFrame implements KeyListener,Runnable
{
static int x = 100,y = 150,v=0,Kv=0,x_,y_,zahl=0;
final long START_TIME=System.currentTimeMillis();
boolean tarn=false, eins=true,end=false;
static Random zufall = new Random();
Thread t1;
static int Kx = 20+Math.abs( zufall.nextInt() ) % 400, // Kugel X
Ky = 20+Math.abs( zufall.nextInt() ) % 400; // Kugel y
//**************************************************************************************************
public static void main (String [] args)
{
WindowQuitter wquit = new WindowQuitter();
männchen_Spiel1 s = new männchen_Spiel1 ();
s.setSize(500,500);
s.setVisible(true);
s.set_v();
s.addWindowListener( wquit );
}
//**************************************************************************************************
public männchen_Spiel1()
{
super("Männchen-Spiel");
addKeyListener(this);
}
//**************************************************************************************************
public void keyPressed(KeyEvent e)
{ if ( !end )
{
repaintPerson();
switch ( e.getKeyCode() ){
case KeyEvent.VK_1:
{ v=1;
zahl++; break;
}
case KeyEvent.VK_2:
{ v=2;
zahl++; break;
}
case KeyEvent.VK_3:
{ v=3;
zahl++; break;
}
case KeyEvent.VK_4:
{ v=4;
zahl++; break;
}
case KeyEvent.VK_5:
{ v=5;
zahl++; break;
}
case KeyEvent.VK_6:
{ v=6;
zahl++; break;
}
case KeyEvent.VK_7:
{ v=7;
zahl++; break;
}
case KeyEvent.VK_8:
{ v=8;
zahl++; break;
}
case KeyEvent.VK_9:
{ v=9;
zahl++; break;
}
case KeyEvent.VK_0:
{ v=10;
zahl++; break;
}
}
if ( zahl > 0 ){
Kv=v/2;
// Thread erzeugen, falls noch nicht vorhanden
if ( t1 == null) t1 = new Thread( this);
if (eins)
{
setBackGround();
t1.start();
eins = false;
}
}
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_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 );
}else
{
this.dispose();
System.exit( 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("Schwierigkeitsgrad:",30,50);
g.drawString("1 = schwer,2 = etwas leichter,.,.,.,0(=10) = sehr leicht",30,80);
g.drawString("Wenn sie die Kugel erwischt, wird das Spiel beendet.",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 repaintPerson()
{
final Graphics2D g = (Graphics2D) getGraphics();
g.setColor(Color.white);
g.fillOval(x-17,y-24,35,35);
g.drawString("Geschwindigkeit: "+v,100,100);
}
//**************************************************************************************************
public void drawPerson( int x, int y, int pause )
{ final Graphics2D g = (Graphics2D) getGraphics();
g.setColor(Color.green);
g.drawOval(x-12,y-18,24,24); // 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);
g.setColor(Color.black);
g.drawString("Geschwindigkeit: "+v,100,100);
}
//**************************************************************************************************
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 Zx = 20+Math.abs( zufall.nextInt() ) % 400,
Zy = 20+Math.abs( zufall.nextInt() ) % 400;
final Graphics2D f = (Graphics2D) getGraphics();
while( !nah() )
{f.setColor(Color.white);
f.fillOval(Kx,Ky,24,24);
if ( tarn )
{ while ( Kx != Zx || Ky != Zy )
{
if( Kx < Zx ) Kx++;
if( Ky < Zy ) Ky++;
if( Kx > Zx ) Kx--;
if( Ky > Zy ) Ky--;
try{ Thread.sleep(20);}catch(Exception err){System.out.println(err);}
}
}
else
{ if( Kx < x-12 ) Kx+=Kv; if( Ky < y-18 ) Ky+=Kv;
if( Kx > x-12 ) Kx-=Kv; if( Ky > y-18 ) Ky-=Kv;
}
f.setColor(Color.red);
f.fillOval(Kx,Ky,24,24);
try{ Thread.sleep(20);}catch(Exception err){System.out.println(err);}
}
loose();
}
//**************************************************************************************************
public void loose()
{
final long END_TIME=System.currentTimeMillis();
repaint();
final Graphics2D g = (Graphics2D) getGraphics();
try{ Thread.sleep(200);}catch(Exception err){System.out.println(err);}
g.setColor(Color.red.darker());
Font font = getFont();
g.setFont(new Font( "FELIX TITLING",font.getStyle(),font.getSize() + 7));
g.drawString((END_TIME-START_TIME)/1000+" Sekunden durchgehalten !",70,170);
end=true;
try{ Thread.sleep(2000);}catch(Exception err){System.out.println(err);}
this.dispose();
System.exit( 0 );
}
//**************************************************************************************************
public static int[][][][][] getMännchen()
{
int männchen[][][][][] = new int[24][24][24][24][2]; //jede Seite + x & y
for(int i=0,j=0,k=0,X=x-12,Y=y-18,in[]= new int[2]; i < 25 && j == 1 && k == 3; )
{
if( i == 24 && j == 1)
{
if( k < 3 )k++;
i=0;
if( j == 1 )j=0; else j++;
}
else{
switch(k)
{
case 0:
{
männchen[i][0][0][0][j] = in[j];
if( X != x+24 ) X++;
break;
}
case 1:
{
männchen[0][i][0][0][j] = in[j];
if( Y != y+24 ) Y++;
break;
}
case 2:
{
männchen[0][0][i][0][j] = in[j];
if( X != x-24 ) X--;
break;
}
case 3:
{
männchen[0][0][0][i][j] = in[j];
if( Y != y-24 ) Y--;
break;
}
}
in[0] = X;
in[1] = Y;
i++;
}
}
return männchen;
}
//**************************************************************************************************
public static int[][][][][] getKugel()
{
int kugel [][][][][] = new int[24][24][24][24][2]; //jede Seite + x & y;
for(int i=0,j=0,k=0,X=Kx-12,Y=Ky-18,in[]= new int[2]; i < 25 && j == 1 && k == 3; )
{
if( i == 24 && j == 1)
{
if( k < 3 )k++;
i=0;
if( j == 1 )j = 0; else j++;
}
else{
switch(k)
{
case 0:
{
kugel[i][0][0][0][j] = in[j];
if( X != Kx+24 ) X++;
break;
}
case 1:
{
kugel[0][i][0][0][j] = in[j];
if( Y != Ky+24 ) Y++;
break;
}
case 2:
{
kugel[0][0][i][0][j] = in[j];
if( X != Kx-24 ) X--;
break;
}
case 3:
{
kugel[0][0][0][i][j] = in[j];
if( Y != Ky-24 ) Y--;
break;
}
}
in[0] = X;
in[1] = Y;
i++;
}
}
return kugel;
}
//**************************************************************************************************
public static boolean nah()
{
int männchen[][][][][] = getMännchen();
int kugel [][][][][] = getKugel();
boolean kontakt=false;
for(int i=0, k=0; i < 25 && k == 3; ) // männchen-schleife
{
for(int i2=0, k2=0; i2 < 25 && k2 == 3; ) // kugel-schleife
{
switch(k) // Der Vergleich
{
case 0:
{
for( int j=0; j < 2; j++ ){
if( männchen[i][0][0][0][j] == kugel[i2][0][0][0][j] )
kontakt = true; }
break;
}
case 1:
{
for( int j=0; j < 2; j++ ){
if( männchen[0][i][0][0][j] == kugel[0][i2][0][0][j] )
kontakt = true; }
break;
}
case 2:
{
for( int j=0; j < 2; j++ ){
if( männchen[0][0][i][0][j] == kugel[0][0][i2][0][j] )
kontakt = true; }
break;
}
case 3:
{
for( int j=0; j < 2; j++ ){
if( männchen[0][0][0][i][j] == kugel[0][0][0][i2][j] )
kontakt = true; }
break;
}
}
if(kontakt)break;
if( i2 == 24 )
{
if( k2 < 3 )k2++;
i2=0;
}
}
if(kontakt)break;
if( i == 24 )
{
if( k < 3 )k++;
i=0;
}
}
System.out.println(kontakt); // Test, gibt jedoch immer "false"aus
return kontakt;
}
}
//**************************************************************************************************
//**************************************************************************************************
class WindowQuitter extends WindowAdapter
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
Hallo an alle,
ich hab hier ein kleines Problemchen:
eigentlich sollte man das Männchen bewegen können, das von der Kugel gejagt wird.
Das Spiel sollte vorbei sein, sobald die Kugel das Männchen berührt.
Zum vereinfachen habe ich nun versucht mit einem 5-dimensionalen Array -für jede Seite einen und jeweils x & y-
ein Quadrat um das Männchen und die Kugel zu "ziehen", aber irgendwie klappts nicht so ganz.
Außerdem ist das Spiel durch die drei Methoden getMännchen(), getKugel() und nah() extrem verlangsamt und es flackert.
Wie kann ich das beheben?
Danke im Voraus