简体   繁体   English

退出C骰子游戏的功能

[英]Quit function for C dice game

Hi this is my first post to stackoverflow i'm creating a Dice Game in C and i'm having difficulty adding a quit feature after each round. 嗨这是我的第一篇文章stackoverflow我在C中创建一个骰子游戏,我很难在每轮后添加一个退出功能。 once the user makes their prediction the game loop runs again and re-roles 4 new dice values. 一旦用户做出预测,游戏循环再次运行并重新调整4个新的骰子值。

I would like to include a function that asks the player if they want to keep going or exit via a (y/n) input. 我想要包含一个函数,询问玩家是否想要继续或通过(y / n)输入退出。

below is the code for my dice game 下面是我的骰子游戏的代码

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#include <time.h>

int main ()
{
    while(1)
    {
        srand ( time(NULL) );
        int i;
        int DiceR[4]; // Dice Array
        char prediction; //prediction input for high low or equal


        while (1)
        {

          for (i=0; i<1; i++)
    {
        DiceR[0] = (rand()%6) + 1;
        printf("\n%d \n", DiceR[0]);

        DiceR[1] = (rand()%6) + 1;
        printf("%d \n", DiceR[1]);

        DiceR[2] = (rand()%6) + 1;
        printf("%d \n", DiceR[2]);

        DiceR[3] = (rand()%6) + 1;

    }

        printf("\nDo you think the next dice roll will be higher or lower than %d", DiceR[2]);
        printf("\nPlease enter L = Lower E = Equal H = higher or X = Exit:\t");
        scanf("\n%c", &prediction);

        switch(prediction)
    {
    case 'L' : case 'l':
        if (DiceR[3] < DiceR[2]) //Lower
            printf("\ncongrats DiceRoll 4 is %d\n", DiceR[3]); //win
        else
            printf("\nYou lose, the last roll was %d\n", DiceR[3]); //Lose
        break;
    case 'E' : case 'e':
        if (DiceR[3] == DiceR[2]) //Equal
            printf("\ncongrats DiceRoll 4 is %d\n", DiceR[3]); //win
        else
            printf("\nYou lose, the last roll was %d\n", DiceR[3]); //Lose
        break;
    case 'H' : case 'h':
        if (DiceR[3] > DiceR[2]) //Higher
            printf("\ncongrats DiceRoll 4 is %d\n", DiceR[3]); //win
        else
            printf("\nYou lose, the last roll was %d\n", DiceR[3]); //Lose
        break;

    default:
        printf("that value is not recognized");
        break;


    }



        }
    }
    }

You probably want a flag for this before the first while , like, bool running = true; 你可能想在第一之前,此标志while一样, bool running = true; , set it to false when/where you wanted to exit, then check that in the while s instead of an infinite loop. ,当你想要退出时将它设置为false,然后在while s中检查它while不是无限循环。

You can create a flag and use the condition (flag==true); 您可以创建一个标志并使用条件(flag==true); to keep the code running while the user wants it 在用户需要时保持代码运行

I would like to include a function that asks the player if they want to keep going or exit via a (y/n) input. 我想要包含一个函数,询问玩家是否想要继续或通过(y / n)输入退出。

A function which asks the user at the start of each roll to continue or stop 在每个卷的开始处要求用户继续或停止的功能

int cont()
{
    char ch;
    printf("\n want to continue or stop? y/n : \n");
    scanf(" %c",&ch); //note a space before %c to consume white spaces
    if(ch=='y'||ch=='Y')
        return 0; //if yes i.e, 'y' return 0
    return 1; //else return 1
}

just check for the return value of function at the start of each roll this way : 只需在每次滚动开始时检查函数的返回值:

(follow the comments to understand) (按照评论理解)

//#include .......

int cont()
{
    char ch;
    printf("\n want to start/continue? y/n : \n");
    scanf(" %c",&ch);
    if(ch=='y'||ch=='Y')
        return 0;
    return 1;
}

int main ()
{
    int flag=0; //initialize flag with a value of zero

    while(1) //first while loop
    {
        //srand and other variables initialization

        while (1) //second while loop
        {    
          //don't use if(cont()) here....

          //for loop

          //printing and scanning prediction

            switch(prediction)
            {

             //all other cases........              

             case 'X': case 'x': //you seem to have forgotten mentioning this case :)
                 flag=1;
                 break;

             //default case
            }


            //use it here instead sso that you'd get it at the end of each turn 
            if(cont()) //function call : here you ask user for y/n input
            {
              //if user enter no i.e, 'n', then you enter the if block
               flag=1;
               break;
            }

            if (flag==1) //checking for flag; useful when user enters 'X'
            break; //break out of first while loop
        }

        if(flag==1) //checking for flag
            break; //break out of second while loop
    }

}

here is a 'corrected' version of the code. 这是代码的“更正”版本。

Note, printing the values of the calls to rand() might not be the best way, especially as the user plays the game awhile and recognizes the pattern(s) 注意,打印调用rand()的值可能不是最好的方法,特别是当用户玩游戏一段时间并识别模式时

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
//#include <string.h>
//#include <math.h>
#include <time.h>

#define NUM_OF_DICE (4)
#define MAX_DICE_VALUE (6)

int main ()
{
    srand ((unsigned) time(NULL) );
    int DiceR[ NUM_OF_DICE ]; // Dice Array
    char prediction; //prediction input for high low or equal


    while (1)
    {
        for( size_t i=0; i<NUM_OF_DICE; i++)
        {
            DiceR[i] = (rand()%MAX_DICE_VALUE) + 1;
            printf("\n%d \n", DiceR[i]);
        }

        printf("\nDo you think the next dice roll will be higher or lower than %d", DiceR[2]);
        printf("\nPlease enter L = Lower E = Equal H = higher or X = Exit:\t");

        if( 1 != scanf("\n%c", &prediction) )
        { // then scanf failed
            perror( "scanf for inputting prediction failed");
            exit( EXIT_FAILURE );
        }

        // implied else, scanf successful

        prediction = (char)toupper(prediction);

        if( 'X' == prediction )
        {
            return 0;
        }

        switch(prediction)
        {

            case 'L' :
                if (DiceR[3] < DiceR[2]) //Lower
                    printf("\ncongrats DiceRoll 4 is %d\n", DiceR[3]); //win
                else
                    printf("\nYou lose, the last roll was %d\n", DiceR[3]); //Lose
                break;

            case 'E' :
                if (DiceR[3] == DiceR[2]) //Equal
                    printf("\ncongrats DiceRoll 4 is %d\n", DiceR[3]); //win
                else
                    printf("\nYou lose, the last roll was %d\n", DiceR[3]); //Lose
                break;

            case 'H' :
                if (DiceR[3] > DiceR[2]) //Higher
                    printf("\ncongrats DiceRoll 4 is %d\n", DiceR[3]); //win
                else
                    printf("\nYou lose, the last roll was %d\n", DiceR[3]); //Lose
                break;

            default:
                printf("input must be 'L' or 'H' or 'E' or 'X'\n");
                break;
        } // end switch
    }
} // end function: main

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM