# Kompliziertes Problem!



## Clemenzo (9. Aug 2007)

Guten Tag, ich möchte ein kleines Spiel mit Java-Applet programmieren, in welchem sich Kästchen von alleineüber ein Gitter bewegen und der SPieler während dessen ein Kästchen selbst steuern kann!

Ich bekomme es jedoch leider nicht hin, dass sich die Kästchen von alleine hin und her bewegen und man gleichzeitig ein Kästchen steuern kann! Wie kann man so etwas programmieren? Ich habe mit einer while-schleife versucht, dass sich die Kästchen alle 2 sec in eine Richtung bewegen, hat geklappt, aber ich konnte dann wiederum nicht mein Kästchen während dessen steuern..

Ich schreib hier mal meinen Quellcode hinein, auch wenn er nicht gut geschrieben ist, ich hoffe ihr versteht auch ohne den Quellcode mein problem. Der Quellcode ist nicht gerade sehr durchschaubar!:



import java.awt.*;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.Random;
import java.lang.*;
import java.io.*;
import java.text.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class HalloWWW extends Applet 
{
	Button links, rechts, oben, unten ;
	Label      l_satz;
  	TextField t_satz;
 long start = System.currentTimeMillis();
	long t=3000;

	Rechteck r = new Rechteck();
	int li=1, re=1, ob=1, un=1 ;
	int fi=1,fe=1,fo=1,fu=1;
	int go=1;
	public void paint(Graphics gc)
	{

			for(int i=1;i<30;i++)
			{
			gc.drawLine(1,30*i,500,30*i);
			gc.drawLine(30*i,30,30*i,500);
			}
			gc.setColor(Color.red);
			gc.fillRect(90,60,30,30);
			gc.setColor(Color.green);
			gc.fillRect(120,90,30,30);

		r.zeichnen(gc, li,re,ob,un);
		r.zeichnen(gc,fi,fe,fo,fu);


	}
	class Spielen implements ActionListener
 	{     



	public void actionPerformed(ActionEvent e)
    {

			if((System.currentTimeMillis()-start) >t)
			{
				li++;
				t+=2000;
				repaint();
			}


			String a;
			a = e.getActionCommand();


			if(a.equals("links"))
			{
				li--;



				if((li==3 & re==2 &  ob==1 & un==1)|(li==4 & re==3 &ob==1 & un==1))
				{
					t_satz.setText("DONG");	
					li++;

				repaint();
				}
				else
				repaint();

			}
				if(a.equals("rechts"))
			{
				li++;

					if(li==3 & re==2 &  ob==1 & un==1|(li==4 & re==3 &ob==1 & un==1))
				{
					t_satz.setText("Doing");
					li--;
				repaint();
				}
				else
				repaint();

			}
				if(a.equals("oben"))
			{
				re--;

					if(li==3 & re==2 &  ob==1 & un==1|(li==4 & re==3 &ob==1 & un==1))
				{
					t_satz.setText("Bautz!");
					re++;
				repaint();
				}
				else
				repaint();

			}
				if(a.equals("unten"))
			{
				re++;


					if(li==3 & re==2 &  ob==1 & un==1|(li==4 & re==3 &ob==1 & un==1))
				{
					t_satz.setText("KLONG");
					re--;
				repaint();
				}
				else
				repaint();


		}
    }
	}
	public void init()

  {

  	links = new Button("links");
  	rechts = new Button("rechts");
  	oben = new Button ("oben");
  	unten = new Button ("unten");

  	l_satz = new Label("Gesucht:");
  	t_satz= new TextField(10);

  	setLayout(new FlowLayout(FlowLayout.LEFT));

  	add(links);
  	add(oben);
  	add(unten);
  	add(rechts);


  	add(l_satz);
  	add(t_satz);

  	links.addActionListener(new Spielen());
  	rechts.addActionListener(new Spielen());
  	oben.addActionListener(new Spielen());
  	unten.addActionListener(new Spielen());
  }
}



class Rechteck
{	
	private int li,re,ob,un ;

	public Rechteck()
	{
		int li=1;
		int re=1;
		int ob=1;
		int un=1;
	}

	public void zeichnen(Graphics g, int li, int re, int ob, int un )
        {
        	g.setColor(Color.black);
            g.fillRect(30*li,30*re,30*ob,30*un);


        }
}


----------



## tuxedo (9. Aug 2007)

Argh... kannst du den code mitte mit den code-tags formatieren? Das liest sich so schlecht wenn alles nach "einheitsbrei" aussieht.


----------



## doctus (9. Aug 2007)

könntest du bitte code-tags setzen, dann können wir uns den quellcode besser durchlesen.

lg doctus


----------



## Hilefoks (9. Aug 2007)

Ich hab mir deinen Code auch nicht wirklich durchgelesen - aber mir ist dennoch aufgefallen das du keine Threads benutzt. Also: verwende Threads!

MfG,
Hilefoks


----------



## Guest (9. Aug 2007)

```
mport java.awt.*;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.Random;
import java.lang.*;
import java.io.*;
import java.text.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class HalloWWW extends Applet
{
Button links, rechts, oben, unten ;
Label l_satz;
TextField t_satz;
long start = System.currentTimeMillis();
long t=3000;

Rechteck r = new Rechteck();
int li=1, re=1, ob=1, un=1 ;
int fi=1,fe=1,fo=1,fu=1;
int go=1;
public void paint(Graphics gc)
{

for(int i=1;i<30;i++)
{
gc.drawLine(1,30*i,500,30*i);
gc.drawLine(30*i,30,30*i,500);
}
gc.setColor(Color.red);
gc.fillRect(90,60,30,30);
gc.setColor(Color.green);
gc.fillRect(120,90,30,30);

r.zeichnen(gc, li,re,ob,un);
r.zeichnen(gc,fi,fe,fo,fu);


}
class Spielen implements ActionListener
{



public void actionPerformed(ActionEvent e)
{

if((System.currentTimeMillis()-start) >t)
{
li++;
t+=2000;
repaint();
}


String a;
a = e.getActionCommand();


if(a.equals("links"))
{
li--;



if((li==3 & re==2 & ob==1 & un==1)|(li==4 & re==3 &ob==1 & un==1))
{
t_satz.setText("DONG");
li++;

repaint();
}
else
repaint();

}
if(a.equals("rechts"))
{
li++;

if(li==3 & re==2 & ob==1 & un==1|(li==4 & re==3 &ob==1 & un==1))
{
t_satz.setText("Doing");
li--;
repaint();
}
else
repaint();

}
if(a.equals("oben"))
{
re--;

if(li==3 & re==2 & ob==1 & un==1|(li==4 & re==3 &ob==1 & un==1))
{
t_satz.setText("Bautz!");
re++;
repaint();
}
else
repaint();

}
if(a.equals("unten"))
{
re++;


if(li==3 & re==2 & ob==1 & un==1|(li==4 & re==3 &ob==1 & un==1))
{
t_satz.setText("KLONG");
re--;
repaint();
}
else
repaint();


}
}
}
public void init()

{

links = new Button("links");
rechts = new Button("rechts");
oben = new Button ("oben");
unten = new Button ("unten");

l_satz = new Label("Gesucht:");
t_satz= new TextField(10);

setLayout(new FlowLayout(FlowLayout.LEFT));

add(links);
add(oben);
add(unten);
add(rechts);


add(l_satz);
add(t_satz);

links.addActionListener(new Spielen());
rechts.addActionListener(new Spielen());
oben.addActionListener(new Spielen());
unten.addActionListener(new Spielen());
}
}



class Rechteck
{
private int li,re,ob,un ;

public Rechteck()
{
int li=1;
int re=1;
int ob=1;
int un=1;
}

public void zeichnen(Graphics g, int li, int re, int ob, int un )
{
g.setColor(Color.black);
g.fillRect(30*li,30*re,30*ob,30*un);


}
}
```


----------



## Leroy42 (9. Aug 2007)

code-tags hast du ja schonmal benutzt,
jetzt nur noch vernünftig einrücken.


----------



## clemenz (9. Aug 2007)

aah..sry ist immer noch ziemlich unübersichtlich..vergesst den code! Nennt mir nur ein paar kreative Lösungsvorschläge, wie sich Kästchen auf ein Gitternetz selbständig und unabhängig hin und her bewegen können, während man selbst ein kästchen steuern kann!


----------



## Leroy42 (9. Aug 2007)

Wurde schon geschrieben.

Die sich selbst bewegenden Kästchen durch einen eigenen Thread steuern lassen


----------



## Quaxli (9. Aug 2007)

Schau Dir mal das Tutorial an


----------

