Ich mache eine rundenbasierte Kampf-Sache in Java nur um zu sehen, ob ich es selbst herausfinden kann, Aber ich habe ein Problem

java.util.Scanner importieren;

öffentliche Klasse Haupt -,14-" -

Wenn ich den Code ausführe, wird die erste Nachricht ausgedruckt, die sagt, dass der Schleim erscheint und entweder angreift oder verteidigt, aber ich kann nichts in die Konsole eingeben und der Code wird beendet. Ich verwende Eclipse.

Paket dfguy;

Import java.util.Random;

Also, ich mache eine rundenbasierte Kampfklasse in Java für, wenn ich versuche, ein rpg zu machen. Ich werde den folgenden Code angeben. Ich habe eine öffentliche statische Zeichenfolge namens status und einen Scanner namens sc und eine Switch-Anweisung für state. Vor der Switch-Anweisung ist state = "0". Fall "0" der Switch-Anweisung druckt "Ein Schleim erscheint"n(1)Angriff(2)Verteidigen" und macht Status = "1". Fall "1" hat eine weitere Switch-Anweisung für sc.nextLine. in dieser Switch-Anweisung verursacht Fall "1" Schaden für mich und den Schleim, subtrahiert sie von unseren PS und druckt eine Nachricht für die Angriffe aus und macht Zustand = "2". Fall "2" erzeugt den halben Schaden des Schleims und druckt eine Nachricht für den Schleimschaden aus, wobei die Hälfte dessen, was es wäre, mit Ihnen verteidigt innen des Angriffs und macht Zustand = "2". Also, entweder angreifen oder verteidigen, macht es Zustand = "2". Dann für die erste Switch-Anweisung, Fall "2" druckt die Optionen des Angriffs und wieder zu verteidigen und macht zustand = "1".

Antwort auf "Ich mache eine rundenbasierte Kampf-Sache in Java nur um zu sehen, ob ich es selbst herausfinden kann, Aber ich habe ein Problem " 2 von antworten

Es gibt keine Schleife um das switch to run it more than once - so you go through with state=0, flip it to state=1 and then you're done., um es mehr als einmal auszuführen - also gehen Sie mit state=0 durch, kippen Sie es in state=1 und dann sind Sie fertig.

Vorerst kannst du mit while(true) { /*your switch*/ } but eventually you probably want davonkommen, aber irgendwann willst du wahrscheinlich while(!dead) { ... }. Also perhaps put your whole switch into a different method rather than doing it all in . Vielleicht setzen Sie auch Ihren ganzen Schalter in eine andere Methode, anstatt alles in main. zu tun.

Sie schreiben eine richtige Zustandsmaschine, aber eine wichtige Sache über eine Zustandsmaschine ist, dass sie immer wieder aufgerufen werden muss. Das erste Mal durch den Staat ist eine Sache und später ändert es sich zu etwas anderem.

Die Sache ist, jeder Staat kann immer und immer wieder laufen. Sie müssen also Ihre Frage in einem Zustand stellen und auf die Antwort im nächsten warten. Wenn Sie es in diesem Zustand lassen, wird es nur die Frage Spamming. Also sollte Status 0 die Frage stellen, dann ist Der Zustand 1 nur Schleifen, die auf eine Antwort warten, und die Antwort sendet Ihnen an Den Status 2 oder 3 für mehr Text.

Oder Sie können sogar Zustandsautomaten in Zustandsautomaten haben. Der Punkt ist, dass Schleifencode immer wieder den gleichen Punkt erreicht, bis es Zeit ist, etwas anderes zu tun.

Das Ganze muss in einer While-Schleife sein. Sie können while(true) oder while(1) oder sogar for(;;) verwenden, aber ich mag einen booleschen Wert, den ich verwenden kann, so dass, wenn ich jemals das Programm beenden möchte, ich es einfach auf false setzen kann und das Programm endet.

Pseudo-Code:

boolean running = true;

while(running){
   switch(state){
      // etc. etc. for the state machine.  
      // if you want to end the program somewhere then set running to false
   }
}