[英]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.