我的骰子游戏遇到了麻烦。我有一个任务:
游戏规则如下: 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'
答案 0 :(得分:1)
你还没有满足游戏规则。您的代码需要7和11作为赢家,其他任何数字作为输家。
7/11检查后,您需要检查2,3或12,如果为真则打印“丢失”消息。如果没有,你有点号,你需要提示用户继续滚动,直到他得到点数(赢)或7(输)。
您还需要跟踪main
中的赢/输。您需要在循环中调用playGame
,提示用户继续每次迭代。
答案 1 :(得分:1)
这里有一些问题。
playGame()
的返回值。您应该存储结果并对其进行操作。我在下面为您提供了完整的代码清单。
代码清单
/*******************************************************************************
* 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.