对不起,如果问题不清楚,英语不是我的主要语言,所以我不知道如何撰写。我的老师做了一个练习来计算谁将在决斗中赢得他们的健康和攻击。我想稍微扩大一点,增加护甲,重要机会和致命伤害作为额外的统计数据,现在我试图弄清楚如何应用伤害中的关键几率。这是我到目前为止的地方。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int HP;
int damage;
int armor;
float crit_damage;
float crit_chance;
} atributes;
//how to implement crit_chance?
//using a function?
//divide 100 for the crit_chance
//Ex: crit_chance = 25 ; 100/25 = 4
//generate a random number between 1 and 4
//if the number is 4 the crit_chance is sucessfull
//if not then the crit_chance fails
//aply then the result of the funcion to character[i].crit_damage
int main() {
int i, rounds = 0;
atributes character[2];
for(i = 0; i < 2; i++) {
printf("\tCharacter %d atributes\n", i+1);
printf(" Damage = ");
scanf("%d", &character[i].HP);
printf(" HP = ");
scanf("%d", &character[i].damage);
printf(" Armor = ");
scanf("%d", &character[i].armor);
printf(" Crit Damage = ");
scanf("%f", &character[i].crit_damage);
printf(" Crit Chance = ");
scanf("%f", &character[i].crit_chance);
printf("\n");
}
while ((character[0].HP > 0) || (character[1].HP > 0)) {
character[0].HP -= (character[1].damage * (character[1].crit_damage) - character[0].armor * 2);
character[1].HP -= (character[0].damage * (character[0].crit_damage) - character[1].armor * 2);
rounds++;
};
if (character[0].HP > character[1].HP) printf("\tCharacter 1 won after %d rounds!", rounds);
else if (character[0].HP < character[1].HP) printf("\tCharacter 2 won after %d rounds!", rounds);
else printf("\tThe duel ended in a tie after %d rounds", rounds);
return 0;
}
答案 0 :(得分:1)
以下作品:
int is_critical = (rand()%4==3);
rand()
是stdlib.h
提供的函数,它返回0
和RAND_MAX
之间的值(stdlib.h
中定义的常量)。
rand()%4
会在此值除以4时给出余数:这将是数字0,1,2或3。
要求rand()%4==3
询问结果是否等于3(尽管你也可以选择0,1或2)。由于3代表结果的25%,因此对应于您想要的内容,如果有is_critical
,则RAND_MAX
为1。
但需要注意的是,由于int is_critical = (rand()/(float)RAND_MAX)>0.75;
可能无法被4整除,因此某些模数结果的发生几率略高,因此您永远不会想要生成对于任何真正重要的事情(科学,金融,加密和&amp; c),这种随机数字。
您可以按如下方式推广此方法:
rand()
由于RAND_MAX
和RAND_MAX
都给出了整数且rand()
大于RAND_MAX
,因此除以它们为0.所以我们将$> gcloud auth print-access-token
ya29.GlxcBCtxyP3xW1JwKL62vh4h_8W0vqH9awoCXgcYkOguBP2DKc4JxgHpX6HHuaaaaaaaaaaaaa
转换为浮点数。结果是&#34;统一&#34;分布数在0-1范围内。这大于0.75,有25%的几率,这就是你想要的。