我正在制作一个基于文字的小游戏。
当用户按下“1”或点击程序时,用户有一些攻击选项:
while(1)
{
if (round > 1) //First time no pause
Sleep(500); //Cleans up timing... i like it
score_round = 0;
//This is so ugly fix it!
printf("Round %d: \nChoose Your Attack:(1/2/.../D)\n\n1.Jab\t\tOr D to defend\n2.Cross\n3.Hook\n",round);
action = getch();
//Create the damage for each player
if(action == '1')
{
UserAttack = rand() % (UserStats[0]-2);
EnemyAttack = rand() % (EnemyStats[0]-3);
break;
}
else if(action == '2')
{
UserAttack = rand() %UserStats[0];
EnemyAttack = rand() %EnemyStats[0];
break;
}
else if(action == '3')
{
UserAttack = rand() %(UserStats[0]+4);
EnemyAttack = rand() %(EnemyStats[0]+2);
break;
}
else if(action == 'D' || action == 'd')
{
UserAttack= 0;
EnemyAttack = defense(); //Defense randomizes a number upto 3 if it is 1 the enemy attack is 1 point
break;
}
else //Ensures the key pressed is a valid choice
{
system("cls");
printf("INVALID ACTION PRESS ANY KEY TO RECHOOSE:"); getch(); //TODO: Pressing this clears the health screen!
system("cls"); //Clears screen just in case
continue;
}
}
我运行调试器并且所有变量都没问题,但调用堆栈(我不知道返回此内容)
如果您需要更多信息,请告诉我们!谢谢!
答案 0 :(得分:1)
您可以为userstats或enemystats设置较低的值,从而导致表达式
EnemyStats[0]-3
为零。这导致采取mod 0,这是不好的。
您可能会使用类似
的内容x ? y%x : x
获得您想要的行为。
答案 1 :(得分:0)
我认为switch case是一个更好的选择,如果违反了代码可读性,那就太多了。
答案 2 :(得分:0)
我通过用
替换if(action =='1'){}中的内容来修复它 if(UserStats[0] <= 2) UserAttack = rand() %2; //Ensure users strength is above 2
else UserAttack = rand() % (UserStats[0]-2);
if(EnemyStats[0] <= 3) EnemyAttack = rand() %2; //Ensures enemies strength is above 3
else EnemyAttack = rand() % (EnemyStats[0]-3);
break;
感谢大家的帮助和支持!我确信有一种更简单的方法可以做到这一点,但我喜欢这种方式,因为它可以帮助我更好地理解未来使用的代码! :)