[英]Craps game and function
我正在使用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');
除了@dbush最佳答案中指出的算法问题外,骰子掷骰没有正确模拟。 @克拉斯·林贝克
// better name: roll_2dice()
int roll_dice(void){
// int sum = rand()%6 + rand()%6; // wrong simulation
int sum = (rand()%6 + 1) + (rand()%6 + 1); // corrected.
return sum;
}
此外,良好的rand()
在计算时间上往往很昂贵。 仅使用1 rand()
调用的替代方法
int roll_2dice(void){
int r = rand()%36; // 36 combinations
int die1 = r/6 + 1;
int die2 = r%6 + 1;
return die1 + die2;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.