【问题标题】:Craps game in cc中的掷骰子游戏
【发布时间】:2020-08-02 09:15:08
【问题描述】:

首先,我真的很抱歉我的英语不好 我试图尽可能多地解释这个问题

c 掷骰子游戏

计算机掷两个骰子,如果结果是 7 或 11,则直接获胜,或者结果为 2,3 和 12,则直接失败。

如果总和是 4、5、6、8、9 或 10,它希望您再次掷骰子。这次你必须找到相同的和 4,5,6,8,9 或 10 如果您在找到相同的数字之前获得了 7 或 11,那么您就输了。 (这就是问题所在,即使计算机两次找到相同的数字。它不会打印出“你赢了”。 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)?回复

骰子正在滚动... 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;
}

【问题讨论】:

  • 您的问题是什么?你把代码贴出来了,有问题吗?
  • 请阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist
  • 如果骰子是 4、5、6、8、9 或 10,我希望计算机找到相同的数字并打印为“你赢了”。
  • 您没有解释您发布的(太多)代码遇到的任何问题,也没有提出任何问题。转储大量代码并期望我们都弄清楚您在问什么然后回答它是不合适的。请花一些时间阅读How to Askminimal reproducible example,然后返回edit 您的帖子并提出更完整的问题,以便我们提供帮助。

标签: c


【解决方案1】:

如果在找到7 之前找到原始号码,您发布的代码似乎会打印出“您赢了”。也许您修正了翻译中的错误?

但是,如果在找到重复项之前滚动11,它不会导致丢失。

我还看到了一些潜在的改进:

  • 您应该#include &lt;stdlib.h&gt; 使用srandrand(gcc 会自动为您修复此问题)。见here。一般尝试解决编译器产生的警告(如果你不明白,请在线搜索)。
  • 我建议只在程序开始时使用srand(time(NULL)),因为如果用户快速玩游戏,他们最终会得到相同的游戏,直到第二个游戏结束。

  • 您可以使用rand()%6+rand()%6+2 来模拟distribution of dice rolls(例如,7 比任何其他数字更有可能)。只需使用rand()%11+1 即可获得均匀分布。

  • 在您调用rand 后,您直接用++1 增加了掷骰子数。在调用rand 之后添加2 会更直接。

  • 无需检查掷骰子是否不确定。只需使用最终的else 并将sonuc=kazan 移动到块中。

  • 您可能希望考虑使用 jump table 而不是 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;
}

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多