hallo zusammen, ich bin derzeit zwecks "learning by doing" dabei ein kleines Spiel zu programmieren, es soll eine kleine Adaptierung des Brettspiels Risiko werden.
Der Verlauf: zu Spielbeginn wird die Reihenfolge ausgewürfelt und jedesmal wenn ein Land angegriffen wird wird auch hier der Kampverlauf ausgewürfelt. Nach jedem Wurf (sei es beim Reihenfolge auswürfeln oder beim Angreifen) sollen die Würfelaugen dargestellt werden (derzeit noch als Text in der TextArea, später vielleicht mal noch grafisch) und danach soll eine kurze Pause erfolgen (2 Sekunden oder so) damit der Spieler kurz sehen kann was gewürfelt wurde.
Also gibt es bei einem Angriff 2 Ausgaben (Wurf des Angreifers und Wurf des Verteidigers) und nach jeder eine kurze Pause. Diese Pause habe ich in die statische Methode wuerfeln(...) gepackt da ich keine weiteren Threads erstellt habe sollte sich dieses Thread.sleep() ja auf den main Thread beziehen und somit mein komplettes Programm 2 Sekunden schlafen gelegt werden. Das funktioniert auch.. FAST
wenn ihr es euch mal anschauen wollt:
http://dunklegarde.de.s332.evanzo-server.de/java/Risk.jar
Nach dem Reihenfolge auswürfeln einfach mal ein eigenes Land (gründ markiert) anklicken und ein paar Armeen drauf stellen (mit den Buttons) das Land markiert lassen und ein feindliches Land anklicken, dann öffnet sich ein Fenster wo ihr bestimmen könnt mit wie vielen Armeen angegriffen werden soll, nach einem Klick auf "Angriff" startet das auswürfeln und hier treten jetzt Grafikfehler oben in der Textarea auf. Das merkwürdige an der Sache ist, dass die Anzeige beim auswürfeln der Reihenfolge einwandfrei funktioniert, nur beim angreifen nicht, vielleicht liegt das aber auch nur an der noch nicht gefüllten TextArea...?
Die Methode die das Würfelergebnis anzeigt, ihr wird ein array mit den gewürfelten Zahlen übergeben (für den Angreifer gibt es maximal 3 Würfel und für den Verteidiger maximal 2 laut spielregeln)
Die Methode addMessage:
Wenn mir irgendjemand sagen kann woran das liegt und wie ich den Fehler evtl. beheben kann, wäre ich sehr dankbar!
Gruß Matthias
Der Verlauf: zu Spielbeginn wird die Reihenfolge ausgewürfelt und jedesmal wenn ein Land angegriffen wird wird auch hier der Kampverlauf ausgewürfelt. Nach jedem Wurf (sei es beim Reihenfolge auswürfeln oder beim Angreifen) sollen die Würfelaugen dargestellt werden (derzeit noch als Text in der TextArea, später vielleicht mal noch grafisch) und danach soll eine kurze Pause erfolgen (2 Sekunden oder so) damit der Spieler kurz sehen kann was gewürfelt wurde.
Also gibt es bei einem Angriff 2 Ausgaben (Wurf des Angreifers und Wurf des Verteidigers) und nach jeder eine kurze Pause. Diese Pause habe ich in die statische Methode wuerfeln(...) gepackt da ich keine weiteren Threads erstellt habe sollte sich dieses Thread.sleep() ja auf den main Thread beziehen und somit mein komplettes Programm 2 Sekunden schlafen gelegt werden. Das funktioniert auch.. FAST
http://dunklegarde.de.s332.evanzo-server.de/java/Risk.jar
Nach dem Reihenfolge auswürfeln einfach mal ein eigenes Land (gründ markiert) anklicken und ein paar Armeen drauf stellen (mit den Buttons) das Land markiert lassen und ein feindliches Land anklicken, dann öffnet sich ein Fenster wo ihr bestimmen könnt mit wie vielen Armeen angegriffen werden soll, nach einem Klick auf "Angriff" startet das auswürfeln und hier treten jetzt Grafikfehler oben in der Textarea auf. Das merkwürdige an der Sache ist, dass die Anzeige beim auswürfeln der Reihenfolge einwandfrei funktioniert, nur beim angreifen nicht, vielleicht liegt das aber auch nur an der noch nicht gefüllten TextArea...?
Die Methode die das Würfelergebnis anzeigt, ihr wird ein array mit den gewürfelten Zahlen übergeben (für den Angreifer gibt es maximal 3 Würfel und für den Verteidiger maximal 2 laut spielregeln)
Code:
public static void zeigeWuerfelAn(Spieler spieler, int[] wuerfelAugen)
{
StringBuffer wuerfel = new StringBuffer();
for(int i=0;i<wuerfelAugen.length;i++)
{
wuerfel.append(wuerfelAugen[i]+" ");
}
SpielZugPanel.addMessage(spieler.getName()+" hat gewürfelt: "+wuerfel.toString());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Die Methode addMessage:
Code:
public static void addMessage(String neueMessage)
{
//Die MessageList ist eine LinkedList in der alle Ausgaben als Strings gespeichert werden
messageList.addFirst(neueMessage);
//hier wird der Textarea ans Ende der neue String angehängt
messageTextArea.append("\n"+neueMessage);
//die variable textHoehe wird bei initialisierung des Programms aus einem Fontmetric errechnet.
int pos = (int)messageTextArea.getLineCount()>4?(int)messageTextArea.getLineCount()*textHoehe:0;
//Hier wird dem Textpane (messagePane) die neue Anzeigeposition angegeben (das Scrollpane soll immer den untersten Teil der Textarea anzeigen)
messagePane.getViewport().setViewPosition(new Point(0,pos));
}
Wenn mir irgendjemand sagen kann woran das liegt und wie ich den Fehler evtl. beheben kann, wäre ich sehr dankbar!
Gruß Matthias