Java while循环中每次迭代生成随机伤害值的问题求助
解决格斗游戏每次攻击伤害固定的问题
你的问题根源很明确:随机伤害值只在程序初始化时生成了一次,之后所有攻击都复用这个固定值。要实现每次攻击都有不同的随机伤害,只需要把随机数生成的逻辑移到每次攻击的流程里就行。另外,代码里重复创建Scanner和Random对象的做法也可以优化,复用实例更高效。
修改后的完整代码
package jeu_propre; import java.util.Random; import java.util.Scanner; public class main { public static void main(String[] args){ // 只创建一次Scanner和Random实例,复用更高效 Scanner scanner = new Scanner(System.in); Random random = new Random(); System.out.println("Player 1, choose your name : "); String nom_pone = scanner.nextLine(); System.out.println("Player 2, choose your name : "); String nom_ptwo = scanner.nextLine(); weapons fists = new weapons(); fists.name = "fists"; player number_one = new player(); number_one.name = nom_pone; number_one.hp = 100; player number_two = new player(); number_two.name = nom_ptwo; number_two.hp = 100; boolean running = true; while (running) { // 玩家1攻击:每次攻击前生成新的随机伤害 System.out.println("Fight !"); System.out.println(number_one.name +" hit " + number_two.name); scanner.nextLine(); // 等待玩家输入确认攻击 int currentDamage = random.nextInt(30); // 每次攻击生成0-29的随机伤害 System.out.println("Damage: " + currentDamage); number_two.hp -= currentDamage; if (number_two.hp <= 0) { System.out.println(number_one.name +" wins !"); running = false; break; } else { System.out.println(number_two.name + " still has "+ number_two.hp); } // 玩家2攻击:同样每次生成新的随机伤害 System.out.println("Fight !"); System.out.println(number_two.name +" hit " + number_one.name); scanner.nextLine(); currentDamage = random.nextInt(30); System.out.println("Damage: " + currentDamage); number_one.hp -= currentDamage; if (number_one.hp <= 0) { System.out.println(number_two.name +" wins !"); running = false; break; } else { System.out.println(number_one.name + " still has "+ number_one.hp); } } scanner.close(); // 最后关闭Scanner } } // 补充你代码里用到的类(确保编译通过) class weapons { String name; int damage; } class player { String name; int hp; }
关键改动说明
- 复用Scanner和Random实例:避免每次输入或生成随机数都创建新对象,提升性能。
- 把随机伤害生成移到攻击流程内:每次玩家攻击时,调用
random.nextInt(30)生成新的0-29的随机数(如果需要包含30,改成nextInt(31)),作为本次攻击的伤害值。 - 移除固定的fists.damage赋值:不再提前给武器设置固定伤害,而是每次攻击动态生成。
- 优化扣血代码:
number_two.hp -= currentDamage比number_two.hp= number_two.hp -= fists.damage写法更简洁规范。
内容的提问来源于stack exchange,提问作者wdwad dwad
相关产品推荐
相关产品推荐

