所以我一直在尝试编写我的第一个命令行游戏代码。我已经用C编码了大约几个月了,这是我的第一种编码语言。在遇到必须处理指针转换的问题之前,我没有任何真正的问题。
这是我的职能:
void attack(int * life, int * armor, char * name){
int difference;
const int damage = 15;
print_Name(name);
printf(" attacks!\n");
if((*armor) > damage){
printf("The armor was able to defend the damage!\n\n\n");
(*armor) = armor - damage;
}
if((*amor) <= damage){
printf("Your Armor broke!\n");
difference = damage - (*armor);
(*life) = (*life) - difference;
(*armor) = 0;
printf("The attack caused %i damage.\n\n\n", difference);
}
else if ((*armor) == 0){
printf("\nThe attack has caused %i damage.\n\n\n", damage);
(*life) = life - damage;
};
}
为了更好的理解,我将变量从德语翻译成英语,但最终可能会出现一些错字。
问题是,我的游戏可以运行好几轮。但是在大约20-30轮之后,我注意到在某些时候伤害输出是错误的,现在我遇到了这个问题:
我知道我的if出了点问题,并且有更好的方法来处理指针...您能帮我解决我的问题吗?
如果您阅读了编译器发出的警告,它们将告诉您确切的问题以及解决方法:
q58348638.c:11:18: warning: incompatible pointer to integer conversion assigning
to 'int' from 'int *'; dereference with * [-Wint-conversion]
(*armor) = armor - damage;
^ ~~~~~~~~~~~~~~
*( )
q58348638.c:24:13: warning: incompatible pointer to integer conversion assigning
to 'int' from 'int *'; dereference with * [-Wint-conversion]
(*life) = life - damage;
^ ~~~~~~~~~~~~~
*( )
如果仍然不清楚,问题在于您将armor
的值设置为armor
的地址减去damage
的值。相反,您需要将armor
的值设置为armor
的value减去damage
的值,因此在*
之前使用armor
。