C言語のきほん「じゃんけんゲーム」(5)

スポンサーリンク
コンピューター C言語

本ブログでは、「じゃんけんゲーム」をご紹介している。

今回は、ゲームを終了するかどうかを人に任せずに、コンピューターと人のいずれかが3勝したらゲーム終了となるプログラムをご紹介しよう。

なお、本プログラムは、
 Windows 11 Home(23H2)上で、Visual Studio Code(1.93.1)を使用して作成し、gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0で コンパイルしている。

//じゃんけんゲーム(その5)3回先勝したほうが勝ち

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

int human;      //人間
int comp;       //コンピューター
int win_no;     //勝った回数
int lose_no;    //負けた回数
int draw_no;    //引き分けた回数

char *hd[] = {"グー","チョキ","パー"};  //手

//初期化設定
  void initialize(void)  
{
    win_no = 0;
    lose_no = 0;
    draw_no = 0;

    srand(time(NULL));  //乱数の種を設定

    printf("じゃんけんゲームを始めましょう!\n");
}
  //じゃんけん実行
int jyanken(void) 
{
    int i;

     comp = rand() % 3;  //  コンピューターの手を生成

     do
        {
           printf("\nじゃんけんポン!--->(0)グー(1)チョキ(2)パー:");
            scanf("%d",&human);

        } while (human < 0 || human > 2);

}
   //勝ち・負け・引き分けた回数
   void count_no(int result)
   {
    switch (result)
    {
    case 0: draw_no++;
        break;
    case 1: lose_no++;
        break;
    case 2: win_no++;
        break;
    }
   }

  //判定結果を表示
  void disp_result(int result)
  {
     switch (result)
        {
        case 0: puts("引き分けです。");
            break;
        case 1: puts("あなたの負けです。");
            break;
        case 2: puts("あなたの勝ちです。");
            break;
        }
  }

 
int main(void)
{
   
    int judge;  //勝敗
    int retry;  //もう一度

    initialize();

     do {
        jyanken();

        printf("私は%sで、あなたは%sです。\n",hd[comp],hd[human]);
       
        judge = (human - comp + 3) % 3; //勝敗を判定

       count_no(judge);

       disp_result(judge);

     
    } while (win_no < 3 && lose_no < 3);

    printf(win_no == 3 ? "\n□あなたの勝ちです\n" : "\n■私の勝ちです\n");

    printf("%d勝%d敗%d分けでした\n",win_no,lose_no,draw_no);

    return 0;
    
}

実行結果

じゃんけんゲームを始めましょう!

じゃんけんポン!--->(0)グー(1)チョキ(2)パー:0
私はパーで、あなたはグーです。
あなたの負けです。

じゃんけんポン!--->(0)グー(1)チョキ(2)パー:
2
私はチョキで、あなたはパーです。
あなたの負けです。

じゃんけんポン!--->(0)グー(1)チョキ(2)パー:2
私はチョキで、あなたはパーです。
あなたの負けです。

■私の勝ちです
0勝3敗0分けでした

コンピューターと人のどちらかが3勝するということは、人の勝った回数win_noと、負けた回数lose_noのいずれかが3になるということである。

そうなったときにとdo文による繰り返しが終了する。

この判定を行うのが、「win_no < 3 && lose_no < 3」である。

参考)新・明解C言語 中級編 柴田 望洋(著)

コメント

タイトルとURLをコピーしました