RubyWarriorをPHPに移植したPHPWarriorを地味にメンテしています。
PHPWarriorはPHPで戦士に指令を与えて塔を登っていくというゲームです。
ゲームをクリアするだけならば標準の1メソッド内に素直なロジックを書いていく事になりますが、PHPの構文の許す範囲でトリッキーなコードや整理されたコードを書く余地もあります。
たとえば2面で使うことになる前方に敵が居たら攻撃し、そうでなければ歩くというコードは素直に書くと次のようになります。
<?php
class Player {
public function play_turn($warrior) {
# add your code here
if ($warrior->feel()->is_enemy()) {
$warrior->attack();
} else {
$warrior->walk();
}
}
}
元祖であるRubyWarriorをプレイした人をみていると例えばifを使わないという縛りプレイがあります。ここから連想したのがswitchにtrueを与える次の形式です。
<?php
class Player {
public function play_turn($warrior) {
switch (true) {
case $warrior->feel()->is_enemy():
$warrior->attack();
break;
default:
$warrior->walk();
}
}
}
業務ならまずしないであろうコーディングですが、かつてhaltさんが書いたWikiパーサーの中にあって鮮烈な印象を受けた記憶があります。