C编程'掷骰子'游戏

Kan*_*les 2 c random numbers generator

我正在为我的C编程课程做一个学习任务,我被要求做以下事情:

任务2.掷骰子.

在掷骰子游戏中,"通行证"下注如下进行.使用两个六面骰子,掷骰子的第一卷骰子被称为"出来滚动".下注就赢得当滚出来是7或11,并且当滚出来是2失去,3个,或12.如果4,5,6,8,9或10被卷起在滚出来,这个数字变成了"重点".玩家继续滚动骰子直到7或点滚动.如果该点首先滚动,则玩家赢得下注.如果玩家首先掷出7,则玩家输了.

使用上述规则编写一个播放Craps游戏的程序,以便模拟没有人为输入的游戏.该计划应该只计算玩家是赢还是输,而不是要求下注.创建一个模拟滚动两个骰子并返回总和的函数.添加循环以使程序播放10,000个游戏.

添加计数器,计算玩家获胜的次数,以及玩家失败的次数.在10,000个游戏结束时,计算获胜概率,即Wins /(Wins + Loss)并输出该值.从长远来看,谁将赢得大多数Craps游戏,你还是房子?

这是我到目前为止所写的内容:

# include <stdio.h>
# include <stdlib.h>
# include <time.h>

// Craps Program
// Written by Kane Charles
// Lab 2 - Task 2

// 7 or 11 indicates instant win
// 2, 3 or 12 indicates instant los
// 4, 5, 6, 8, 9, 10 on first roll becomes "the point"
// keep rolling dice until either 7 or "the point is rolled"
//      if "the point" is rolled the player wins
//      if 7 is rolled then the player loses

    int wins = 0, losses = 0;
    int r, i;
    int N = 1, M = 12;
    int randomgenerator();

main(void){

    /* initialize random seed: */
  srand (time(NULL));
  /* generate random number 10,000 times: */
  for(i=0; i < 10000 ; i++){
     int r = randomgenerator();
     if (r == 7 || r == 11) {
        wins++;
     }
     else if (r == 2 || r == 3 || r == 12) {
        losses++;
     }
     else if (r == 4 || r == 5 || r == 6 || r == 8 || r == 9 || r == 10) {
        int point = r;
        int temproll;
        int *tr = &temproll;
        do
        {
             *tr = randomgenerator();

        }while (temproll != 7 || temproll != point);

        if (temproll == 7) {
            losses++;
        }
        else if (temproll == point) {
            wins++;
        }
     }
  }
    printf("Wins\n");
    printf("%d",&wins);
    printf("\nLosses\n");
    printf("%d",&losses);
}

int randomgenerator(){
    r = M + rand() / (RAND_MAX / (N - M + 1) + 1);
    return r;
}
Run Code Online (Sandbox Code Playgroud)

该程序始终以:

Wins:
0.000000
Losses:
0.000000
Run Code Online (Sandbox Code Playgroud)

虽然它应该显示(超过10000)该程序赢了多少次以及丢失了多少次.有人能帮我解决这个问题吗?我怀疑我可能需要使用指针代替wins++并且losses++因此分数保持全局.

请记住,我是很多新手,所以任何帮助将不胜感激.

Sha*_*our 5

我看到你的if陈述中的一个主要问题,main例如:

if (r = 7 || 11)
Run Code Online (Sandbox Code Playgroud)

你正在使用=赋值而不是==相等.接下来的问题是你似乎对如何||运作有误解.它看起来像要检查,如果r是两种7或11它实际上是:

if( (r == 7) || (r == 11) )
Run Code Online (Sandbox Code Playgroud)

您还创建本地temproll在您的do循环在这里:

 int temproll;
 do
 {
      int temproll = randomgenerator();
      ^^^^^^^^^^^^
 }while (temproll != 7 || point);
Run Code Online (Sandbox Code Playgroud)

这意味着do您离开后在循环中生成的值将丢失,后续if语句将检查未定义的值.据我所知,你可能意味着while:

 while (temproll != 7 && temproll != r );
Run Code Online (Sandbox Code Playgroud)

这意味着虽然temproll不是7,但事实并非如此r.

最后打印输出的输赢也需要修复:

printf("%lf",&wins);
printf("%lf",&losses);
Run Code Online (Sandbox Code Playgroud)

该lf格式是double和你正在服用的地址wins,而不是价值的,它应该是:

printf("%d",wins);
printf("%d",losses);
Run Code Online (Sandbox Code Playgroud)