見出し画像

Chapter10 じゃんけんゲームを作った


この記事は『じゃんけんゲーム作るシリーズ』の第三弾かつ、シリーズ最終回である。

シリーズ一弾、二弾を閲覧済みでないという方は、URLを貼っておくのでそちらを先に閲覧いただくことをお勧めする。



さあ、それでは『じゃんけんゲームを作るシリーズ』最終回、今日行うのは、プレイヤーが入力した値と、ランダム関数によって選定されたコンピューター側の値を比較し、勝敗を表示するというプログラミングだ。


画像1

条件に応じて処理を分岐させるプログラミングには『if構文』を使う。

例によって『()』の中に分岐の条件を書いていくのだが、今回は『プレイヤーが勝った場合』、『プレイヤーが負けた場合』、『あいこだった場合』という3つの分岐条件を用意した。

ちなみに、今回初めて出てきた『||』、『&&』という表記には、それぞれ『~もしくは~』、『~かつ~』という意味がある。

また、『()』の中に『()』が複数存在しているのは、『()』によって囲まれている部分から計算させるという、計算のお約束を利用しているだけである。

勝ちパターン』と『負けパターン』は特に問題ないであろう。『あいこになる条件』も『両辺の値が等しい状態』を示しているだけなのでわかると思う。

分岐は前回もやっているので、おそらく今回のメインは『あいこになった後の処理』であろう。


画像2

先ほどのプログラムをもう一度見てみよう。

このプログラムでは、条件に応じて『あなたの勝ちです。』か『あなたの負けです。』か『あいこです。』のどれかを表示したあと『return 0;』でプログラムが終了することになる。

勝った場合』と『負けた場合』であればそのままプログラム終了で問題ないが、『あいこ』のままでは終われないのがじゃんけんというものだ。

最後に、『あいこの場合は再戦する』というコードを記述して、いよいよ『じゃんけんゲーム』の完成である。


画像3

画像4

C言語には、『{}』ではさんだプログラムを指定しただけ繰り返す『for』構文というものが存在する。

上の画像の場合、まず『int』型の変数 『loop』というものを用意し、『0』を代入。変数 『loop』の値が『』である限り『14行目から81行目までの処理』を繰り返すというプログラムになっている。

ただ、このまま実行をすると変数『loop』の値が永遠に『』のまま変動しないため繰り返しも永遠に続いてしまう。


画像5

そこで、じゃんけんの勝敗が『あいこ』になった時だけ繰り返しが起こるように、『勝った場合』と『負けた場合』には変数『loop』に『1』を代入し繰り返しが起こらないようにし、『あいこ』になった場合にだけ、変数『loop』に繰り返しが起こる『』を代入することにした。


画像6

するとこのように『あいこ』になった場合はプログラムが終了されることなくプレイヤーに再入力を促すようになった。


さあ、これで心置きなく一人じゃんけんが出来る。

長くなりましたが、これにてじゃんけんゲーム制作は終了となります。

今後も様々なゲームを作り、その過程をこうして投稿していきます。おそらく回を重ねるごとにスケールも大きくなっていくと思うので、乞うご期待ください。

ご閲覧ありがとうございました。


あっ、そうだ。このじゃんけんゲームをさらに改良したものを個人的に作ったので、そのコードをコピペしておきます。

良ければ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;
}


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?