2016-12-30 67 views
1

這段代碼應該會在每次死亡時產生新的敵人。這包括敵人隨機生成一點健康,但我的程序只是使用與前一個敵人相同的健康狀態,因此不斷循環到「敵人已被擊敗」,我試圖讓敵人健康並生成特定的敵人Enemy.java,但我很努力地掌握正確的OOP,即使我已經使用了一些教程。Java如何在每次while循環開始時獲得一個隨機數?

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

這是很多代碼。如果您希望我們花時間試着瀏覽它,則需要花時間格式化。你可能想讀這個:如何創建[mcve]。 –

+0

歡迎來到Stack Overflow!看起來你正在尋求作業幫助。雖然我們本身沒有任何問題,但請觀察這些[應做和不應該](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),並相應地編輯您的問題。 –

+0

那麼如果你想例如'enemyHealth'有一個隨機數,你必須給它分配一個:'enemyHealth = rand.nextInt();'或者任何你正在尋找的取值範圍。 – markspace

回答

0

不容易嗎?如果您嘗試只是一個小的變化和更新enemyHealth時,總會有一個新的敵人:

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

更新代碼

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; 

} 

測試(請注意,它不循環時,總會有新的敵人) 。

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

非常感謝,現在它更有意義。 – xFire

0

確定你的代碼有點難以遵循。但我相信我找到了你的問題。

要設置

enemyHealth = Player.enemyHealth; 

哪個,如果我讀正確,enemyHealth在Player類實際上是設置爲

int enemyHealth = Enemy.enemyHealth; 

哪......敵人是一個對象,你只能創建一旦如此,它將在敵人級別設置enemyHealth就是這樣。

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

對代碼的設計沒有「簡單」修復。以下是我在代碼中看到的問題列表。

  1. 您的播放器類不應該跟蹤敵人的健康。如果你想添加多個敵人或改變敵人的功能呢?如果您的Player類正在跟蹤與玩家沒有直接關係的事情,那麼這很難做到。
  2. 當您聲明對象時,請停止執行Player Player = new Player(),並正確命名對象,如Player player = new Player()。對象應該以小寫字母開頭。
  3. Attack方法不應該在Player類中。
  4. 你似乎正在創造敵人的兩個實例(一個在主類和一個在玩家類中),而你只使用Player類中的一個。
  5. 每當你創造一個新的敵人時,你應該創造一個新的敵方物體並使用它的屬性。

說了這麼多,我相信對你的代碼的最簡單的修復可能是這樣的,,雖然我建議做出上述改變而不是這個。因爲這不是很好的代碼。

在您的while(running)之下,您正在設置您的enemyHealth,請將其替換爲這兩行。

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

謝謝,我會研究解決這些錯誤。作爲一名新程序員,我感謝您指出我代碼中的錯誤,我會盡量減少進一步的問題。再次感謝。 – xFire

相關問題