メイン関数

main は、「ブラックジャックの C 言語プログラム」のメイン関数です。

必要な関数を呼び出して、全体を制御しています。


main () {
  int  n;
  int  nround;                 /* ラウンド数 */
  int  next;                   /* 次に配るカード */
  int  nPlayerHands,           /* プレーヤーの手札の枚数 */
       nDealerHands;           /* ディーラーの手札の枚数 */
  int  PlayerPoint,            /* プレーヤーの合計点数 */
       DealerPoint;            /* ディーラーの合計点数 */
  char PlayerHands[NMAX][CMAX],/* プレーヤーの手札 */
       DealerHands[NMAX][CMAX];/* ディーラーの手札 */
  char **stack;                /* カードの山 */

  /* 動的領域を確保する */
  stack = (char **)malloc(sizeof(char *) * IMAX * NDECK);
  if (stack == NULL) {
    printf("Memory Allocation Error!\n");
    exit(1);/* 異常終了 */
  }
  for (n = 0; n < IMAX * NDECK; n++) {
    stack[n] = (char *)malloc(sizeof(char) * CMAX);
    if (stack[n] == NULL) {
      printf("Memory Allocation Error!\n");
      exit(1);/* 異常終了 */
    }
  }

  /* カードを混ぜる */
  shuffle(stack);

  nround = next = 0;
  while (IMAX * NDECK - next > 10) {
    printf("--- Round %d ---\n", ++nround);

    /* カードを配る */
    nPlayerHands = nDealerHands = 2;
    for (n = 0; n < nPlayerHands; n++) strcpy(PlayerHands[n], stack[next++]);
    for (n = 0; n < nDealerHands; n++) strcpy(DealerHands[n], stack[next++]);

    /* 合計点数を計算する */
    PlayerPoint = calc(nPlayerHands, PlayerHands);
    DealerPoint = calc(nDealerHands, DealerHands);

    /* プレーヤーの処理を行う */
    player(&next, stack, &nPlayerHands, PlayerHands, &PlayerPoint,
                          nDealerHands, DealerHands,  DealerPoint);

    /* ディーラーの処理を行う */
    if (PlayerPoint) dealer(&next, stack, &nDealerHands, DealerHands, &DealerPoint);

    /* カードを画面に表示する */
    display(1, nPlayerHands, PlayerHands, PlayerPoint,
               nDealerHands, DealerHands, DealerPoint);
  }

  printf("--- Dealer doesn't have enough cards to continue. ---\n");

  /* 動的領域を解放する */
  for (n = 0; n < IMAX * NDECK; n++) free(stack[n]);
  free(stack);

  exit(0);/* 正常終了 */
}