双骰子游戏及功能

标签 c

我正在使用 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/

相关文章:

c - 无优化 (-O0) 会导致嵌入式 MCU 崩溃

c++ - msys/MinGW,即使安装了也找不到libpng,尝试编译xpdf(特别是pdftopng)

c - 如何在 lib 错误中获取未解析的外部?

c - C 中的数字时钟 - 如何更新秒数?

c - 将 Selenium 与 C 一起使用

c - 使用纹理和渲染器仅更新屏幕的一部分?

c - 我如何在 Arch Linux 上安装 gstreamer(gst lib)

c - 我如何修复我的零钱所欠硬币的 'end of non-void function'?

c - 需要一个指针声明来保存整数数组的地址

c - 程序员如何在C之上开发出一种编程语言?