2

私は C プログラミング コースの学習タスクを行っています。次のことを依頼されました。

タスク 2. クラップス。

クラップスのゲームでは、「パス ライン」ベットは次のように進行します。2 つの 6 面サイコロを使用して、クラップス ラウンドで最初にサイコロを振ることを「カムアウト ロール」と呼びます。カムアウト ロールが 7 または 11 の場合、ベットはすぐに勝ち、カムアウト ロールが 2、3、または 12 の場合は負けです。カムアウト ロールで 4、5、6、8、9、または 10 がロールされた場合、その数が「ポイント」になります。プレーヤーは、7 またはポイントが出るまでサイコロを転がし続けます。ポイントが最初にロールされた場合、プレーヤーは賭けに勝ちます。プレーヤーが最初に 7 をロールした場合、プレーヤーは負けます。

上記のルールを使用してクラップスのゲームをプレイするプログラムを作成し、人間の入力なしでゲームをシミュレートします。賭け金を要求する代わりに、プログラムはプレーヤーが勝つか負けるかを計算する必要があります。2 つのサイコロを振ることをシミュレートし、合計を返す関数を作成します。プログラムが 10,000 ゲームをプレイするようにループを追加します。

プレイヤーが勝った回数と負けた回数をカウントするカウンターを追加します。10,000 ゲームの最後に、勝つ確率、つまり Wins / (Wins + Losses) を計算し、この値を出力します。長期的に見て、クラップスのゲームで最も多く勝つのはあなたですか、それともハウスですか?

これまでに書いたものは次のとおりです。

# 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;
}

プログラムは常に次で終了します。

Wins:
0.000000
Losses:
0.000000

一方、プログラムが勝った回数と負けた回数を (10000 のうち) 表示することになっています。これで私を助けてくれる人はいますか?スコアがグローバルに保持されるように、 wins++andの代わりにポインターを使用する必要があるのではないかと思います。losses++

私はこれに慣れていないので、どんな助けでも大歓迎です。

4

2 に答える 2