gpt4 book ai didi

C 计算未按预期运行

转载 作者:行者123 更新时间:2023-11-30 20:05:22 25 4
gpt4 key购买 nike

您好,我目前正在尝试用 c 语言创建一个简单的游戏,该游戏基于具有不同人工智能玩家的 map 。

我已经对计算进行了编程,以计算出健康损失的数量,尽管我确信我背后的数学是正确的,但 c 中的实现似乎不起作用!我可能错过了一个简单的点,但我将放置未按预期工作的代码摘录。

random1 = Numbergen(50);
cal1 = (100 - random1)/100;
random2 = Numbergen(50);
cal2 = (100 - random2) / 100;
PtrPlayer[attacker].health = (double)(PtrPlayer[attacker].health * cal1);
PtrPlayer[ncount].health = (double)(PtrPlayer[ncount].health * cal2);
printf("There was a battle but both players drawed and retreated.\n");
return 1;

Numbergen 是一个基于时间种子计算随机数的函数,50 是我希望它返回的最大数字。

cal1 和 2 应存储一个十进制数,例如 0.75,以减少 25% 的生命值,这就是 cal 计算应该执行的操作,但是在调试时,无论随机数是什么,它们都显示为零值。

这应该通过取随机数来实现,比如说从 100 到 75 的 25 倍,然后除以 100 得到一个十进制乘数,然后可以使用该乘数将生命值减少 25%。生命值从 100 开始,因此,例如,它将导致 100*0.75,这应该让我拥有 75 生命值,但 cal one 存储 0,结果生命值降至零。

需要明确的是,cal1 和 2 都是 float ,以允许小数位。

如果有人能指出我可能出错的地方,我将非常感激!如果我错过了一些重要的事情,请告诉我,我会尽力解释。

另请注意,我只是编程初学者,所以请不要用 super 复杂的代码来攻击我!

根据要求,random1 和 2 都是整数
PtrPlayer[].health 设置为整数
cal1 和 2 设置为 float

最佳答案

cal1 = (100 - random1)/100;

由于 random1 是一个 int,而 100 是一个 int(100 - random1 ) 也是一个 int。当您对两个整数操作数使用 / 运算符时,将执行截断整数除法。

如果您想要浮点除法,请将 / 的至少一侧转换为浮点类型:

cal1 = (100 - random1) / 100.0f;
// float literal ^^^^^^

...或者...

cal1 = (float)(100 - random1) / 100;

简单地转换除法结果不会有任何效果,因为 C 表达式的类型是严格从内到外确定的。

关于C 计算未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31989061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com