先回は、「じゃんけんゲーム」のプログラムをご紹介した。
このプログラムでは、人が手を入力すると、コンピューターの手が表示された。
今回は、コンピューターの手だけでなく、人の手も表示するように変更してみよう。
なお、本プログラムは、
Windows 11 Home(23H2)上で、Visual Studio Code(1.93.1)を使用して作成し、gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0で コンパイルしている。
//じゃんけんゲーム(その2)
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int human; //人間
int comp; //コンピューター
int judge; //勝敗
int retry; //もう一度
srand(time(NULL)); //乱数の種を設定
printf("じゃんけんゲームを始めましょう!\n");
do
{
comp = rand() % 3; // コンピューターの手を生成
do
{
printf("\nじゃんけんポン!--->(0)グー(1)チョキ(2)パー:");
scanf("%d",&human);
} while (human < 0 || human > 2);
printf("私は");
switch (comp)
{
case 0: printf("グー");
break;
case 1: printf("チョキ");
break;
case 2: printf("パー");
break;
}
printf("で、あなたは");
switch (human)
{
case 0: printf("グー");
break;
case 1: printf("チョキ");
break;
case 2: printf("パー");
break;
}
printf("です。\n");
judge = (human - comp + 3) % 3; //勝敗を判定
switch (judge)
{
case 0: puts("引き分けです。");
break;
case 1: puts("あなたの負けです。");
break;
case 2: puts("あなたの勝ちです。");
break;
}
printf("もう一度しますか?(0)いいえ(1)はい:");
scanf("%d",&retry);
} while (retry == 1);
return 0;
}
実行結果
じゃんけんゲームを始めましょう!
じゃんけんポン!--->(0)グー(1)チョキ(2)パー:1
私はパーで、あなたはチョキです。
あなたの勝ちです。
もう一度しますか?(0)いいえ(1)はい:1
じゃんけんポン!--->(0)グー(1)チョキ(2)パー:3
じゃんけんポン!--->(0)グー(1)チョキ(2)パー:0
私はグーで、あなたはグーです。
引き分けです。
もう一度しますか?(0)いいえ(1)はい:0
人の手を読み込む部分にdo文を導入した。0、1、2のみを受け付けるようにしている。
do文が終了した時点でのhumanの値は、必ず0以上2以下となる。
なお、今回は、人の手を表示するswitch文を追加している。
ただし、コンピューターの手を表示するswitch文とほとんど同じである。
また、手の表記、「グー」、「チョキ」、「パー」が独立した文字リテラルとして何度も現れる。
この辺りは改良の余地がありそうである。
(参考)新・明解C言語 中級編 柴田 望洋(著)
コメント