プログラミングの実戦課題 - テキストベースのロールプレイングゲームを創る ①「if-else 文と標準入出力」
こんばんは。九条です。
今回はプログラミングの話をします。
本シリーズの記事の目的と前置き
本シリーズの記事は、課題と回答を提示する形で、実践的なプログラムを作りながら、プログラミングを学習することを目的とします。
プログラミングの学習ではアウトプット(実際に物を作ること)が重要だとされます。
プログラミング言語の文法を理解すること自体はそう難しいことではありません。サンプルを見てどのような結果になるか予測できるレベルには直ぐに到達します。
問題なのは、実際に物を作る時に学習した文法がどのように役立つか分からないことです。
例えば、次のような文法事項はどう使うかが分からないということになりがちです。
・関数
・ポインタ
・構造体
・クラス
これに対する対策としては、実際に何か目標を決めてそれを創りながら勉強することです。文法書を一通り読んでから作り始めても良いし、作りながら必要に応じて勉強するという方法でも、どちらでも構いません。
ただ、ここで何を創るのかアイディアが思いつかないという人もいると思いますし、逆にアイディアが壮大過ぎて学習段階の実力では全く造れないということもあると思います。
そこで、私が具体的な課題を考えました。
私のお勧めは、グラフィックを全く使わずに、テキストベースのロールプレイングゲームを創ることです。
シナリオを考えるのが難しいと思われる方もいるかもしれませんが、必要ありません。宝物を探せ!だけでも十分過ぎます。
以上は私のブログにも書いた話です、できれば、次の参考記事も読んでください。
(参考記事)プログラミングに挫折する原因とその対策
仕様
今回は次の仕様で作ります。
①.貴方の前に分かれ道がある、左へ行くなら1を、右へ行くなら2を入力してください。
②.1の場合、「宝物を見つけた!あなたはこのゲームをクリアした。」
③.2の場合、「ドラゴンに遭遇して殺害された、Game Over!」
④.それ以外が入力された場合、「分かれ道で迷っている間にドラゴンに遭遇して殺害された、Game Over!」
前提
この記事では、言語にC#を使います。JavaScript や PHP を使ったバージョンも作りたかったのですが、それは後程公開させていただきます。
このシリーズの記事では、C#の文法は一通り学習できていることを前提とします。文法そのものの解説はざっくりとしか行いません。また Visual Studio の使い方の解説も行いません。
今回の課題で学べること
この課題は if-else 文と標準入出力が分かれば作成できます。if-else 文はswitch-case 文に置き換えることもできます。置き換えについては、別途発展課題として記事を書きます。
回答
では作ってみましょう。
正解は次のようになります。
※以下のコードはそのまま Visual Studio にコピペすれば動作します。
using System;
namespace RPG1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("貴方の前に分かれ道がある、左へ行くなら1を、右へ行くなら2を入力してください。");
string input = Console.ReadLine();
if (input == "1")
{
Console.WriteLine("宝物を見つけた!あなたはこのゲームをクリアした。");
}
else if (input == "2")
{
Console.WriteLine("ドラゴンに遭遇して殺害された、Game Over!");
}
else
{
Console.WriteLine("分かれ道で迷っている間にドラゴンに遭遇して殺害された、Game Over!");
}
}
}
}
Console.WriteLine() は、標準出力へユーザへのメッセージ等を出力する機能を持ちます。
Console.WriteLine() は、標準入力からユーザの入力を受け付ける機能を持ちます。
if 文 else if 文 else 文はユーザの入力に応じて処理を分岐します。
プログラムを作成した後は、テストが必要です。この事例であれば、実際に1, 2, それ以外 を入力し、意図した通りに動くか検証する必要があります。
今後の発展課題
このゲームの良いところは、ここから更に発展させて、より複雑にしていき、その過程で文法事項を作りながら覚えられるところです。
例えばこんなことを考えてみましょう。
・ダンジョンに潜るだけでなく脱出するまでを考える。要は、既に通った道を再度訪れることができるようにする。他に、宝箱を開封するのに鍵が必要というギミックを組みたい。⇒配列や繰り返し(ループ)が必要です。
・戦闘を導入したい。⇒同じく配列や繰り返し(ループ)が必要です。乱数生成も必要です。
・仲間キャラを登場させたい。⇒構造体やクラスが必要です。ハッシュテーブルで代用可能かもしれません。
・アイテムや魔法を登場させたい。⇒同じく構造体やクラスが必要ですが、インターフェイスも必要かもしれません。
・ステータス異常(バフやデバフ)を登場させたい。⇒これも同じく構造体やクラスが必要ですが、インターフェイスも必要かもしれません。
・セーブ機能を付けたい。⇒ファイル入出力が必要です。
・マップデータをプログラムコードから分離して編集しやすくしたい⇒XMLのような複雑な構造を持つデータを扱うことが必要です。
・街や店を作りたい。街ごとに販売されているアイテムの価格を変えたい。⇒リレーショナルデータベースが必要です。
実は、この案を発展させていけば、それだけでプログラミングの各文法事項を一通り網羅できてしまいます。
この案はプログラミングの練習としては非常に有効だと思います。
最後に
次回以降、これらの複雑な課題について取り上げます。その際は、有料記事とさせていただく可能性もあります。
今後ともよろしくお付き合いくださいませ。