C++でスロットを作ってみよう
-関数を作成してコードの整理をしてみる-
プログラムを勉強したことが無い人でもとても簡単にゲームを作る基礎をC++を使用して実際に作りながら
プログラミングをしたことがない人に向けて教える感覚で説明していきます。
前回でスロットを操作して一定の数字以上を出すと報酬がもらえるシステムが完成しており
今回はこのスロットのゲームの内容を好きなだけ繰り返してプレイできるように改良していきます。
while (条件){内容}
今回使用する「while」はif文と同様にwhileの後に「()」とその中に条件を表すコードを書くと条件に合っている時はその後の「{}」の内容を繰り返し行うという意味になります。
使用する際は以下のようなコードを書きます。
#include <stdio.h> int main() { //while文 while(true) { printf("この内容は繰り返されます\n"); } return 0; }
上記の例の場合は条件にtrue(正)が入っている為、whileの内容の「この内容が繰り返されます。」がコマンドプロンプトにウィンドウを閉じるまで表示され続けるようになります。
上記コードで「true」と記載した場所にはif文の際にも使用した演算子を使用して場合に応じてコードの内容を繰り返すかどうかを以下の変えることができます。
#include <stdio.h> int main() { //条件用の変数 int index = 0; //while文 while(index <= 5){ index = index + 1; printf("繰り返し%d回目\n", index); } return 0; }
この内容で変数indexが5以下の場合はwhileの内容を繰り返すようになっています。
while文の中に変数「index」の値を1増やす処理があり、繰り返す度に変数の値が1ずつ加算されていき、
「繰り返し1回目」「繰り返し2回目」… と値が増えていき、「index」の値が5より大きい数字になった場合に
条件に満たされていないと判定され「{}」の外のコード(上の場合はreturn 0)に移動する仕組みになります。
do {内容} while(条件)
もう一つ繰り返し処理を行う際に使われるコードがあり「do while 文」というものもあります。
書き方もwhile文と大きな差はなく「do」の後に「{}」を書き条件が正しい際に処理させるコードを書き、鍵括弧を閉じた後に「while」と「()」の中に条件を書くことで条件があっている限り繰り返し「{}」の内容を繰り返します。
#include <stdio.h> int main() { //条件用の変数 int index = 0; //do while文 do{ index = index + 1; printf("繰り返し%d回目\n", index); } while(index <= 5); return 0; }
上記のコードもwhile文の例と同じ内容がコマンドプロンプト上に表示されるようになっています。
while文とdo while文の差
繰り返しを表すwhile文と do while文は少しだけ差があり、条件の判定をするタイミングが違います。
判定が行われるタイミングはwhileと書いた行で判定されるようになっています。
「while文」の場合は「{}」よりも先に条件の判定がされているので、while()と書かれている行に到着した時に既に条件に合っていない場合は「{}」の内容が飛ばされます。
一方「do while文」の場合は「{}」の後に条件の判定がされているので、while()の条件に当てはまらない場合でも一度は「{}」の内容を実行されるようになっています。
#include <stdio.h> int main() { //条件判定用の変数 bool condition = false; //while文 while(condition == true){ printf("while文が実行されました\n"); } //do while文 do { printf("do while文が実行されました\n"); } while(condition == false); return 0; }
上記の例のコードのように変数「condition」の値は「false」となっており
「while文」と「do while文」のそれぞれの条件は「condition」の値が「true」だった場合と条件にあってはいませんが、これを実行すると「while文」の内容は実行されませんが、「do while 文」の内容は実行されるようになっています。
スロットゲームにwhile文を使ってみる
上記の使い方を踏まえた上で今まで作ったスロットゲームを改良していきます。
まずはスロットを続けるかどうかの条件を決めるための以下の関数を作ります。
bool endCheck() { //入力用変数 int input = 0; //終了確認用変数(trueでゲーム終了、falseでゲームを続ける) bool end = false; //画面に表示する内容 printf("\n"); printf("スロットを続けますか?\n"); printf("1. 続ける 2.やめる\n"); //入力の受けつけ scanf("%d",&input); //数字に応じて条件を切りかえる if (input == 1){ end = false; } else if (input == 2){ end = true; } else { printf("選択肢以外の数字が入力されたのでゲームを終了します\n"); end = true; } //変数endの内容をメインに返す return end; }
上記の関数で呼び出したタイミングで入力した数字の値の確認をしてゲームを続けるかどうかを分岐する変数「end」の内容が変わるようになっています。
1を入力した場合のみゲームが進むようになっており、2でやめる、それ以外の数字はコマンドプロンプト上にテキストを表示させてから終了するようになっています。
この関数をメインの関数でに使用する為に以下のようにコードを書き換えてください。
int main() { //ランダムな数字を設定する srand((time(NULL))); //所持金の変数 int money = 1000; //賭け金の変数 int bet = 0; //ゲームが終了するかの条件用の変数 bool isEnd = false; while (isEnd == false) { //所持金を表示 printOwnMoney(money); //賭け金を設定する関数 bet = checkBet(); //掛け金が所持金以内かどうかで分岐 if (bet <= money) { //スロットを開始して所持金を変動させる money += stopSlotAndGetMoney(bet); } else { printf("所持金より多い金額は賭けられません。"); } //ゲームを続けるかどうかを確認する isEnd = endCheck(); } //今は入力で止めるために使用 printf("\n"); printf("数字を入力して終了します。"); scanf_s("%d", &bet); return 0; }
前回までに準備したメイン関数内の所持金を表示させてからスロットをプレイして所持金が変動するまでの部分を「while文」でまとめておき、「while文」の最後でゲームを終了するかどうかを毎回確認するようにして、変数「isEnd」の値が「true」になった際に「while文」の繰り返しが行われなくなり、「今は入力で止めるために使用」のコードに進みます。
この状態で実行してみると所持金が変動したテキストが表示された後にゲームを続けるかどうかの確認がされるようになっており1と2を入力した際に分岐するようになります。
スロットを続けるかどうかで1を入力し続けた場合はwhile文の条件に当てはまる値が入っているのでスロットは所持金がある限り何度でもプレイできるようになっています。
所持金が足りない場合でも続けるかどうかの確認はされるようになっていますが、ひとまずはここまでできれば繰り返し処理の使い方を実践させるのに丁度良いと思っています。
今回はここまで
ここまででゲームを自由な回数だけプレイできるようになりました。
次回は配列を使用してスロットを3つに増やして、スロットのあたりの条件を3つ揃ったら当たりのシステムにしていきたいと思います。
前回までの記事は以下から確認できます。