Java Console Game 〜コマンドを作る〜
イントロダクション
今迄に、
1. コンソール(標準)入力と出力
2. ゲームループ(無限ループの中からある条件でループを抜ける)
3. 計算式判定→文字判定
4. テストクラスの作成など
上記の事をやってきました。
このように列挙すると結構な量ですね(笑)
コマンド実行
既に作成した「入力がhelloの時〜」という処理について、この部分を「コマンド入力」という解釈をする事が出来ます。
つまり、コマンドプロンプトの様に「dir」コマンドが入力されたらカレントディレクトリのファイルを一覧する。というような処理を実装してやればそのように動きます。
<実装例>
if ("hello".equals(inStr)) { System.out.println("Hello World!"); } else if (inStr.matches("[0-9].*[0-9]")) { String answer = myClass.calculate(inStr); System.out.println("答えは:" + answer + "です。"); } else if("dir".equals(inStr)) { // Dirコマンドの実装を行う } else { System.out.println("想定外の入力です"); break; }
dirコマンド
上のサンプルコードで「// Dirコマンド〜」と記載している部分にdirコマンドの処理を実装する想定です。
Java版dirコマンドを作成してみようと思います。ここでは、カレントディレクトリがよくわからなくなってしまうのでEclipseのプロジェクトフォルダをカレントディレクトリとします。
ビルドパス
余談ではありますが、最近のプログラミング言語は「高レベル」なものが多く「ビルドパス」を気にしなくても実装出来ます。しかし、この様な「低レベル」な技術の上に「高レベル」な言語やAPIは成り立っています。
逆に言えば、「低レベル」がわかれば「高レベル」は理解できるという事です。
高レベルと低レベル
上に挙げたレベルという言葉は「高い程人間の感覚に近く、低い程パソコン(機械)に近い」という意味です。世間一般(プログラミング業界)で通用する言葉なので記載しておきます。
ルートを決める
Javaでは、プログラムを起動した時に指定したビルドパスによってカレントディレクトリが変わるので注意が必要です。もっと記載すると、ビルドパスに繋がっているところが全てカレントディレクトリになります。ちょっとややこしいですね(笑)
先程の「dirコマンド」を作成する話ですが、実際のコマンドのオプション部分は作成しません、単純にカレントディレクトリのファイルを表示するだけのものにしようと思います。それよりも、コンソールゲームの作成を進めたいからです。
コンソールゲームでは、ファイルの参照やDBへの接続も考えているので、今回からは、ファイルのコントロールに着眼して行こうと思います。
ファイルを参照、開く時に「どこのフォルダ?」にあるファイルなのか指定する必要があります。普段はGUIで表示されるものをクリックすれば開けますが、低レベルな所では以下の様な順序でファイルを開きます。
ファイルオーブン
- ファイルのあるディレクトリ(フォルダ)を指定する
- ファイルにアクセス(open)
- ファイルの中身を読み取る
以上の様な順序でファイルの中からデータを取得します。ここで、ファイルを開く時に「パーミッション(権限)」などのセキュリティ機能が働き開けない事件が起きることもあるので注意が必要です。
プログラムを書く
Javaではどの様に書くのか?この部分に触れたいと思います。今迄作成して来たコードをベースに記載します。
まずは、コマンドの実行部分ですが、これはシンプルにif文で分岐しようと思っています。ゲンナリされた方は、ご安心下さい、後でコマンドを好きなだけ追加できる方法を提示します。
余談ですが、上の実装にはインターフェースを使用します。なので、「インターフェース」の話題が出てきたら、コマンドを好きなだけ追加する実装をやるんだなと思って頂きたいと思います。
実装については、こちらの記事で記載します。
実行結果はこんな感じです。
でわでわ。。。