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

スポンサーリンク
C言語

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

プログラムの規模が大きくなると、すべての処理をmain関数で行うのでなく、機能別に関数で行うように改良しよう。

また、ゲームが終了したら、最終的な成績を表示するようにしよう。

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

//じゃんけんゲーム(その4)

#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 confirm_retry(void)
  {
    int x;

    printf("もう一度しますか?(0)いいえ(1)はい:");
    scanf("%d",&x);

    return x;

  }
       

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);

       retry = confirm_retry();


    } while (retry == 1);

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

    return 0;
    
}

実行結果

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

じゃんけんポン!--->(0)グー(1)チョキ(2)パー:0
私はパーで、あなたはグーです。
あなたの負けです。
もう一度しますか?(0)いいえ(1)はい:1

じゃんけんポン!--->(0)グー(1)チョキ(2)パー:2
私はグーで、あなたはパーです。
あなたの勝ちです。
もう一度しますか?(0)いいえ(1)はい:1

じゃんけんポン!--->(0)グー(1)チョキ(2)パー:0
私はパーで、あなたはグーです。
あなたの負けです。
もう一度しますか?(0)いいえ(1)はい:1

じゃんけんポン!--->(0)グー(1)チョキ(2)パー:1
私はパーで、あなたはチョキです。
あなたの勝ちです。
もう一度しますか?(0)いいえ(1)はい:0
2勝2敗0分けでした

コードを追って、プログラムの大まかな流れを把握してみよう。

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

コメント

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