本ブログでは、「じゃんけんゲーム」をご紹介している。
今回は、ゲームを終了するかどうかを人に任せずに、コンピューターと人のいずれかが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言語 中級編 柴田 望洋(著)
コメント