では前回に引き続いて画面表示関係を片付けていこう。続いては他のプレイヤーキャラも表示するという部分。これはまあ、Love.draw内でForを使ってPLAYSERを回せば済む話ではありそう。

キャラのY座標が完全に一緒では重なっていて見えないので、それぞれちょっとだけずらすようにしてみる。
また、そのままPLAYERを回すと、常にPLAYER1が最後面に描画されてしまうので、最初に現PLAYER以外をForで表示してその後別口で現PLAYERを表示するようにしてみる

現在CurrentPは1なのでOK

表示関係が終わったら次には駅以外の場所に止まった場合も考えないと。

Player1のターンが終わるとPlayer2のメインメニューが出て、移動するところまでOK

続いて気になるのは購入成功メッセージで物件名のあとに空白がそのまま残っていること。表示用の文字列から全角スペースを取り除く事は出来ないのか?ま、出来ます

ややこしいので「:記法」は使わず書いてみる。

バッチリ!

続いて、メッセージが強制的に5秒(任意)表示されるのもダルいので、途中でスペースキーなりを押すことで強制終了するようにしたい。メッセージ表示フラグ表示時にスペースキーかリターンを押すとフラグが書き換わるようにすればいけるかな?

実はさきほどのコードでは動かなかった。なぜだ!?と結構悩んだんだけど、なんとフラグチェックがIf FLAGS.movein_onという移動中のチェックフラグ内にめり込んでいたせいだった(^_^;) 外に出す事で途中キャンセルできるようになりました

続いてカード使用関数を書いていくか・・ってところで詰まった。
む・・交通系カードを使用するとメッセージで「〜を使った」と出るわけだけど、そのメッセージが消えたタイミングでRoll_dice関数にサイコロの数を与えて呼び出したいわけだ。つまりメッセージが消えるのを待って処理を再開するという・・これはコルーチン案件じゃないか!

でも、すでに書き方を忘れてしまってるのでやりたいことをコメントした上でPer様に渡してみることに。いや〜思考の粘りがなくなりそうだわ

一応、今のところコードは動いてるので試行錯誤が予想されるコルーチン導入の前に現在の状態を保存しておきたい。となると、久々にGithubを使うか・・ということでサイトにサインインしたりしてリポジトリを設定したりしてみたが・・あれぇ?なんか前と仕様変わりました?もっと使いやすかった気がするのだが・・変だなぁ変だなぁ・・

1時間弱格闘した後に、ワタシ思い出しちゃった!そういえばGitkrakenってソフトを使ってたんだった!そりゃUIが全然違うはずだよ・・ということで導入。

早くもすっかり書き方を忘れてるので、今、これを書きながら日本語訳しております。
まず、関数で処理をラップしたコルーチンをCreateする。中身は表示用フラグTrueとMESSAGEで表示させたいデータを書き込むといういつもの処理。その後、フラグがTrueのウチはYieldし続ける(?)ってことか・・。で、どこかでResumeされたら(表示が終わったら・・だけどどこに書くのだろうか)、その続きでサイコロ処理をすると。

どこでResumeするのかと思ったら、同じUsecard関数内に書くとは・・しかもTimerを使って定期的に実行し続けるとな?なんか意味不明

Love.draw内はこんな感じ・・って、現在のと一緒だな。うーん、仮にこれが動くとしてTimerを使わないといけないってのはなぁ。なんとなくだけどLove.update内に書けば済むことのように思えるけどどうだろう?明日質問しよう(つまり、これを書いてる今日だけど)

そこで出ました代替案(Per様、先読みするなぁ)。
なるほど、これだとFLAGSに新たな要素を追加すると。でも保存するのはサイコロの数だけでいいのか

んで、なるほど!メッセージ表示フラグがFalseでなおかつ、サイコロの数が保持されてる場合に、Move_onをTrueにしてRoll_dice、すかさずPending_dice_rollをnilにするわけか・・こっちのほうがスマートだな!

コルーチンの問題点もちゃんと出してくれてる。俄然コルーチンを使わない方向へ気持ちが向いております

メニュー表示で使ったステートマシン方式も提案されてるけど・・いや、代替案が良さげ、楽だし応用が効きそう。
というわけで、明日はこの処理を続けるとします
つづく