2016-06-01 23 views
0

Ich habe Probleme beim Einrichten eines Computers vs Computer-Schleife in meinem Java-Spiel-Applet. Ich habe schon seit 3 ​​Tagen versucht, effektiv eine Verzögerung von einer Sekunde zwischen den beiden Computer-Spieler-Runden hinzuzufügen, während ich auch das Board neu streiche. Ich habe versucht/catch/thread.sleep und warte und ein paar andere Tricks, aber keine waren erfolgreich. Im aktuellen Zustand des Programms, wenn ein Computer-gegen-Computer-Spiel initiiert wird, friert das Programm für die Dauer des Spiels ein (mit einer Sekunde Verzögerung zwischen den Zügen) und zeigt dann das letzte Brett an, wenn das Spiel beendet ist. Wie kann ich es so machen, dass das Programm nach jedem Zug neu gezeichnet/verzögert wird? Von der ganzen Lesung, die ich getan habe, Ich bin mir bewusst, dass die folgende Implementierung nicht funktioniert aber mein Problem ist, ich kann nicht herausfinden, wie es anders geht. Vielen Dank im Voraus!Computer Vs Computer Schleife Java Applet

Der folgende Code ist in meinem actionPerformed Listener-Methode

if (event.getSource() == startAIvAI) 
    { 
     drawing.clear(); 

     while (drawing.hasWon() == -1 && !drawing.isFull()) 
     { 

      go1(); 
      repaint(); 

      try { 
       Thread.sleep(1000); 
      } catch (Exception e) {} 

      go2(); 
      repaint(); 
      try { 
       Thread.sleep(1000); 
      } catch (Exception e) {} 

     } 


    } 
+0

1) Blockieren Sie nicht die EDT (Event Dispatch Thread). Die GUI wird "eingefroren", wenn das passiert. Weitere Informationen und das Update finden Sie unter [Parallelität in Swing] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/). 2) Warum ein Applet codieren? Wenn es aufgrund der Angabe des Lehrers geschieht, verweisen Sie bitte auf [Warum CS-Lehrer ** aufhören sollten ** Java-Applets zu unterrichten] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop-teaching-Java-Applets /). .. –

+0

.. 3) Siehe [Java Plugin-Unterstützung veraltet] (http://www.gizmodo.com.au/2016/01/rest-in-hell-java-plug-in/) und [Wechsel zu einem Plugin -Free Web] (https://blogs.oracle.com/java-platform-group/entry/moving_to_a_plugin_free). 4) Für eine bessere Hilfe sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. –

Antwort

1

Wenn Sie Thread.sleep(1000); aufrufen, welche Themen denken Sie, Sie pausieren? Wahrscheinlich ist das eine Behandlungsereignis bei gegebenem Code mit if (event.getSource() == startAIvAI) gestartet.

Sie sollten dies zu verstehen, lesen, was zu tun ist: Sleep method locks my GUI

+0

Danke für Ihren Kommentar, aber das hat mir nicht geholfen. Ich habe gerade zwei Implementationen mit diesem SwingUtilities-Aufruf ausprobiert. Später habe ich die GUI für die Dauer des Spiels eingefroren – e6r339b