int main()
{
int StrFinal = 10;
int DefFinal = 20;
int IntFinal = 40;
int hp = 10;
int eStrength = 30;
int eDefense = 40;
int eIntelligence = 25;
int eHP = 10;
/*
* Begin Battle Sequence
*
*/
printf("Battle Start! \n");
while(eHP>0||hp>0)
{
int act;
printf("Player HP: %d Enemy HP: %d \n ", hp, eHP);
printf("1 - Attack \n 2 - Magic \n Select Your Move: ");
scanf("%d",&act);
switch (act)
{
case 1:
eHP = eHP - StrFinal/eDefense*5;
printf("You attacked the enemy! \n ");
break;
case 2:
eHP = eHP - IntFinal/eIntelligence*5;
printf("You Shocked the enemy! \n ");
break;
default:
printf("Invalid Input");
}
printf("The enemy attacked you! \n");
hp = hp - eStrength/DefFinal*5;
printf(" Enemy HP: %d \n",eHP);
printf(" Your HP: %d \n", hp);
}
return 0;
}
这是我为文本游戏的战斗序列编写的简单代码。我遇到的问题是用户和敌人的健康输出不正确。通过数学计算,被攻击的敌人HP应该减少1.25 ..从8.75到8截断。但输出不影响敌人的HP。
如果我选择2,则输出为hp = 5
敌人hp = 5
我觉得这是一个愚蠢的错误或我忽略的东西。我似乎无法找到它。任何帮助表示赞赏
另外:敌人攻击时的伤害计算似乎也不正确
答案 0 :(得分:3)
所有变量都是int .. 您需要使用浮点变量来保存小数 主要针对hp和ehp
答案 1 :(得分:1)
你的问题就在这里 -
StrFinal/eDefense
在您的情况下,评估为 10/40 0.25 。由于两个变量都是整数,因此该值被截断为 0 。
确保它按照您期望的方式评估任何变量(或两者)的浮点数。
(float)StrFinal/eDefense
或
StrFinal/(float)eDefense
您会发现eHP按预期评估为8。
答案 2 :(得分:0)
案例1:
eHP = eHP - StrFinal/eDefense*5 = 10 - 10/40*5 = 10 - 0 * 5 = 10;
这是因为隐式转换。所有数字均为int
类型。如有必要,每个子表达式都会相应转换。
10/40
会产生浮动,但会转换为int
。因此,您乘以0
而不是0.25
。
只要有float
类型,计算就会产生您期望的结果。
其他情况类似。
顺便说一句include <stdio.h>
,您正在使用scanf(...)
。