WarriorJSでJavaScriptの頂へ到達できるか

Blog Single

GithubのTrendingをつらつら眺めていたところ、”WarriorJS“なる物々しい名前のものを見つけ、なかなか面白そうだったので今回ご紹介します。
https://github.com/olistic/warriorjs (Github)
https://warrior.js.org/ (公式サイト)

一体これは何なのか

WarriorJSとは、
“An exciting game of programming and Artificial Intelligence”
と冠されていることから想像できる通り、プログラミングすることで動かせるCUI上のゲームです。
「なんだ、ゲームか」と侮ることなかれ、GithubでもStarが7500以上(2018/06/07現在)付いているなど評価・注目度も高いです。
コンセプトしては、プレイヤーは戦士となり塔の頂上を目指しひたすら登っていく、というものらしいです。最上階まで到達すると「The JavaScript Sword」なるものを手に入れることが出来るらしいです。
自分には高尚すぎて何を言っているのかよくわかりませんでした。

インストール・実行

インストール方法は簡単で、既にnpmが使える環境であれば

npm install --global @warriorjs/cli

と打つだけです。

プレイ方法ですが、まずwarriorjsのディレクトリを生成する必要があります。
なので、好きなディレクトリまで移動し、

warriorjs

と打ち込んでください。戦士の名前と難易度を尋ねられるはずです。難易度は最初は”beginner”しか選べません。

今回、”test-player”という名前で、難易度”beginner”で作成してみました。

戦士の設定が決まると、warriorjsというディレクトリが生成され、その中に更に戦士の名前と難易度を記したディレクトリが存在しているので、その中に入ってください。
README.mdPlayer.jsという二つのファイルが確認できるかと思います。
README.mdにルールが書いてあり、戦士を動かすべくJSのプログラミングはPlayer.jsに書いていくことになります。

では、実際にLevel1を攻略してみましょう。

プレイしてみる

README.mdを確認するとフィールドの情報と、呼び出せるメソッドとそのメソッドを呼ぶことで戦士がどういう挙動をするかが書いてあります。

今回のフィールドはLevel1らしく単純で、”@”マークで表されている戦士を”>”マークで表されている階段まで導けばクリアのようです。

呼び出せるメソッドは
warrior.walk()…戦士を引数の方向に1マス動かす(デフォルトは前方)
warrior.think()…console.log()のようなもの
の二つです。今回はひたすらwarrior.walk()を繰り返していいれば良さそうです。

では、実際にプログラミングを書き込むPlayer.jsの中身を見ると、

class Player {
  playTurn(warrior) {
    // Cool code goes here
  }
}

と書いてあり、指示通りplayTurnという関数の中身にプログラミングを組んでいくことになります。
プログラミングはゲーム実行中に変更出来ません。全てのパターンを読んで書き込んでいく必要があります。
とはいえ今回は前進するだけなのでwarrior.walk()を書くだけで良さそうです。

ただここで注意して頂きたいのはwarrior.walk()というメソッドはAttackという種類に分類されていて、Attackは1ターンに1つしか呼び出されません。
なので複数マス進んで欲しいからといってwarrior.walk()を何個も書くことは出来ません。
(ちなみにもう一つのメソッドwarrior.think()はSenceという分類になり、こちらは制限されていません)

なので今回は、

class Player {
  playTurn(warrior) {
    warrior.walk();
  }
}

となります。導入のLevel1なだけあって非常にシンプルですね。

では上のコードを保存して、実際に実行してみましょう。
実行方法は

warriorjs

と、作成時と同じコマンドを打ってください。

思惑通り、ターンの度に1マスずつ進んでいます。

無事、階段まで辿り着き、Level1クリアとなりました。正直退屈だったかもしれません。
引き続きLevel2となるわけですが、ここでREADME.mdをもう一度確認してみてください。

先ほどまでとは内容が変わっています。Level2のフィールドや、更に今回使えるようになったメソッドが新たに追加されています。今回は敵キャラも現れました。
先ほどのLevel1は移動のメソッドしか用意されていませんでしたが、実はレベルを上げるにつれ攻撃、回復、遠隔攻撃、爆弾設置、など様々なメソッドが利用できるようになります。
更に、Attackメソッドは1ターンに1つしか呼び出せないというルールは通して存在しているので、どれをどの順番で呼び出すのか、それをSenseメソッドを駆使して制御するためにはどうしたらいいのか、など色々頭を使わなければならなくなります。

実際にプレイしてみて

ほんの触りぐらいしかプレイしていませんが、JSに特化しているという訳ではなくプログラミング全般の制御構造を考える練習に向いている気がしました。
The JavaScript Swordを目指してみてはいかがでしょうか。

技術書は勿論、本全般が好き。品揃えの良い本屋に行くとテンション上がりすぎて後で具合が悪くなる。

Other Posts: