Palmは考え中…

何の事かと言えば、MA-CYさんがお悩み中のプログラム修正。
お馴染みRacing双六でコンピュータがプレイ中に実行を中断できないと言うもの。
この問題、結構はまるんですよね〜。

以下はマニアックで無責任な話なので読まないことを推奨
NS Basicでプログラムを組むと、以下の流れの連続なんですね。

[イベント待ち]
  |
  |[イベント発生]
  ↓
[処理実行]
  |
  |[処理終了]
  ↓
[イベント待ち]

キー入力や画面上のボタンのタップといったイベントを受けて、プログラムが実行される…例えば上下ボタンを押したらルーレットが回る処理を実行みたいな。
で、処理実行中に他のイベントが入ってきたらどうなるかと言うと、これは実行の順番待ちになる(カラオケボックスで歌いたい曲を登録しても、他の人が歌っていたらそれが終わるまで自分の出番が来ないのと一緒ね)。溜まったイベントは、処理が次のイベント待ちに来たときに初めて読み出されるわけ。

ところがRacing双六の場合、処理の中で順番待ちしているイベントを全てキャンセルしている。以前、別の問題でMA-CYさんが悩んでいた際に僕が教えたから間違いない。
恐らく処理の一番最後でイベントをフラッシュしていると思います。
と言う訳で、ホームボタンを押したというイベントも消されてしまい、イベント待ちまで上手く回らない。
この辺が第1の問題。

次の問題
COMプレイヤーの処理って結構時間がかかっていますね。
4人プレイの場合、

人間→COM1→COM2→COM3→人間…

なんて場合もあります。このCOM1〜COM3の処理をどういう風に記述しているのかは判りませんが、この間一度もイベント待ちにならないのであれば、その間でイベントを拾うのは難しいかも。
僕も、イベント待ち以外の場所で、強制的にイベントを拾おうとした事がありますが、どうしても上手くいかずに、諦めた事も。

リアルタイムゲームなんかの場合、タイマーイベントを使って強制的にイベントを発生させるという手段がありますが、これをRacing双六に適用するのは大改造になると思います。
と言う訳で、この問題は忘れると言うのもいい方法かもしれません。