2017-11-29 2 views
2

Ich bin völlig neu in der Programmierung und ich machte ein Programm für den Unterricht. Für das Projekt muss ich ein "selbstgesteuertes" Programm machen. Ich wollte ein einfaches Programm machen; Ich wollte einen Kampfsimulator! Also der Punkt des Programms ist, dies zu tun: Stellen Sie sich vor, und starten Sie den Kampf. Der Angriff ist völlig zufällig von 5, und Sie und der "Feind" kämpfen, bis einer von Ihnen 0 PS trifft. Ich möchte, dass das Programm endet, und zeige die Gesundheit von dir und deinem Feind und sage dir, ob du gewonnen hast oder nicht. Ziemlich einfach, aber es ist schwieriger als Sie denken würden, vor allem mit dem Mangel an Programmierung, die ich gelernt habe. Ich brauche nur Hilfe, um es zu reparieren oder zu vereinfachen. Danke für die Information, wenn Sie helfen können! Code unten:Warum läuft mein Programm zweimal mehr als nötig?

import java.util.Scanner; 

public class TG_UN4EX13 { 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 

     String rumble = "startvalue"; 

     System.out.println("Welcome to the Ultimate Battle Game!"); 
     System.out.println("Have Fun!"); 

     // Attack Section // 
     int attack1 = 5; 
     int attack2 = 10; 
     int attack3 = 20; 
     int attack4 = 40; 
     int cower = 0; 

     // Character Section// 
     int playerhealth = 100; 
     // Character Section// 

     // Enemy Section// 
     int enemyhealth = 100; 
     // Enemy Section// 

     while (playerhealth >= 0 || enemyhealth >= 0 || rumble.equalsIgnoreCase("Yes")) { 
      int attacknumber = (int) (Math.random() * (5 - 1 + 1) + 1); 
      int attacknumber2 = (int) (Math.random() * (5 - 1 + 1) + 1); 

      if (attacknumber == 1) { 
       enemyhealth = enemyhealth - attack1; 
       System.out.println("You used Punch!"); 
       System.out.println("You did " + attack1 + " damage! \n"); 
      } else if (attacknumber == 2) { 
       enemyhealth = enemyhealth - attack2; 
       System.out.println("You used Kick!"); 
       System.out.println("You did " + attack2 + " damage! \n"); 
      } else if (attacknumber == 3) { 
       enemyhealth = enemyhealth - attack3; 
       System.out.println("You used Jab!"); 
       System.out.println("You did" + attack3 + " damage! \n"); 
      } else if (attacknumber == 4) { 
       enemyhealth = enemyhealth - attack4; 
       System.out.println("You used Roundhouse Kick!"); 
       System.out.println("You did " + attack4 + " damage! \n"); 
      } else if (attacknumber == 5) { 
       enemyhealth = enemyhealth - cower; 
       System.out.println("You cowered in fear!"); 
       System.out.println("You did " + cower + " damage! \n"); 
      } 

      if (attacknumber2 == 1) { 
       playerhealth = playerhealth - attack1; 
       System.out.println("They used Punch!"); 
       System.out.println("They did " + attack1 + " damage! \n"); 
      } else if (attacknumber2 == 2) { 
       playerhealth = playerhealth - attack2; 
       System.out.println("They used Kick!"); 
       System.out.println("They did " + attack2 + " damage! \n"); 
      } else if (attacknumber2 == 3) { 
       playerhealth = playerhealth - attack3; 
       System.out.println("They used Jab!"); 
       System.out.println("They did " + attack3 + " damage! \n"); 
      } else if (attacknumber2 == 4) { 
       playerhealth = playerhealth - attack4; 
       System.out.println("They used Roundhouse Kick!"); 
       System.out.println("They did " + attack4 + " damage! \n"); 
      } else if (attacknumber2 == 5) { 
       playerhealth = playerhealth - cower; 
       System.out.println("They cowered in fear!"); 
       System.out.println("They did " + cower + " damage! \n"); 
      } 

      System.out.println("You have " + playerhealth + " health!"); 
      System.out.println("They have " + enemyhealth + " health! \n"); 

     } 

     if (playerhealth > enemyhealth) { 
      System.out.println("You won!"); 
      System.out.println("Do you want to play again?"); 
      rumble = scan.nextLine(); 
     } else { 
      System.out.println("You lost!"); 
      System.out.println("Do you want to play again?"); 
      rumble = scan.nextLine(); 
     } 

     if (rumble.equalsIgnoreCase("no")) { 
      System.out.println("Well, goodbye!"); 
      System.exit(0); 
     } 

    } 
} 

P.S. Dies ist eine schnelle Bearbeitung, aber hier ist ein Beispiel:

Sie haben 20 Gesundheit! Sie haben 20 Gesundheit!

Sie haben Jab verwendet! Du hast 20 Schaden angerichtet!

Sie verwendeten Roundhouse Kick! Sie haben 40 Schaden angerichtet!

Sie haben -20 Gesundheit! Sie haben 0 Gesundheit!

Sie haben Jab verwendet! Du hast 20 Schaden angerichtet!

Sie verwendeten Roundhouse Kick! Sie haben 40 Schaden angerichtet!

Sie haben -60 Gesundheit! Sie haben -20 Gesundheit!

Sie verloren! Willst du wieder spielen?

+2

Bevor Sie mit Ihrem Code weitermachen, verwenden Sie die IDE-Tools, um Ihren Code richtig zu formatieren/einzurücken. Wie es jetzt ist, ist es unlesbar, was hilft, viele kleine Fehler zu verbergen. Edit: Ich habe dein Beispiel formatiert, aber versuche es in Zukunft in all deinen Projekten selbst. – Pshemo

+0

Außerdem sollten Sie nach jedem Angriff überprüfen, ob die Gesundheit 0 ist, damit Sie nicht von den kürzlich Verstorbenen getroffen werden. – Berdesdan

+0

@Berdesdan Der Grund, warum Sie testen müssen ;-) – bated

Antwort

3

Ich bin nicht positiv, aber ich denke, man kann sich ändern müssen:

while(playerhealth>=0 || enemyhealth>=0 || rumble.equalsIgnoreCase("Yes"))

zu

while((playerhealth>0 && enemyhealth>0) || rumble.equalsIgnoreCase("Yes")) Wenn die Gesundheit ist =0, es wieder laufen wird, so entfernen die = sowie

+0

Das hat bei mir funktioniert! Ich danke dir sehr! Was für ein einfacher Fehler, zum Glück lerne ich immer noch und es hat mir sehr geholfen. –

1

Werfen Sie einen Blick auf die Bedingungen für Ihre Schleife.

while (playerhealth >= 0 || enemyhealth >= 0 || rumble.equalsIgnoreCase("Yes")) { 
    //do stuff 
} 

Sie sagen, "weiter kämpfen, während jede der folgenden Bedingungen erfüllt sind":

  1. Spieler Gesundheit positiv

  2. die Gesundheit des Gegners positiv ist

  3. Rumble = Ja

Jetzt überlegen Sie, was es braucht, um diese Schleife zu beenden (dh das Spiel zu beenden).

die Schleife verlassen ist das Gegenteil in der Schleife zu bleiben, so dass Sie wollen das Gegenteil von diesen Bedingungen, das ist „aufhören zu kämpfen, wenn alle der folgenden Bedingungen erfüllt sind“:

  1. Spieler Gesundheit ist weniger als 0

  2. die Gesundheit des Gegners weniger als 0

  3. Rumble! = Ja

Haben Sie für den Kampf nur Ende bedeuten, wenn beide der Spieler und Feind negativ auf die Gesundheit haben, oder sollte es enden, wenn entweder der Spieler oder der Feind negativ auf die Gesundheit haben?

Verwandte Themen