プレーヤーの処理を行う

player は、プレーヤーの処理を行う関数です。

プレーヤーは、スタンド(ステイ)とドロー(ヒット)はできますが、以下の選択肢(オプション)はありません。

  • ダブル・ダウン
  • スプリット
  • サレンダー
  • インシュランス

/* プレーヤーの処理を行う */
void player(int *next, char **stack,
            int *nPlayerHands, char PlayerHands[NMAX][CMAX], int *PlayerPoint,
            int  nDealerHands, char DealerHands[NMAX][CMAX], int  DealerPoint) {
  while (1) {
    int c;/* getchar の戻り値は int */

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

    /* プレーヤーの処理を行う */
    printf("  Draw(D, d) or Stand(S, s) or Quit(Q, q)? : ");
    c = getchar();
    /* バッファの最後に移動(2 文字目以降や改行文字を無視) */
    fseek(stdin, 0, SEEK_END);/* rewind(stdin) は、コンパイラによっては先頭に戻る */

    if        ((c == 'D') || (c == 'd')) {/* カードを引く */
      printf("  Draw\n");
      strcpy(PlayerHands[(*nPlayerHands)++], stack[(*next)++]);
      *PlayerPoint = calc(*nPlayerHands, PlayerHands);
      if (*PlayerPoint == 0) break;
    } else if ((c == 'S') || (c == 's')) {/* カードを引かない */
      printf("  Stand\n");
      break;
    } else if ((c == 'Q') || (c == 'q')) {/* 終了する */
      exit(0);/* 正常終了 */
    } else  {
      printf("Input Error!\n");
    }
  }
}