Frage zur Spielsteuerung bei einem rundenbasiertes Spiel

Status
Nicht offen für weitere Antworten.
B

Bernd72

Gast
Hallo zusammen,

habe eine Frage bei der ich einfach nicht weiter komme:
Ich habe ein rundenbasiertes Spiel mit Netzwerkschnittstelle und Computerspieler programmiert.
Soweit läuft eigentlich alles, aber ich habe es folgendermaßen gelöst:
Es läuft eine while (true)-Schleife, die ständig überprüft, ob ein Computerspieler an der Reihe ist um die entsprechende Methode zu starten. Dadurch wird der Prozessor stark belastet auch wenn ein menschlicher Spieler an der Reihe ist, der überlegt.
Hatte vorher die Lösung, das am Ende eines Zuges der nächste Zug aufgerufen wird, das gibt aber eine Verschachtelung, die nicht gewollt ist.
Beim menschlichen Spieler kann man prima mit einem ActionListener arbeiten, der auf Mausklick reagiert. Am liebste wäre mir eine Lösung, die nach diesem prinzip arbeitet, aber ich habe keine Idee wie.
Vielen Dank für eure Hilfe,

Gruß Bernd
 

Campino

Top Contributor
Du lässt einfach den Spieler einen Button "fertig" klicken, das hat zur Folge, dass der Computer den nächsten Spieler drannimmt ODER die Runde beendet. Wenn der Spieler ein Computerspieler ist ruft dein Programm die entsprechende Methode auf. Sobald der CS fertig ist, ruft er die Methode auf, die auch aufgerufen wird, wenn dein Mensch seinen FERTIG- Knopf drückt. Wo ist das Problem?
 
B

Bernd72

Gast
Hallo Campino,
erst mal vielen Dank für deine Antwort.
Den Button "Fertig" benötige ich beim menschlichen Spieler nicht, da die Runde abgeschlossen wird, in dem er auf ein Feld klickt. Hier habe ich kein Problem.
Aber nachdem der menschliche Spieler an der Reihe ist, muss ich überprüfen ob gerade ein menschlicher Spieler, ein lokaler Computerspieler oder ein entfernter Computerspieler an der Reihe ist.
Na klar könnte ich als letzten Befehl der Zugmethoden die Überprüfung stattfindenlassen, aber habe ich dann nicht folgendes Problem?
Methode zugMenschlicherSpieler() ruft im letzten Befehl
werIstDran() auf, diese ruft je nachdem
zugMenschlicherSpieler(), zugLokalerComputerSpieler() oder zugEntfernterComputerSpieler auf, welche im letzten Befehl dann wieder
werIstDran() aufrufen usw.
So wird doch keine Methode zu Ende ausgeführt, ist das kein Problem?

Mir ist eben noch eingefallen ich könnte für jede Spielart eine Spielsteuerung machen, aber ich habe 9 Spielarten ( im Sinne von Mensch gegen Mensch, Mensch gegen lokalen Computer, Mensch gegen entfernten Computer usw.)

Ich hoffe das ist nicht zu verwirrend.

Gruß Bernd
 
L

LordLuzifer

Gast
Ich würde mir mit werIstDran() keine Methode, sondern ein Field zurückgeben lassen. Führe eine Statusvariable ein mit drei Einstellungen Mensch, LokalerComputer, EntfernerComputer und mach davon abhängig was passiert, dann solltest du keine Probleme haben.
 

Marco13

Top Contributor
Das mit der while-Schleife nennt sich "busy waiting" und ist ... :autsch: (macht man nicht!)

Ganz allgemein: Dafür ist der wait/notify-Mechanismus da!

Allerdings sollte der nur für den Menschlichen SPieler gebraucht werden. Außer wenn die Computerpsieler ihre Züge in eigenen Threads berechnen.

Diese "verschachtelten" Aufrufe sollte man nicht machen (damit müllt man sich den Stack zu - es wird - wie dua auch sagtest - ja NIE eine Methode beendet)

Beschreib' vielleicht mal, wie der grundsätzliche Spielablauf ist oder sein soll. Wenn es ein "klassisches" Rundenbasiertes Spiel ist, kommen doch eigentlich in jeder Runde alle Spieler dran!? Und wenn nicht, dann muss DAS SPIEL wissen, welcher seiner Spieler einen Zug machen muss...

Die Klassenstruktur und die Abläufe sind jetzt nicht ganz klar, aber grundsätzlich könnte das ja sowas sein wie
Code:
class Game
{
    void play()
    {
        while(!finished())
        {
             if (shouldMove(player0)) player0.doMove();
             if (shouldMove(player1)) player1.doMove();

             // Oder auch sowas wie 
             // activePlayer.doMove();
             // activePlayer = computeNextActivePlayer();
        }
    }
}

abstract class Player { abstract void doMove(); }

class HumanPlayer extends Player implements ActionListener
{
     void doMove()
     {
          moveWasDone = false;
          while (!moveWasDone)
          {
              synchronized(this)
              {
                  try
                  {
                       this.wait(); // Warte, bis der Zug gemacht wurde 
                       //(d.h bis ein Button geklickt und ActionPerformed aufgerufen wurde)
                  } catch (InterruptedException e) {}
              }
         }
     }

      public void actionPerformed(ActionEvent e)
      {
           executeMove(computeMoveFrom(e));
           moveWasDone = true;
           synchronized(this)
           {  
                this.notify(); // Sag' bescheid, dass es bei dem 'wait' oben jetzt weitergehen kann
            }
      }
}


class ComputerPlayer extends Player
{
     void doMove()
     {
           executeMove(computeBestMove());
     }
}
 
B

Bernd72

Gast
Hallo zusammen,

vielen Dank für eure Hilfe.
Das Posting von Marco13 hat mir super geholfen.
Im Prinzip hatte ich es so gemacht bei meiner Lösung mit dem busy waiting. Nur das ich den menschlichen Spieler hier nicht eingebaut hatte und die Schleife dann nicht auf den Klick gewartet hat, sondern die Schleife ständig durchlief bis wieder ein Computerspieler an der Reihe war.
Jetzt habe ich noch ein Problem mit dem aktualisieren der Grafik während der Züge (Ich weiß, mit Threads arbeiten, aber ich kriegs einfach nicht hin), aber ich denke das würde hier zu weit führen.

Schöne Grüße
Bernd
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
J Frage zum Einlesen einer .wav in ein byte Array Spiele- und Multimedia-Programmierung 3
S ImageSlider frage Spiele- und Multimedia-Programmierung 3
Anfänger2011 Minimap: Theoretische Frage zur Umsetzung Spiele- und Multimedia-Programmierung 2
Androbin Kollisions-Frage Spiele- und Multimedia-Programmierung 8
windl Frage zu Airplay und zur Mitarbeit bei einer Mediaanlage Spiele- und Multimedia-Programmierung 0
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
P Frage zu einem Projekt "Einarmiger Bandit" 3 Walzen / 9 Zeichnungen BLUEJ Spiele- und Multimedia-Programmierung 10
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
CookieSoft OpenGl Translatef Frage Spiele- und Multimedia-Programmierung 2
Kenan89 Theoretische Frage zu Tile Spielkarten Spiele- und Multimedia-Programmierung 9
R Tileloader Frage Spiele- und Multimedia-Programmierung 2
S Frage: NullPointer, aber warum? Spiele- und Multimedia-Programmierung 8
J Anfänger Frage wie adden? Spiele- und Multimedia-Programmierung 9
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
M.F.G. Spielvorstellung (plus KI frage): Connect Four – Extreme Spiele- und Multimedia-Programmierung 11
Helgon OpenGL Blend Frage Spiele- und Multimedia-Programmierung 18
P Frage bzgl. TextAdventure Spiele- und Multimedia-Programmierung 11
K Frage zur 3D Entwicklung zwecks vorhandener Engines Spiele- und Multimedia-Programmierung 17
V Frage zu AffineTransforms Spiele- und Multimedia-Programmierung 2
N frage zu der mp3spi Spiele- und Multimedia-Programmierung 2
J Frage zu Threads Spiele- und Multimedia-Programmierung 5
C Frage zu Ray-Picking mit JOGL Spiele- und Multimedia-Programmierung 13
M VRML Loader(noob Frage) ^^ Spiele- und Multimedia-Programmierung 3
M Prinzipielle Frage: Kann Java Grafiken ausschneiden? Spiele- und Multimedia-Programmierung 3
R Frage zu Hütchenspielprogrammierung! Spiele- und Multimedia-Programmierung 47
V Frage zu Grafiken und Software! Spiele- und Multimedia-Programmierung 5
radiac Mal eine ganz Doofe Frage... verzeiht :) Spiele- und Multimedia-Programmierung 9
Developer_X Eine Frage zur ViewBesetzung Spiele- und Multimedia-Programmierung 28
H BlueJ Frage Spiele- und Multimedia-Programmierung 13
K Malefiz programmieren - Frage zu den einzelnen Spielfeldern Spiele- und Multimedia-Programmierung 5
G Ping Pong Frage Spiele- und Multimedia-Programmierung 17
0x7F800000 allgemeine frage zu Java 3D Spiele- und Multimedia-Programmierung 12
G frage zu tutorial Spiele- und Multimedia-Programmierung 3
M Frage eines Anfängers Spiele- und Multimedia-Programmierung 3
N Schiffe Versenken Frage zum Spielbrett Spiele- und Multimedia-Programmierung 24
N Generelle Frage: "GUI"-Werkzeuge Spiele- und Multimedia-Programmierung 5
X Frage zu Import von CAD Zeichnungen Spiele- und Multimedia-Programmierung 4
A kurze Frage zu Java3D! (automatische Skalierung) Spiele- und Multimedia-Programmierung 3
S Poker - grundlegende frage zu paint() Spiele- und Multimedia-Programmierung 10
B Frage zum GUI-Design bei Brettspielen Spiele- und Multimedia-Programmierung 4
P Frage zum Scrolling Spiele- und Multimedia-Programmierung 23
B Frage zum Abspielen von Sounddateien Spiele- und Multimedia-Programmierung 2
J Frage zu Geometry und Shape3D Spiele- und Multimedia-Programmierung 4
J Frage zu Transform3D.mul() Spiele- und Multimedia-Programmierung 2
J Java3D: Texture-Frage Spiele- und Multimedia-Programmierung 4
C frage zu glrotated Spiele- und Multimedia-Programmierung 12
T Einsatzbereich-Frage von Java 3D Spiele- und Multimedia-Programmierung 24
S [Java2D] Performance Frage Spiele- und Multimedia-Programmierung 4
G Frage zur Sichtbarkeit von Flächen Spiele- und Multimedia-Programmierung 2
E Rendering order auf einem ismetrischen Grid Spiele- und Multimedia-Programmierung 8
P Wie kann ich einem Programm hinter eine GUI verstecken? Spiele- und Multimedia-Programmierung 12
J (Libgdx) animation nur einmal in einem Event aufrufen Spiele- und Multimedia-Programmierung 1
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
P selectedItem aus einem Methodenerstellten JPanel auslesen. Spiele- und Multimedia-Programmierung 5
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
G Collision Detection in einem 2D Sandbox Game. Spiele- und Multimedia-Programmierung 2
E Einem A*-Pfad folgen Spiele- und Multimedia-Programmierung 27
G Auf einem Stick bewegen Spiele- und Multimedia-Programmierung 5
windl MP3-Tags von einem Inputstream auslesen Spiele- und Multimedia-Programmierung 5
U DPI von einem Bild definieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
C Hilfe bei einem Mosaikspiel Spiele- und Multimedia-Programmierung 16
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
P Winkel von einem Punkt zum anderen berechnen Spiele- und Multimedia-Programmierung 9
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
Fl4sh1 Datum und Uhrzeit von einem Ereignis ausgeben lassen Spiele- und Multimedia-Programmierung 3
K Grundsätzlicher Spieleaufbau an (m)einem Beispiel Spiele- und Multimedia-Programmierung 4
S Problem mit Sichtfeld/Licht in einem Raster Spiele- und Multimedia-Programmierung 5
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
A Drehen von einem Image Spiele- und Multimedia-Programmierung 4
F Bot updaten von einem Browser game Spiele- und Multimedia-Programmierung 7
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
B Reset bei einem Spiel Spiele- und Multimedia-Programmierung 16
C auf einem PC kein mp3 unter Java Spiele- und Multimedia-Programmierung 6
A Steuerung des Bewegungsflusses bei einem Netzwerkspiel Spiele- und Multimedia-Programmierung 18
R Mehrere Shader in einem Program Spiele- und Multimedia-Programmierung 8
B Generierung einer Wertetabelle aus einem Bild Spiele- und Multimedia-Programmierung 3
Z Kugeln aufgrund von Daten aus einem Array verschieben Spiele- und Multimedia-Programmierung 2
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
K Kanten anzeigen lassen in einem Shape3D-Objekt Spiele- und Multimedia-Programmierung 4
A Interaktion von J3D in einem Applet Spiele- und Multimedia-Programmierung 4
N In einem Kasten springende Bälle programmieren...Hilfe Spiele- und Multimedia-Programmierung 7
H Speichern und Öffnen von einem Zeichenprogramm Spiele- und Multimedia-Programmierung 4
A Wie kann ich die Dateigröße aus einem tiff auslesen? Spiele- und Multimedia-Programmierung 2
hdi mehrere Threads/Tasks in einem synchronisieren -> TaskPoo Spiele- und Multimedia-Programmierung 36
N Farberkennung und -ersetzung in einem Bild Spiele- und Multimedia-Programmierung 2
F Umsetzung von einem Partikelsystem Spiele- und Multimedia-Programmierung 4
J Java3D Rotationsproblem bei einem 3D-Maennchen Spiele- und Multimedia-Programmierung 3
K Seitenlänge aus einem Würfel lesen Spiele- und Multimedia-Programmierung 3
K Einzelne Pixel in einem Bild lesen Spiele- und Multimedia-Programmierung 5
T Kollisionsabfrage von einem Stein mit einem Ball Spiele- und Multimedia-Programmierung 5
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2
A 3D Gegenstand in einem 2D Koordinatensystem darstellen. Spiele- und Multimedia-Programmierung 3
K Hilfe bei Grafikeinbindung in einem Spiel Spiele- und Multimedia-Programmierung 6
D Image.getGraphics() in einem Frame Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben