C程序骰子游戏

时间:2015-09-25 19:42:30

标签: c

我的骰子游戏遇到了麻烦。我有一个任务:

游戏规则如下: 1.玩家滚动骰子并累加面值。 2.如果第一次掷骰是7或11,则玩家获胜。 3.如果第一个掷骰是2,3或12,则玩家会失败。 4.如果第一个掷骰是任何其他数字,则该总和成为玩家的点数。 要获胜,玩家必须继续掷骰子,直到他/她“明白”。 6.在该点之前滚动一个7,玩家输了。

1)将WON和LOST定义为程序中的宏。对于WON使用0的值,对于LOSE使用1的值 2)使用函数原型int rollDice(void);

实现一个函数

rollDice()应该使用rand()随机生成1到6之间的数字

返回rand()

生成的数字

3)实现一个函数,函数原型为int playGame(void);

当玩家准备好玩游戏时,他会使用按键ENTER滚动骰子

如果用户赢得他/她的第一次掷骰,请祝贺玩家并使用WON返回

如果用户在他/她的第一次掷骰中失败,请祝贺玩家并以LOSE返回

让用户继续玩,直到他获胜/失败,给予适当的按摩并以最后一次滚动值完成游戏。

4)你的主要()应该 调用你的函数playGame()

询问用户是否要继续玩另一款游戏,跟踪损失和获胜的次数

当用户决定完成比赛时,显示他的胜负数。

根据用户获胜或失败的数量,为用户提供适当的信息

返回值为EXIT_SUCCESS

这是我现在拥有的,但它告诉我有错误。任何人都可以帮我完成这项任务吗?

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

#define WON 0
#define LOSE 1

int rollDice(void);
int playGame(void);

int rollDice(void) {
    return ((rand() % 6) + 1);
}

int playGame(void){
  int dice_1 = 0;
  int dice_2 = 0;
  int sum = 0;
  time_t t;
  srand(time(&t));
  printf("ROLL THE DICE WITH [ENTER]\n");
  dice_1 = rollDice();
  dice_2 = rollDice();
  sum = dice_1 + dice_2;
  if (sum == 7 || sum == 11){
   printf("Congratulations you roll %d and WON at your first try!", sum);
  }
  else {
    printf("Your roll was %d ,you lose try agian.\n", sum);
  }
  return 0;
}

int main (void){
  playGame();
}

错误是(在gcc linux中):

x.c:9:1:错误:在程序中错误'\ 302'

int rollDice(void);

^

x.c:9:1:错误:在程序中错误'\ 240'

x.c:10:1:错误:在程序中错误'\ 302'

int playGame(void);

^

x.c:10:1:错误:在程序中错误'\ 240'

x.c:12:1:错误:在程序中错误'\ 302'

int rollDice(void){

^

x.c:12:1:错误:程序中错误'\ 240'

x.c:16:1:错误:在程序中错误'\ 302'

int playGame(void){

^

x.c:16:1:错误:程序中错误'\ 240'

2 个答案:

答案 0 :(得分:1)

你还没有满足游戏规则。您的代码需要7和11作为赢家,其他任何数字作为输家。

7/11检查后,您需要检查2,3或12,如果为真则打印“丢失”消息。如果没有,你有点号,你需要提示用户继续滚动,直到他得到点数(赢)或7(输)。

您还需要跟踪main中的赢/输。您需要在循环中调用playGame,提示用户继续每次迭代。

答案 1 :(得分:1)

这里有一些问题。

  1. 您没有阅读/使用playGame()的返回值。您应该存储结果并对其进行操作。
  2. 你的逻辑并不完整,因为“为点而战”的标准和两者都是相同的。
  3. 您没有任何强制程序等待用户按 ENTER 的地方。
  4. 我在下面为您提供了完整的代码清单。

    代码清单

    /*******************************************************************************
     * Preprocessor directives
     ******************************************************************************/
    #include <stdio.h>
    #include <ctype.h>
    #include <time.h>
    #include <stdlib.h>
    #include <stdbool.h>
    
    #define WON 0
    #define LOSE 1
    
    
    /*******************************************************************************
     * Function prototypes
     ******************************************************************************/
    int rollDice(void);
    int playGame(void);
    
    
    /*******************************************************************************
     * Function definitions
     ******************************************************************************/
    /*----------------------------------------------------------------------------*/
    int rollDice(void) {
        return ((rand() % 6) + 1);
    }
    
    /*----------------------------------------------------------------------------*/
    int playGame(void){
        int dice_1 = 0;
        int dice_2 = 0;
        int sum = 0;
        int result;
        int point = 0;
        time_t t;
        bool playForPoint = false;
    
        srand(time(&t)); // Initialize random seed
        printf("ROLL THE DICE WITH [ENTER]\n");
        fgetc(stdin);
        dice_1 = rollDice();
        dice_2 = rollDice();
        sum = dice_1 + dice_2;
        printf("D1:%2d - D2:%2d - Sum:%2d\n", dice_1, dice_2, sum);
    
        switch ( sum )
        {
            case 7:
            case 11:
                result = WON;
                break;
            case 2:
            case 3:
            case 12:
                result = LOSE;
                break;
            default:
                playForPoint = true;
                point = sum;
                printf("Playing for point:%d. Please hit enter.\n", point);
                fgetc(stdin);
                break;
        }
    
        while ( playForPoint )
        {
            dice_1 = rollDice();
            dice_2 = rollDice();
            sum = dice_1 + dice_2;
            printf("D1:%2d - D2:%2d - Sum:%2d\n", dice_1, dice_2, sum);
            if ( sum == 7 ) {
                playForPoint = false;
                result = LOSE;
            } else if ( sum == point ) {
                playForPoint = false;
                result = WON;
            } else {
                printf("Please roll the dice again with [ENTER].\n");
                fgetc(stdin);
            }
        }
    
        return result;
    }
    
    /*----------------------------------------------------------------------------*/
    int main (void){
        int result = playGame();
        switch ( result )
        {
            case WON:
                printf("You won the game.\n");
                break;
            case LOSE:
                printf("You lost the game.\n");
                break;
            default:
                printf("Something went wrong in the program.\n");
                break;
        }
    
        return 0;
    }
    

    示例输出

    ROLL THE DICE WITH [ENTER]
    
    D1: 3 - D2: 5 - Sum: 8
    Playing for point:8. Please hit enter.
    
    D1: 3 - D2: 1 - Sum: 4
    Please roll the dice again with [ENTER].
    
    D1: 3 - D2: 2 - Sum: 5
    Please roll the dice again with [ENTER].
    
    D1: 1 - D2: 5 - Sum: 6
    Please roll the dice again with [ENTER].
    
    D1: 3 - D2: 2 - Sum: 5
    Please roll the dice again with [ENTER].
    
    D1: 2 - D2: 6 - Sum: 8
    You won the game.