[英]Craps game in c
首先,我真的很抱歉我的英语不好我试图尽可能多地解释这个问题
c 中的掷骰子游戏
电脑掷两个骰子,如果结果是 7 或 11,您直接赢,或者结果是 2,3 和 12,您直接输。
如果总和是 4、5、6、8、9 或 10,它希望您再次掷骰子。 这一次,如果你得到 7 或 11,你必须找到相同的总和 4、5、6、8、9 或 10,然后才能找到你输掉的相同数字。 (这就是问题所在,即使计算机两次找到相同的数字。它不会打印出“你赢了。” https://imgur.com/KL358Fi
示例:掷骰子... 11 你赢了。
你想再玩一次吗(y/Y – n/N)? 是的
骰子正在滚动... 3 你输了
你想再玩一次吗(y/Y – n/N)? 是的
骰子正在滚动... 12 Kaybettiniz
Yeni oyun oynansin mi (y/Y – n/N)? 是的
骰子正在滚动... 7 你赢了。
你想再玩一次吗(y/Y – n/N)? 是的
骰子在滚动... 7 你赢了
你想再玩一次吗(y/Y – n/N)? 是的
骰子正在滚动... 9 结果不清楚,将再次掷骰子。 滚动(r/R)?
骰子正在滚动... 8 结果不清楚,将再次掷骰子。 滚动(r/R)?
骰子正在滚动... 11结果不清楚,将再次滚动骰子。 滚动(r/R)? R
骰子正在滚动... 9 你赢了。
Yeni oyun oynansın mı (y/Y –(n/N)? e
Zarlar atiliyor... 5结果不清楚,将再次掷骰子。 滚动 (r/R) r
Zarlar atiliyor... 10 结果不明确,将再次掷骰子。 滚动 (r/R) r
Zarlar atiliyor... 7 你输了。
你想再玩一次吗(y/Y – n/N)? ñ
CRAPS 已经结束。
#include<stdio.h>
#include <time.h>
int main()
{
char ynd;
int kazan=0;
int sonuc=0;
char yoyun;
do{
printf("dice is rolling ");
srand(time(NULL));
kazan = rand()%11+1;
kazan++;
if( kazan==7 || kazan==11 )
{
printf(" %d you won.\n",kazan);
}
else if( kazan==2 || kazan==3 || kazan==12 )
{
printf(" %d you lose.\n",kazan);
}
sonuc=kazan;
if( kazan==4 || kazan==5 || kazan==6 || kazan==8 || kazan==9 || kazan==10 )
{
do{
printf("%d result is unclear, dice will be rolled again roll(r/R) ",kazan);
scanf(" %s",&ynd);
printf("dice is rolling ");
kazan = rand()%11+1;
kazan++;
if(kazan == sonuc)
{
printf("%d you won",kazan);
break;
}
else if(kazan==7){
printf("%d You lose",kazan);
break;
}
}
while(ynd=='r' || ynd=='R');
}
printf("want to play a new game ( y/Y-n/N )");
scanf(" %s",&yoyun);
} while(yoyun=='y' || yoyun=='Y');
printf("craps has ended");
return 0;
}
如果在找到7
之前找到原始数字,您发布的代码似乎会打印出“您赢了”。 也许您修正了翻译中的错误?
但是,如果在找到副本之前掷出11
,它不会导致损失。
我还看到了一些潜在的改进:
#include <stdlib.h>
使用srand
和rand
(gcc 会自动为您修复此问题)。 见这里。 通常尝试解决编译器产生的警告(如果您不理解,请在线搜索)。 我建议只在程序开始时使用srand(time(NULL))
,因为如果用户快速玩游戏,他们最终会得到相同的游戏,直到第二个游戏结束。
您可以使用rand()%6+rand()%6+2
来模拟掷骰子的分布(例如, 7
比任何其他数字更有可能)。 简单地使用rand()%11+1
会导致均匀分布。
在调用rand
后,您直接用++
和1
增加了掷骰子。 在调用rand
之后添加2
会更直接。
无需检查掷骰子是否不确定。 只需使用final else
并将sonuc=kazan
移动到块中。
您可能希望考虑使用跳转表而不是if
语句,因为在输入(掷骰子)是紧密压缩的整数的情况下,它可能会更有效。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
char ynd;
int kazan=0;
int sonuc=0;
char yoyun;
srand(time(NULL));
do {
printf("dice is rolling ");
kazan = rand()%6+rand()%6+2;
if( kazan==7 || kazan==11 )
{
printf(" %d you won.\n",kazan);
}
else if( kazan==2 || kazan==3 || kazan==12 )
{
printf(" %d you lose.\n",kazan);
}
else
{
sonuc=kazan;
do {
printf("%d result is unclear, dice will be rolled again roll(r/R) ",kazan);
scanf(" %s",&ynd);
printf("dice is rolling ");
kazan = rand()%6+rand()%6+2;
if(kazan == sonuc)
{
printf("%d you won.\n",kazan);
break;
}
else if(kazan==7 || kazan==11){
printf("%d You lose.\n",kazan);
break;
}
} while (ynd=='r' || ynd=='R');
}
printf("want to play a new game ( y/Y-n/N )");
scanf(" %s",&yoyun);
} while(yoyun=='y' || yoyun=='Y');
printf("craps has ended.\n");
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.