![見出し画像](https://assets.st-note.com/production/uploads/images/29338638/rectangle_large_type_2_68125d53eb3246b62c864cca3f05db10.png?width=1200)
Chapter10 じゃんけんゲームを作った
この記事は『じゃんけんゲーム作るシリーズ』の第三弾かつ、シリーズ最終回である。
シリーズ一弾、二弾を閲覧済みでないという方は、URLを貼っておくのでそちらを先に閲覧いただくことをお勧めする。
さあ、それでは『じゃんけんゲームを作るシリーズ』最終回、今日行うのは、プレイヤーが入力した値と、ランダム関数によって選定されたコンピューター側の値を比較し、勝敗を表示するというプログラミングだ。
条件に応じて処理を分岐させるプログラミングには『if構文』を使う。
例によって『()』の中に分岐の条件を書いていくのだが、今回は『プレイヤーが勝った場合』、『プレイヤーが負けた場合』、『あいこだった場合』という3つの分岐条件を用意した。
ちなみに、今回初めて出てきた『||』、『&&』という表記には、それぞれ『~もしくは~』、『~かつ~』という意味がある。
また、『()』の中に『()』が複数存在しているのは、『()』によって囲まれている部分から計算させるという、計算のお約束を利用しているだけである。
『勝ちパターン』と『負けパターン』は特に問題ないであろう。『あいこになる条件』も『両辺の値が等しい状態』を示しているだけなのでわかると思う。
分岐は前回もやっているので、おそらく今回のメインは『あいこになった後の処理』であろう。
先ほどのプログラムをもう一度見てみよう。
このプログラムでは、条件に応じて『あなたの勝ちです。』か『あなたの負けです。』か『あいこです。』のどれかを表示したあと『return 0;』でプログラムが終了することになる。
『勝った場合』と『負けた場合』であればそのままプログラム終了で問題ないが、『あいこ』のままでは終われないのがじゃんけんというものだ。
最後に、『あいこの場合は再戦する』というコードを記述して、いよいよ『じゃんけんゲーム』の完成である。
C言語には、『{}』ではさんだプログラムを指定しただけ繰り返す『for』構文というものが存在する。
上の画像の場合、まず『int』型の変数 『loop』というものを用意し、『0』を代入。変数 『loop』の値が『0』である限り『14行目から81行目までの処理』を繰り返すというプログラムになっている。
ただ、このまま実行をすると変数『loop』の値が永遠に『0』のまま変動しないため繰り返しも永遠に続いてしまう。
そこで、じゃんけんの勝敗が『あいこ』になった時だけ繰り返しが起こるように、『勝った場合』と『負けた場合』には変数『loop』に『1』を代入し繰り返しが起こらないようにし、『あいこ』になった場合にだけ、変数『loop』に繰り返しが起こる『0』を代入することにした。
するとこのように『あいこ』になった場合はプログラムが終了されることなくプレイヤーに再入力を促すようになった。
さあ、これで心置きなく一人じゃんけんが出来る。
長くなりましたが、これにてじゃんけんゲーム制作は終了となります。
今後も様々なゲームを作り、その過程をこうして投稿していきます。おそらく回を重ねるごとにスケールも大きくなっていくと思うので、乞うご期待ください。
ご閲覧ありがとうございました。
あっ、そうだ。このじゃんけんゲームをさらに改良したものを個人的に作ったので、そのコードをコピペしておきます。
良ければVisualStudioに貼り付けて遊んでみてください。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int GetRandom(int min, int max);
int Rand;
int MyHand;
int YourHand;
int draw=0;
int end=0;
static int win;
static int loose;
while (end == 0)
{
draw = 0;
srand((unsigned int)time(NULL));
printf("じゃんけん開始\n");
while (draw == 0) //あいこの限り繰り返す
{
for (MyHand = 4; MyHand != 1 && MyHand != 2 && MyHand != 3;) //1,2,3,以外が入力される限り繰り返す。
{
printf("どれを出しますか?\n1.グー 2.チョキ 3.パー\n");
scanf_s("%d", &MyHand);
if (MyHand == 1)
{
printf("グーを出しました。\n");
}
else if (MyHand == 2)
{
printf("チョキを出しました。\n");
}
else if (MyHand == 3)
{
printf("パーを出しました。\n");
}
else if (MyHand != 1 && MyHand != 2 && MyHand != 3)
{
printf("1か2か3を入力してください。\n");
}
}
for (int i = 0; i < 10; i++)
{
Rand =rand()%3000+1;
}
if (Rand >= 1 && Rand < 1000)
{
YourHand = 1;
printf("相手はグーを出しました。\n");
}
else if (Rand >= 1000 && Rand < 2000)
{
YourHand = 2;
printf("相手はチョキを出しました。\n");
}
else
{
YourHand = 3;
printf("相手はパーを出しました。\n");
}
if (MyHand == YourHand)
{
printf("あいこです。\n");
draw = 0;
}
else if ((MyHand == 1 && YourHand == 2) || (MyHand == 2 && YourHand == 3) || (MyHand == 3 && YourHand == 1))
{
printf("貴方の勝ちです。\n");
draw = 1;
win=win+1;
}
else
{
printf("貴方の負けです。\n");
draw = 1;
loose=loose+1;
}
}
printf("\n現在、%8d勝%8d敗\n", win, loose);
printf("じゃんけんを続けますか?\n\nはい:0 いいえ:1\n");
scanf_s("%d", &end);
}
return 0;
}