2016-12-30 1 views
1

Dieser Code soll jedes Mal, wenn jemand tot wird, einen neuen Feind erzeugen. Das schließt ein, dass der Gegner ein zufälliges bisschen Gesundheit produziert, aber mein Programm verwendet nur die gleiche Gesundheit wie der vorherige Feind und wiederholt ständig den "Feind wurde besiegt". Ich versuchte, die Gesundheit des Gegners und den spezifischen Gegner herzustellen der Enemy.java, aber ich habe Mühe, die richtige OOP zu verstehen, obwohl ich ein paar Tutorials benutzt habe.Java Wie bekomme ich jedes Mal eine Zufallszahl, wenn eine While-Schleife beginnt?

import java.util.Random; 
    import java.util.Scanner; 
    import java.util.concurrent.ThreadLocalRandom; 


public class Test { 
public static void main(String args[]) { 

    Random rand = new Random(); 
    Scanner in = new Scanner(System.in); 
    Scanner sc = new Scanner(System.in); 


    boolean running = true; 
    int hitPoints; 
    int choice; 
    String name; 

    Vehicle Vehicle = new Vehicle(); 
    Player Player = new Player(); 
    Enemy Enemy = new Enemy(); 

    Player.name(); 
    Vehicle.number(); 
    Player.hitPoints(); 

    name = Player.name; 
    int enemyHealth; 

    GAME: 
    while(running){ 

     String [] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin", "Reaper", "Archer"}; 
     String enemy = enemies[rand.nextInt(enemies.length)]; 
     enemyHealth = Player.enemyHealth; 
     System.out.println("\n*# " + enemy + " appeared! #*"); 

     hitPoints = Player.hitPoints; 

    while(enemyHealth > 0){ 

     enemyHealth = Player.enemyHealth; 
     if(enemyHealth < 1){ 
      break; 
     } 

     if(hitPoints < 1){ 
      System.out.println("\nYour car has been destroyed"); 
     break; 
     } 


     hitPoints = Player.hitPoints; 

    System.out.println("\nYour car has " + hitPoints + " health "); 
    System.out.println("Enemy car has " + enemyHealth + " health "); 

    System.out.println("\n1. Bump enemy car"); 
    System.out.println("2. Heal your car"); 
    System.out.println("3. Avoid enemy car"); 
    int userChoice = in.nextInt(); 

    switch(userChoice){ 
    case 1: 
     Player.attack(); 
     break; 
    case 2: 

    case 3: 
     System.out.println("You barely avoided the enemy car"); 
     break; 

} 
} 
if(hitPoints < 1){ 
    System.out.println("\nGame Over"); 
    break; 
} 
if(enemyHealth < 1){ 

hitPoints = Player.hitPoints; 
    name = Player.name; 
System.out.println(" \nEnd Fight Result: \n"); 
System.out.println(" # " + enemy + " was defeated! #"); 
System.out.println(" # You have " + hitPoints + " HP left. #"); 

System.out.println("\nWhat would you like to do " + name + " ?"); 
System.out.println("1. Continue Fighting"); 
System.out.println("2. Exit Dungeon"); 

choice = in.nextInt(); 

switch(choice){ 
    case 1: 
     System.out.println("\nYou continue your adventure!"); 
     break; 
    case 2: 
     System.out.println("You exit the dungeon, succesful from your   adventures!"); 
     break; 
} 
if(choice == 2){ 
    break; 
} 
} 
    } 
    name = Player.name; 
    System.out.println("\n##########################"); 
    System.out.println("# Thanks for playing " + name + "! #"); 
    System.out.println("##########################"); 
} 
} 

import java.util.Scanner; 
import java.util.Random; 

public class Player { 

Enemy Enemy = new Enemy(); 

Scanner in = new Scanner(System.in); 
Scanner sc = new Scanner(System.in); 
Random rand = new Random(); 
String name; 
int hitPoints; 
int enemyDamageDealt = Enemy.enemyDamageDealt; 
int enemyHealth = Enemy.enemyHealth; 
int damageDealt; 

public void name(){ 

System.out.println("Enter your username"); 
this.name = sc.nextLine(); 
System.out.println("You set your username to: " + name);  

} 

public void hitPoints(){ 
hitPoints = rand.nextInt(500) + 500; 
} 

public void attack(){ 

damageDealt = rand.nextInt(100); 
enemyHealth -= damageDealt; 
hitPoints -= enemyDamageDealt; 
System.out.println("You damaged the enemy car for " + damageDealt); 
System.out.println("In return you got damaged for " + enemyDamageDealt); 
} 
} 


import java.util.Random; 
import java.util.Scanner; 

public class Enemy { 

Scanner in = new Scanner(System.in); 
Scanner sc = new Scanner(System.in); 
Random rand = new Random(); 

int enemyDamageDealt = rand.nextInt(100); 

public String [] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin", "Reaper", "Archer"}; 
public String enemy = enemies[rand.nextInt(enemies.length)]; 



int enemyHealth = rand.nextInt(500) + 250; 

} 
+0

Das ist eine Menge Code.Wenn Sie möchten, dass wir uns die Zeit nehmen, um durchzusehen, müssen Sie sich die Zeit nehmen, es richtig zu formatieren. Vielleicht möchtest du Folgendes lesen: wie man ein [mcve] erstellt. –

+0

Willkommen bei Stack Overflow! Es sieht so aus, als ob du nach Hausaufgabenhilfe fragst. Obwohl wir damit keine Probleme haben, beachten Sie bitte diese [dos and don'ts] (http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions)/338845 # 338845) und bearbeiten Sie Ihre Frage entsprechend. –

+0

Nun, wenn Sie zum Beispiel wollen, dass 'feindlichesGesundheit' eine zufällige Zahl hat, müssen Sie ihm eins zuweisen:' feindGesundheit = rand.NextInt(); 'oder welcher Bereich von Werten Sie suchen. – markspace

Antwort

0

Ist es nicht einfach? Wenn Sie nur eine kleine Änderung versuchen, die enemyHealth zu aktualisieren, wenn es darum geht, einen neuen Feind:

 enemyHealth = rand.nextInt(500) + 250; 
     Player.enemyHealth = enemyHealth; 

Aktualisiert Code

import java.util.Random; 
import java.util.Scanner; 

public class Main { 
    public static void main(String args[]) { 

     Random rand = new Random(); 
     Scanner in = new Scanner(System.in); 
     Scanner sc = new Scanner(System.in); 


     boolean running = true; 
     int hitPoints; 
     int choice; 
     String name; 

     // Vehicle Vehicle = new Vehicle(); 
     Player Player = new Player(); 
     Enemy Enemy = new Enemy(); 

     Player.name(); 
     // Vehicle.number(); 
     Player.hitPoints(); 

     name = Player.name; 
     int enemyHealth; 

     GAME: 
     while (running) { 

      String[] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin", "Reaper", "Archer"}; 
      String enemy = enemies[rand.nextInt(enemies.length)]; 
      enemyHealth = rand.nextInt(500) + 250; 
      Player.enemyHealth = enemyHealth; 
      System.out.println("\n*# " + enemy + " appeared! #*"); 

      hitPoints = Player.hitPoints; 

      while (enemyHealth > 0) { 

       enemyHealth = Player.enemyHealth; 
       if (enemyHealth < 1) { 
        break; 
       } 

       if (hitPoints < 1) { 
        System.out.println("\nYour car has been destroyed"); 
        break; 
       } 


       hitPoints = Player.hitPoints; 

       System.out.println("\nYour car has " + hitPoints + " health "); 
       System.out.println("Enemy car has " + enemyHealth + " health "); 

       System.out.println("\n1. Bump enemy car"); 
       System.out.println("2. Heal your car"); 
       System.out.println("3. Avoid enemy car"); 
       int userChoice = in.nextInt(); 

       switch (userChoice) { 
        case 1: 
         Player.attack(); 
         break; 
        case 2: 

        case 3: 
         System.out.println("You barely avoided the enemy car"); 
         break; 

       } 
      } 
      if (hitPoints < 1) { 
       System.out.println("\nGame Over"); 
       break; 
      } 
      if (enemyHealth < 1) { 

       hitPoints = Player.hitPoints; 
       name = Player.name; 
       System.out.println(" \nEnd Fight Result: \n"); 
       System.out.println(" # " + enemy + " was defeated! #"); 
       System.out.println(" # You have " + hitPoints + " HP left. #"); 

       System.out.println("\nWhat would you like to do " + name + " ?"); 
       System.out.println("1. Continue Fighting"); 
       System.out.println("2. Exit Dungeon"); 

       choice = in.nextInt(); 

       switch (choice) { 
        case 1: 
         System.out.println("\nYou continue your adventure!"); 
         break; 
        case 2: 
         System.out.println("You exit the dungeon, succesful from your   adventures!"); 
         break; 
       } 
       if (choice == 2) { 
        break; 
       } 
      } 
     } 
     name = Player.name; 
     System.out.println("\n##########################"); 
     System.out.println("# Thanks for playing " + name + "! #"); 
     System.out.println("##########################"); 
    } 
} 


class Player { 

    Enemy Enemy = new Enemy(); 

    Scanner in = new Scanner(System.in); 
    Scanner sc = new Scanner(System.in); 
    Random rand = new Random(); 
    String name; 
    int hitPoints; 
    int enemyDamageDealt = Enemy.enemyDamageDealt; 
    int enemyHealth = Enemy.enemyHealth; 
    int damageDealt; 

    public void name() { 

     System.out.println("Enter your username"); 
     this.name = sc.nextLine(); 
     System.out.println("You set your username to: " + name); 

    } 

    public void hitPoints() { 
     hitPoints = rand.nextInt(500) + 5000; 
    } 

    public void attack() { 

     damageDealt = rand.nextInt(100); 
     enemyHealth -= damageDealt; 
     hitPoints -= enemyDamageDealt; 
     System.out.println("You damaged the enemy car for " + damageDealt); 
     System.out.println("In return you got damaged for " + enemyDamageDealt); 
    } 
} 


class Enemy { 

    Scanner in = new Scanner(System.in); 
    Scanner sc = new Scanner(System.in); 
    Random rand = new Random(); 

    int enemyDamageDealt = rand.nextInt(100); 

    public String[] enemies = {"Skeleton", "Zombie", "Warrior", "Assassin", "Reaper", "Archer"}; 
    public String enemy = enemies[rand.nextInt(enemies.length)]; 


    int enemyHealth = rand.nextInt(500) + 250; 

} 

Test (Hinweis, dass es nicht Schleife, wenn es einen neuen Feind kommt) .

Enter your username 
foo 
You set your username to: foo 

*# Reaper appeared! #* 

Your car has 5496 health 
Enemy car has 368 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 36 
In return you got damaged for 39 

Your car has 5457 health 
Enemy car has 332 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 61 
In return you got damaged for 39 

Your car has 5418 health 
Enemy car has 271 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 42 
In return you got damaged for 39 

Your car has 5379 health 
Enemy car has 229 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 2 
In return you got damaged for 39 

Your car has 5340 health 
Enemy car has 227 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 69 
In return you got damaged for 39 

Your car has 5301 health 
Enemy car has 158 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 45 
In return you got damaged for 39 

Your car has 5262 health 
Enemy car has 113 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 23 
In return you got damaged for 39 

Your car has 5223 health 
Enemy car has 90 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 81 
In return you got damaged for 39 

Your car has 5184 health 
Enemy car has 9 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 16 
In return you got damaged for 39 

End Fight Result: 

# Reaper was defeated! # 
# You have 5145 HP left. # 

What would you like to do foo ? 
1. Continue Fighting 
2. Exit Dungeon 
1 

You continue your adventure! 

*# Skeleton appeared! #* 

Your car has 5145 health 
Enemy car has 284 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 21 
In return you got damaged for 39 

Your car has 5106 health 
Enemy car has 263 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 39 
In return you got damaged for 39 

Your car has 5067 health 
Enemy car has 224 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 65 
In return you got damaged for 39 

Your car has 5028 health 
Enemy car has 159 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 76 
In return you got damaged for 39 

Your car has 4989 health 
Enemy car has 83 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 66 
In return you got damaged for 39 

Your car has 4950 health 
Enemy car has 17 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
1 
You damaged the enemy car for 87 
In return you got damaged for 39 

End Fight Result: 

# Skeleton was defeated! # 
# You have 4911 HP left. # 

What would you like to do foo ? 
1. Continue Fighting 
2. Exit Dungeon 
1 

You continue your adventure! 

*# Archer appeared! #* 

Your car has 4911 health 
Enemy car has 701 health 

1. Bump enemy car 
2. Heal your car 
3. Avoid enemy car 
+1

Vielen Dank, jetzt macht es mehr Sinn. – xFire

0

Ok Ihr Code ist ein wenig schwer zu folgen. Aber ich glaube, ich habe dein Problem gefunden.

Sie setzen

enemyHealth = Player.enemyHealth; 

Welche, wenn ich mich richtig gelesen werden, wird enemyHealth in der Klasse Spieler tatsächlich auf

int enemyHealth = Enemy.enemyHealth; 

Welche ... Feind ist ein Objekt, das Sie nur erstellen Einmal setzt es die enemyHealth in der Enemy-Klasse und das war's.

int enemyHealth = rand.nextInt(500) + 250; 

Es gibt keine "einfache" Lösung mit dem Design Ihres Codes. Hier ist die Liste der Probleme, die ich mit Ihrem Code sehe.

  1. Ihre Player-Klasse sollte nicht den Überblick über die Gesundheit des Gegners behalten. Was, wenn du mehrere Gegner hinzufügen oder die Funktionalität eines Gegners ändern möchtest? Es macht es sehr schwierig zu tun, wenn Ihre Player-Klasse Dinge verfolgt, die nicht direkt mit dem Player zusammenhängen.
  2. Wenn Sie Objekte deklarieren, beenden Sie Player Player = new Player(), und benennen Sie Ihr Objekt richtig wie Player player = new Player(). Objekte sollten mit einem Kleinbuchstaben beginnen.
  3. Die Attack-Methode sollte nicht in der Player-Klasse sein.
  4. Sie scheinen 2 Instanzen von Enemy zu erstellen (einer in der Hauptklasse und einer in der Player-Klasse) und Sie verwenden nur den in der Player-Klasse.
  5. Sie sollten jedes Mal, wenn Sie einen neuen Feind erstellen, ein neues Feindobjekt erstellen und dessen Eigenschaften verwenden.

Mit allem, was gesagt wird, ich glaube, die einfachste Lösung, um Ihren Code ist wahrscheinlich das, obwohl ich empfehlen die oben genannten Änderungen statt diese zu machen. Weil das kein guter Code ist.

Unter Ihrer while(running), wo Sie Ihre Feindgesundheit einstellen, ersetzen Sie es mit diesen beiden Zeilen.

enemyHealth = rand.nextInt(500) + 250; 
Player.enemyHealth = enemyHealth; 
+0

Danke, ich werde versuchen, diese Fehler zu beheben. Als neuer Programmierer schätze ich es, wenn Sie auf die Fehler in meinem Code hinweisen. Ich werde versuchen, sie für weitere Fragen zu minimieren. Danke noch einmal. – xFire

Verwandte Themen