Hallo Leute!
Ich soll für die Schule als Projekt ein "Mensch ärger dich nicht" Spiel programmieren. Und dabei kommt mir gerade ein Problem, auf welches ich einfach keine Lösung finde. Und zwar soll das Programm einfach auf einen Mausklick warten. Also die Funktion "setzenBenutzer()" soll so lange warten, bis der Spieler auf eines seiner Startfelder geklickt hat. Hab schon probiert, das ganze mit einem Thread zu realisieren und ein Thread.join() zu machen, um dann so lange zu warten, bis der Thread abgearbeitet ist, doch das funktionierte nicht so ganz wie es sollte ???:L
Weiß vl jemand wie ich ganz einfach auf einen Mausklick warten kann?
Das Mouse Event
Hier der Thread
Und schließlich die Funktion in der das ganze stattfinden soll. (Natürlich nur mal der Ansatz)
Wäre nett wenn mir jemand weiterhelfen könnte
mfg Thomas
Ich soll für die Schule als Projekt ein "Mensch ärger dich nicht" Spiel programmieren. Und dabei kommt mir gerade ein Problem, auf welches ich einfach keine Lösung finde. Und zwar soll das Programm einfach auf einen Mausklick warten. Also die Funktion "setzenBenutzer()" soll so lange warten, bis der Spieler auf eines seiner Startfelder geklickt hat. Hab schon probiert, das ganze mit einem Thread zu realisieren und ein Thread.join() zu machen, um dann so lange zu warten, bis der Thread abgearbeitet ist, doch das funktionierte nicht so ganz wie es sollte ???:L
Weiß vl jemand wie ich ganz einfach auf einen Mausklick warten kann?
Code:
///Sucht das Startfeld, welches gedrückt wurde und gibt dieses zurück
public Feld gedrFeldStart()
{
ListIterator<Feld> felder = sf.startfelder.listIterator(sf.startfelder.size());
while (felder.hasPrevious())
{
feld = felder.previous();
mx = feld.xcord + 15;
my = feld.ycord + 15;
dx = x - mx;
dy = y - my;
c = (dx * dx) + (dy * dy);
if (c <= (15 * 15))
{
return feld;
}
}
return null;
}
Das Mouse Event
Code:
public void mouseClicked(MouseEvent e)
{
x = e.getX();
y = e.getY();
}
Hier der Thread
Code:
@Override
public void run()
{
Feld testfeld;
while(true)
{
testfeld = gedrFeldStart();
if (testfeld != null)
{
if (testfeld.belegt == true)
{
gedrFeld = testfeld;
break;
}
}
}
}
Und schließlich die Funktion in der das ganze stattfinden soll. (Natürlich nur mal der Ansatz)
Code:
public void setzenBenutzer()
{
int wuerfelKI = rand.nextInt(6) + 1;
wuerfelKI=6; //Zum Testen
int versucheBen = 0;
area.append("Sie haben eine " + wuerfelKI + " gewürfelt\n");
if (sf.startfelder.get(aktspielerindex * 4).belegt == true && sf.startfelder.get(aktspielerindex * 4 + 1).belegt == true &&
sf.startfelder.get(aktspielerindex * 4 + 2).belegt == true && sf.startfelder.get(aktspielerindex * 4 + 3).belegt == true) //Sind alle Startfelder belegt?
{
if (wuerfelKI == 6)
{
spieler.start();
try
{
spieler.join();
}
catch (InterruptedException ex)
{
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
versucheBen++;
for (int i = 0; i < 4; i++)
{
if ((sf.startfelder.get(aktspielerindex * 4 + i) == gedrFeld) && (sf.startfelder.get(aktspielerindex * 4 + i).belegt == true))
{
sf.startfelder.get(aktspielerindex * 4 + i).belegt = false;
sf.startfelder.get(aktspielerindex * 4 + i).color = Color.YELLOW;
if (sf.felder.get(aktspielerindex * 10).belegt == false)
{
sf.felder.get(aktspielerindex * 10).belegt = true;
sf.felder.get(aktspielerindex * 10).color = spielerfarben[aktspielerindex];
repaint();
}
}
}
}
}
}
Wäre nett wenn mir jemand weiterhelfen könnte
mfg Thomas