簡體   English   中英

c 中的擲骰子游戲

[英]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>使用srandrand (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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM