読者です 読者をやめる 読者になる 読者になる

レガシーコード生産ガイド

私に教えられることなら

ClojureScriptでローグライクを作る 1

ClojureScript

1 とか書いたけど続くかは謎。

描画以外では一切変数を書き換えず、ひたすらgameステートを渡してイミュータブルな値への関数適用のみで作る方針。

プレイ可能URL

現状は

  • ダンジョン生成
  • 敵生成、徘徊

とりあえずソースも公開することにした。

github.com

Chestnutsを利用してて、ローグライク部分はClojureScriptなのでソースはだいたいここにある。

arogue/src/cljs/arogue at master · phaendal/arogue · GitHub

感想など

上でも書いたように、イミュータブルな値への関数適用のみでどこまで作れるか、どのようにゲームが作れるかという経験を溜める目的で始めた。

実は一度敵との戦闘まで作ったんだけど、あまりにもソースが汚くなったので全部消してやり直した。

その際に次はこうしたら綺麗になるかなあ、という考えをメモしておいたので書いておく。

  • ゲーム全体の状態+αを取って、変化した状態のみを返すか、変化させるために必要な値を返すかの二択にする。両方を返すと混乱の原因になる
  • 1つの関数が変化・付加する情報はできるだけ少なく保つ
  • 判定と加工は別の関数に分ける
  • 複数の値を[a b]で返すのは、できるだけ上流の関数にする
  • 引数で分配が多い場合はもっと細かくしたほうがいい
  • マップを別のマップのキーにできることを覚えておく
  • 英単語の語彙を蓄えておく。言葉が動作を縛ってることに気づいた

守れてないとこもあるけど、指針ということで…… 合ってるかわからないし。 ただこういうことを考えてから書いたせいか前よりは全然マシな構造になってきた気はする。

どこまで作ろうかな、とりあえず戦闘とアイテム使用、99Fぐらいまでの移動と敵テーブル、ぐらいまで作ったら敵AIの研究したい。

広告を非表示にする