昨夜も宿直だったんで四人のキングの続きを作りました
まず、前回考え中だったハッシュテーブルを一元化するかどうか問題だけど・・どう考えてもそうした方が良いと思われましたので、3種類あるゲームごとにテーブルを作ることにしました。今回は「四人のジャック」なのでjack-tableとして、キーの命名規則だけそれっぽくして整理することに
マップ移動は東西南北の4方向なのでキーrdcf(北西南東)と設定。wazsだと西と南がややこしい感じがしたので・・。とにかくこの4つのキー以外は弾くように。4つのキーいずれかの場合は文字を引数にして・・・
テーブルからgo-direct関数を呼び出すと
最初の選択用マップ表示をメインREADと統合しても良いだろうということでPRPELだったのをREPLに変更
で、最初PLAYER構造体に座標データを個別で持たせておいて統合したリストを作って、それを引数にWORLD構造体のPMAPにプレイヤーマップを作る予定でしたが・・・
データの収集が面倒だったのでこのPLAYER-COORDってのを
WORLD構造体に最初からまとめた状態で持ってきてPHASEで現在のプレイヤーが誰かを特定し、それでList-refを使ってWORLD-COORDから読み出すように変更。上は仮データなのでWORLD-PLAYERSがSJだけになってますが、ここに4人までプレイヤーが増やせて、'(12 5 19 29)ってのがそれぞれの座標になるわけですね。1次元で管理できるから超楽チンだなぁ(GUIの後だと実感出来ます)
SMAPは一度設定したらゲーム終了まで変化がないので大域変数で良いんだけどPMAPは移動ごとに変化するので関数にしないと・・。これ、クロージャで作ったんだけど・・これ普通の関数にした方がイイので、この後修正しました
一応テスト。オッケイ
じゃあいよいよマップ移動用の関数を書いていきますか・・
まずは画面端で適正じゃない方向に移動しようとした場合にハネる判定のための述語を書く。冗長かな?と見えるけど・・まあ実際に作ってから考えよう
ハッシュテーブルに入れるgo-direct関数を書く。PHASEで現在のプレイヤーのリスト内の順番を特定してWORLD-COORD(プレイヤー座標のリスト)から該当のINTを抜き出してcurrentに束縛、もしも文字が「r(北)」で、なおかつ上?じゃなければchange-coord関数を実行して返ってきたWORLD構造体をメインeval(未実装)に渡すと
呼び出されるchange-coord関数を書く。引数を元にして新たなWORLD-COORDを作って、それを元に新たなWORLDーPMAPを作る。で、それらでWORLD構造体を再構成して返す、と。
と、ここで23時。深夜のカラオケをやらないと!ということでここまで。全くテストしてないんだけど多分大丈夫じゃないかなぁ・・・次回は全方向の分を書いてテスト・・って所からスタートかな。そして出来ればBATTLE関数作りに入りたい。多分今回バトル部分が一番ややこしそう(結構取れるオプションが多いんですよね・・)