紅茶は無糖

プログラミング勉強中 その他雑多なことも記録

丁半博打ゲーム

丁半博打ゲーム:さいころを2つ使用して、それぞれの上面に現れる目の合計が偶数か奇数かを当てるゲーム

<ルール>
・最初の手持ち金額は50,000
・手持ちの金額が100,000以上になればプレイヤーの勝ち
・手持ちの金額が0以下になればプレイヤーの負け
・掛け金は10,000を上限とし、手持ちの金額以下とする
・掛け金を0にするとゲームを終了する
河野英昭他 『基礎C言語プログラミング』のルールを使用)

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

# define f_money 50000

int main(void) {
  int money = f_money;
  int d_money, bet, n;
  int d1, d2, dice;
  //乱数の種をまく関数(同じ環境でrand関数を実行すると毎回同じ数が出現するため)
  //種を変えることで実行するたびに異なる乱数を呼び出す
  //time(NULL)は現在の時刻(1970年1月1日からの経過秒数)を表す
  srand(time(NULL));
  d_money = 2 * f_money;

  while((money > 0) && (money < d_money)) {
    do {
      printf("手持ち金額は%dです。\n", money);
      printf("掛け金を入力してください(10000以下)。 > ");
      scanf("%d", &bet);
      if(bet > 10000) { printf("10000以下の数字を入力してください。\n"); }

      if((money < 10000) && (money < bet)) {
        printf("%d以下の数字を入力してください。\n", money);
      }
    } while((bet > 10000) || (money < bet) || (bet < 0));

    if(bet == 0) {
      printf("ゲームを終了します。\n");
      break;
    }

    do {
      printf("丁(偶数)なら1、半(奇数)なら2を入力してください。 > ");
      scanf("%d", &n);
    } while((n < 1) || (n > 2));

    d1 = rand()%6 + 1;
    d2 = rand()%6 + 1;
    dice = (d1 + d2)%2 + 1;

    printf("いざ、勝負!\n");
    if(dice == 1) {
      printf("%d, %d の丁\n", d1, d2);
    }
    else {
      printf("%d, %d の半\n", d1, d2);
    }

    if((dice) == n) {
      printf("正解です。\n");
      money = money + bet; 
    }
    else {
      printf("はずれです。\n");
      money = money - bet; 
    }

    printf("\n");
  }

  if(money <= 0) {
    printf("あなたの負けです。\n");
  }

  if(money >= d_money) {
	printf("あなたの勝ちです。\n");
  }

  return 0;
}

実行結果

手持ち金額は50000です。
掛け金を入力してください(10000以下)。 > 10000
丁(偶数)なら1、半(奇数)なら2を入力してください。 > 1
いざ、勝負!
5, 5の丁
正解です。


手持ち金額は90000です。
掛け金を入力してください(10000以下)。 > 10000
丁(偶数)なら1、半(奇数)なら2を入力してください。 > 2
いざ、勝負!
2, 5の半
正解です。

あなたの勝ちです。