请耐心等待:我只参加过一门Java课程,我的想法对于我的专业水平来说太大了,但无论如何我都试图实施它们。所以我对Java的理解很脆弱,我的代码很复杂。
我的java do-while循环中的int返回为0,然后在循环的几个循环之后,当它不应该被执行时它再次弹出10并且它不可能去最多10个。
以下是文字游戏程序的输出
1. Attack 2. Block 3. Dodge 4. Escape & Evade 2 Block: 0 Damage: 4 KEELBREAKER Physical readiness: 44/50 (FNG) 1. Attack 2. Block 3. Dodge 4. Escape & Evade 1 Attack: 6 - Block: 10 = Damage -4 MUGGER Physical readiness: 54/50 (FNG) Damage: 5 KEELBREAKER Physical readiness: 25/50 (FNG) 1. Attack 2. Block 3. Dodge 4. Escape & Evade
看粗体。在第一个循环选项2中选择“块”,游戏计算零值,没有效果。六个周期后(删除)选项1“攻击”被选中。游戏计算的块值为10,对敌人物体施加负面伤害“治疗”4点,使其达到最大生命值。
显然这里有很多错误。但我最关心的是阻塞功能。鉴于来自玩家和敌方物体的输入,不应该达到十。此外,每次玩家选择阻止时,它返回的值为0.另外,我还没有为敌方物体的转弯实施阻挡功能,所以敌人不应该阻挡。所以我启动块函数返回0什么都不做,然后值以某种方式通过循环循环6次无所事事并且每次都不显示。然后神奇地变成了10,在敌人的物体转向它甚至不存在的地方。我很困惑。这已经很长了所以我很抱歉,但现在我会附上代码。代码是......一团糟。我会尽可能地尽力清理它。
public class Combat {
public static void indivCombat(Player playerObject, Enemy enemyObject)
{
boolean inCombat = true;
int combatChoice = 0;
int compResponse = 0;
int damage = 0;
int defense = 0;
double evadeChance = 0;
int exp = 0;
int loot = 0;
int sum = 0;
Scanner keyboard = new Scanner(System.in);
Random randNum = new Random();
System.out.println(enemyObject.getType() + " is engaging!");
//do while inCombat is true
do
{
System.out.println("1. Attack\n2. Block\n3. Dodge\n4. Escape & Evade");
combatChoice = keyboard.nextInt();
//player's turn
switch(combatChoice)
{
case 1:
compResponse = (randNum.nextInt(151)+50)/100;
if (compResponse < evadeChance)
{
System.out.println(enemyObject.getType() + " evaded attack!");
damage=0;
}
else
{
damage = playerObject.getAttack() - enemyObject.getDefense() + randNum.nextInt(playerObject.getAttack() + 1);
if (damage<0)
damage = 0;
enemyObject.setHealth(enemyObject.getHealth() - damage + defense);
if (defense != 0)
{
sum = damage - defense;
System.out.println("Attack: "+damage + " - Block: " + defense + " = Damage " + sum);
}
else
{
System.out.println("Damage: "+damage);
}
enemyObject.displayEnemyHealth();
}
evadeChance = 0;
defense = 0;
break;
case 2:
defense = playerObject.getDefense() - enemyObject.getAttack();
if (defense > 0)
defense = randNum.nextInt(playerObject.getDefense())*9/10;
else if (defense == 0)
compResponse = randNum.nextInt(1);
switch (compResponse)
{
case 0: defense = 0;
case 1: defense = playerObject.getDefense()*5/10;
}
defense = randNum.nextInt(playerObject.getDefense())*1/10;
System.out.println("Block: " + defense);
break;
块功能包含在底部的情况2中。我从一开始就包含了所有内容,以防上述内容影响它。我把下面的一切都搞砸了,因为它太长了。
现在在这种情况下,playerObject.getDefense()为4,enemyObject.getAttack()为5。 无论如何计算到10.我真正不明白的是这个如何计算为0,然后通过循环再循环6次,即使它应该在敌人的下一次攻击之后终止。然后变为10而没有输入敌人对象,因为它没有能力使用阻止?
答案 0 :(得分:0)
要求别人阅读和理解这是很多信息。也许你可以用编程术语来提问,而不是对游戏的完整解释?
无论如何,这是否可能是if
case 2
中缺少括号引起的?切换代码将始终执行,即使它是缩进的。