GWのヘルプ労働ということで連続宿直だったので続きを・・
まずは定番の構造体作りから。と言っても必要なデータが何かはまだ曖昧なので適当に・・。SAはスペードのA。カードごとにイベントが割り振られているので属性をつけてインスタンスを作っていくという感じで。このBATTLEだった場合にはハッシュテーブルに格納されたBATTLE用の関数を呼び出すという風にすれば良いんだよな?
と、そこで気が変わって(ひたすらデータを作っても面白くないのでw)、今回の懸念事項「マップ」の扱いについて考えてみることにした。
四人のキングは正確には「四人のジャック」「四人のクイーン」「四人のキング」という3種類のゲームが遊べて「四人のジャック」の場合にはプレイヤーがジャックになるので53(JOKERを含む)ー4(各スートのジャック)で49枚がマップの構成要素となる。7x7の正方形になるので・・これは山本弘、さすがですなぁ!
で、このマップを再現出来ないとそもそもデータを作っても無駄なので、そこから挑戦しようと。
なんとなくだけど、マップの元になるリストリストを作る。この0の部分には1〜10の数字札、1の部分にはQとKの絵札(上の画像はミスプリです)、真ん中にJOKERが対応するので、それにシンボルを当てはめていけば良いわけだが・・
GUIの時のCametanさんに倣って1次元のデータにして・・ここに各要素に対応したシンボルを割り振ったリストを作ればなんとかなるか・・
まあ、何はともあれ元になる全スートのシンボルリストを作ると
そいでそこから数字札のシンボルだけのリストを作る。シンボルの2文字目をキーにしてそこに数字があればFilter
同様にマップで使用するスペードとハートのスート絵札を抜き出す
で、これらを元にしてFoldで条件分けしてリストを作っていけば良いんじゃない?ということでやってみたが・・(-_-;)
まずFoldLでやって見てリストの長さが違うとのエラー。そう言えばFoldだったらそれが無視できるとCametanさんに教わったな!とFold。が、エラーは出ないが最短のリストに揃えられてしまうのだ!うわ〜・・最長に合わせてくれて大丈夫なのに〜・・
う〜ん、どうすれば・・?まあ普通に再帰で書けば行けそうだけど、そこはFoldを使ってみたい。という事で閃いた。最長データに要素数を揃えるように足りない分だけ無意味な要素を足せば良いじゃない。
というわけで全部のリストの要素数を49にする、フヒヒ・・
ところが結果はこう・・なんでリストのケツについてるはずのいらないデータが先に出てくるわけ!?
普通Foldじゃなくてfor/foldなら?と思ったけど全く一緒の並び。うーん、内部的には何やらリスト内の参照順が頭からではなくて決まってるようだな。しばらく悩んだけどどうしようもないので・・
しょうがねぇな!再帰で関数を書く。これで元のリストにShuffleをかませば元マップに対応したシンボルのランダム生成マップの完成じゃい!
というところで安眠
朝起きて続き。まずはShuffle
実験結果、オッケイ!
続いてPrint部分を書いていく。あ、書き忘れてましたけど今回CLIでやるんで!CLIで完成して気が向いたらGUI化しよう。
7x7なので要素を7つずつでリストにしたい・・という事で関数を作る。オッケイ
で、表示してみる。構想としてはこの一行一行の間にプレイヤーの表示のためのリストを入れて表示しょうかな?と。
(マップシンボルリスト0)
(プレイヤーがいるかもリスト0)
(マップシンボルリスト1)
(プレイヤーがいるかもリスト1)
・・・
って感じで2つのリストを交互に表示するイメージ。
しかし見た目が詰め詰めな上に揃って無くて気持ち悪いので・・
文字数によって_を足すように改造する。微妙な差はフォントの問題かな・・。プレイヤー表示の兼ね合いでもうちょっと調整しないといかんかも(同じ座標に複数のプレイヤーが入ることがある)。しかしまだ見辛い・・DとかCとか把握しづらいなあ・・スペードとかのマークが使えればなぁ・・
普通に使えました(^_^;) なかなか良いんじゃない!?
続く