Java如何在每次while循环开始时获得一个随机数?
这段代码应该会在每次死亡时产生新的敌人。这包括敌人随机生成一点健康,但我的程序只是使用与前一个敌人相同的健康状态,因此不断循环到“敌人已被击败”,我试图让敌人健康并生成特定的敌人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;
}
不容易吗?如果您尝试只是一个小的变化和更新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
非常感谢,现在它更有意义。 – xFire
确定你的代码有点难以遵循。但我相信我找到了你的问题。
要设置
enemyHealth = Player.enemyHealth;
哪个,如果我读正确,enemyHealth在Player类实际上是设置为
int enemyHealth = Enemy.enemyHealth;
哪......敌人是一个对象,你只能创建一旦如此,它将在敌人级别设置enemyHealth
就是这样。
int enemyHealth = rand.nextInt(500) + 250;
对代码的设计没有“简单”修复。以下是我在代码中看到的问题列表。
- 您的播放器类不应该跟踪敌人的健康。如果你想添加多个敌人或改变敌人的功能呢?如果您的Player类正在跟踪与玩家没有直接关系的事情,那么这很难做到。
- 当您声明对象时,请停止执行
Player Player = new Player()
,并正确命名对象,如Player player = new Player()
。对象应该以小写字母开头。 -
Attack
方法不应该在Player类中。 - 你似乎正在创造敌人的两个实例(一个在主类和一个在玩家类中),而你只使用Player类中的一个。
- 每当你创造一个新的敌人时,你应该创造一个新的敌方物体并使用它的属性。
说了这么多,我相信对你的代码的最简单的修复可能是这样的,,虽然我建议做出上述改变而不是这个。因为这不是很好的代码。
在您的while(running)
之下,您正在设置您的enemyHealth,请将其替换为这两行。
enemyHealth = rand.nextInt(500) + 250;
Player.enemyHealth = enemyHealth;
谢谢,我会研究解决这些错误。作为一名新程序员,我感谢您指出我代码中的错误,我会尽量减少进一步的问题。再次感谢。 – xFire
这是很多代码。如果您希望我们花时间试着浏览它,则需要花时间格式化。你可能想读这个:如何创建[mcve]。 –
欢迎来到Stack Overflow!看起来你正在寻求作业帮助。虽然我们本身没有任何问题,但请观察这些[应做和不应该](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),并相应地编辑您的问题。 –
那么如果你想例如'enemyHealth'有一个随机数,你必须给它分配一个:'enemyHealth = rand.nextInt();'或者任何你正在寻找的取值范围。 – markspace