繁体   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