我正在使用 C 创建一种掷骰子游戏。
如果总和=7,11 获胜; 如果 sum=2,3,12 输; 否则继续。
我在使用 play_game() 函数时遇到一些问题,因为该函数的返回不正确。例如,如果总和为 3,有时不会返回 1,而是返回 2。
int roll_dice(void);
int play_game(void);
int main(){
int sum;
char play;
do{
roll_dice();
play_game();
if (play_game()==0){
printf ("\nYou win!");
printf ("\nPlay again? ");
play=getchar();
}
else {
if (play_game()==1) {
printf ("\nYou lose!");
printf ("\nPlay again? ");
play=getchar();
}
else {
if (play_game()==2) play='y';
else system ("pause");
}
}
}
while (play=='y');
return 0;
}
int roll_dice(void){
int sum = rand()%6 + rand()%6;
return sum;
}
int play_game(void){
int sum = roll_dice();
printf ("\nYou rolled: %d", sum);
if ((sum==7)||(sum==11)) return 0;
else {
if ((sum==2)||(sum==3)||(sum==12)) return 1;
else {
printf ("\nYour point is %d", sum);
return 2;
}
}
}
最佳答案
您调用 play_game
的频率太高了。
您在循环开始时调用它一次,但丢弃结果。您再次调用它并检查结果是否为 0。如果不是,您再次调用它并检查结果是否为 1,如果不是,您再次调用它并检查结果是否为2。
您只需在每个循环中调用 play_game
一次并存储返回值,以便稍后检查,而无需再次调用该函数。
do{
const int result = play_game(); // save result
if (result ==0){ // use saved result
printf ("\nYou win!");
printf ("\nPlay again? ");
play=getchar();
}
else {
if (result ==1) { // use saved result
printf ("\nYou lose!");
printf ("\nPlay again? ");
play=getchar();
}
else {
if (result ==2) play='y'; // use saved result
else system ("pause");
}
}
}
while (play=='y');
关于双骰子游戏及功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393145/