これまでのステップで学んだことを活かして、簡単な「数字当てゲーム」を作成してみましょう! コンピュータが考えた1から100までの数字を、ヒントを頼りに当てるゲームです。 プログラミングの楽しさを体験できる良い練習になりますよ😊
前提知識: このプロジェクトでは、以下の知識を使います。
- 変数とデータ型(数値)
- 画面への出力 (`PRINT`)
- ユーザーからの入力 (`INPUT`)
- 条件分岐 (`IF…THEN…ELSE`)
- 繰り返し処理 (`DO…LOOP`)
- 乱数の生成 (`RND`, `RANDOMIZE TIMER`)
忘れてしまった場合は、前のステップを復習してみてくださいね。
ゲームの仕組み 🎲
このゲームの基本的な流れは以下の通りです。
- コンピュータが1から100までのランダムな整数を1つ選び、秘密の「答え」とします。
- プレイヤーに数字の入力を促します。
- プレイヤーが入力した数字と「答え」を比較します。
-
比較結果に応じて、以下のヒントを表示します。
- 入力した数字が「答え」より小さい場合:「もっと大きい数字だよ!」
- 入力した数字が「答え」より大きい場合:「もっと小さい数字だよ!」
- 入力した数字が「答え」と同じ場合:「正解! 🎉」
- 正解するまで、ステップ2から4を繰り返します。
- 正解したら、何回目の挑戦で当てたかを表示してゲームを終了します。
BASICコードの解説 💻
それでは、具体的なコードを見ていきましょう。ここでは主要な部分を解説します。(ここではFreeBASICを想定したコード例を示します)
1. 準備と乱数の生成
' 画面をきれいにする (環境によっては不要/変更が必要)
CLS
' 変数の宣言 (FreeBASICでは型宣言が推奨されます)
DIM SHARED answer AS INTEGER ' 答えの数字
DIM SHARED guess AS INTEGER ' プレイヤーの予想
DIM SHARED tries AS INTEGER ' 試行回数
' 乱数生成器を初期化
RANDOMIZE TIMER
' 1から100までの乱数を生成して答えとする
answer = INT(RND * 100) + 1
' 試行回数を初期化
tries = 0
PRINT "数当てゲームへようこそ!"
PRINT "1から100までの数字を当ててね。"
PRINT
CLS
: 画面をクリアします(実行環境によって動作が異なります)。DIM SHARED ... AS INTEGER
: 整数型(INTEGER)の変数を宣言します。SHARED
は、後でサブルーチンなどを使う場合に備えた指定ですが、このプログラム単体では必須ではありません。RANDOMIZE TIMER
: 現在時刻をもとに乱数のパターンを初期化します。これにより、実行するたびに違う乱数が生成されやすくなります。answer = INT(RND * 100) + 1
:RND
は0以上1未満の乱数を返します。これを100倍してINT
で整数部分を取り出すと0から99の整数が得られます。最後に1を足すことで、1から100までの整数をランダムに生成し、変数answer
に代入します。tries = 0
: 試行回数をカウントする変数tries
を0で初期化します。PRINT
: ゲームのタイトルや説明を表示します。
2. 推測の入力と判定ループ
' 正解するまで繰り返すループ
DO
' 試行回数を増やす
tries = tries + 1
' プレイヤーに入力を促す
INPUT "あなたの予想は? "; guess
' 入力された数字と答えを比較
IF guess < answer THEN
PRINT "もっと大きい数字だよ!"
ELSEIF guess > answer THEN
PRINT "もっと小さい数字だよ!"
ELSE
PRINT "おめでとう!正解です! 🎉"
END IF
PRINT ' 見やすくするために空行を入れる
LOOP UNTIL guess = answer
DO ... LOOP UNTIL guess = answer
:guess
(プレイヤーの予想) がanswer
(答え) と等しくなるまで、DO
とLOOP
の間の処理を繰り返します。tries = tries + 1
: ループが1回実行されるたびに試行回数を1増やします。INPUT "あなたの予想は? "; guess
: メッセージを表示し、プレイヤーからの数値入力を待ち、入力された値をguess
変数に格納します。IF guess < answer THEN ... ELSEIF guess > answer THEN ... ELSE ... END IF
: プレイヤーの予想 (guess
) と答え (answer
) を比較し、条件に応じたメッセージを表示します。guess < answer
: 予想が答えより小さい場合guess > answer
: 予想が答えより大きい場合ELSE
: 上記以外、つまり予想が答えと同じ場合
3. 結果の表示と終了
' 結果の表示
PRINT tries; "回で当たりました!"
' プログラム終了 (環境によっては不要)
END
PRINT tries; "回で当たりました!"
: ループを抜けた(つまり正解した)後、試行回数 (tries
) を表示します。;
でつなぐと、数値と文字列が続けて表示されます。END
: プログラムの終了を明示します。
コード全体 📜
全体のコードは以下のようになります。
' 数当てゲーム
' 画面をきれいにする (環境によっては不要/変更が必要)
CLS
' 変数の宣言 (FreeBASICでは型宣言が推奨されます)
DIM SHARED answer AS INTEGER ' 答えの数字
DIM SHARED guess AS INTEGER ' プレイヤーの予想
DIM SHARED tries AS INTEGER ' 試行回数
' 乱数生成器を初期化
RANDOMIZE TIMER
' 1から100までの乱数を生成して答えとする
answer = INT(RND * 100) + 1
' 試行回数を初期化
tries = 0
PRINT "数当てゲームへようこそ!"
PRINT "1から100までの数字を当ててね。"
PRINT
' 正解するまで繰り返すループ
DO
' 試行回数を増やす
tries = tries + 1
' プレイヤーに入力を促す
INPUT "あなたの予想は? "; guess
' 入力された数字と答えを比較
IF guess < answer THEN
PRINT "もっと大きい数字だよ!"
ELSEIF guess > answer THEN
PRINT "もっと小さい数字だよ!"
ELSE
PRINT "おめでとう!正解です! 🎉"
END IF
PRINT ' 見やすくするために空行を入れる
LOOP UNTIL guess = answer
' 結果の表示
PRINT tries; "回で当たりました!"
' プログラム終了 (環境によっては不要)
END
実行方法と遊び方 ▶️
- 上記のコードをテキストエディタにコピー&ペーストし、
.bas
という拡張子で保存します(例:guessing_game.bas
)。 - FreeBASIC コンパイラなどの開発環境を使って、このファイルをコンパイル・実行します。
(例: FreeBASICの場合、コマンドラインで
fbc guessing_game.bas
と入力してコンパイルし、生成された実行ファイルguessing_game.exe
(Windowsの場合) を実行します) - 画面に「数当てゲームへようこそ!」と表示されたら、指示に従って1から100までの数字を入力してください。
- 「もっと大きい」「もっと小さい」のヒントを頼りに、正解の数字を当てましょう!
注意:
CLS
命令や END
命令は、使用しているBASICの処理系(QBasic, FreeBASIC, 各種エミュレータなど)によって動作が異なる場合があります。お使いの環境に合わせて調整してください。改造してみよう! ✨
基本的なゲームが完成したら、さらに面白くするために改造してみましょう!
- 難易度調整:
- 数字の範囲を変える(例: 1から1000まで)。コード中の
RND * 100
の部分を変更します。 - 挑戦回数に制限を設ける。
tries
変数をチェックし、一定回数超えたらゲームオーバーにする処理を追加します。
- 数字の範囲を変える(例: 1から1000まで)。コード中の
- 入力チェック:
- プレイヤーが数字以外(文字列など)を入力した場合や、範囲外(1未満や100より大きい)の数字を入力した場合に、エラーメッセージを表示して再入力を促す処理を追加します。
- リプレイ機能:
- ゲーム終了後に「もう一度プレイしますか? (Y/N)」と尋ね、Yが入力されたら最初からゲームをやり直せるようにします。
- ヒントの追加:
- 「かなり近い!」「まだまだ遠い…」のような、もう少し具体的なヒントを追加してみましょう。
これらの改造を通して、条件分岐やループ、変数操作の理解をさらに深めることができます。
まとめ
今回は、BASICを使って簡単な数字当てゲームを作成しました。 乱数、入力、出力、条件分岐、繰り返しといった基本的な要素を組み合わせることで、インタラクティブなプログラムが作れることを体験できたでしょうか? ぜひ、自分で考えたアイデアでゲームを改造して、プログラミングを楽しんでください!🚀
参考情報
-
FreeBASIC公式ドキュメント (英語): FreeBASICの命令や関数の詳細な情報が記載されています。
- Randomizing (乱数関連): https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgRandomize
- RND (乱数生成関数): https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgRnd
- DO…LOOP: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgDoloop
- IF…THEN…ELSEIF…ELSE…END IF: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgIfthen
-
QBasicの情報 (英語): 古典的なQBasicに関する情報も参考になります。
- QB64 Wiki (QBasic互換環境): https://qb64.com/wiki/
※ 上記のリンク先は外部サイトです。内容の正確性や利用可能性は保証できません。
コメント