年だけど、構うものか。今後も手を加えるかもしれないけど、とりあえず現時点では、ゲームのコア部分しか入っていない。最初から使えるサンプル曲からそれらしいものを選んだ。いう、宝石をレンダリングする専用フリーソフトを使わせてもらった。もらってきたものは、ルール以外には何もない。ルールは著作権を主張できないから、類似物を作っても問題ない。一度公開してしまうと、作業中も公開しっぱなしになってしまう。動かなかったら作業中だと思ってほしい。いうわけで、この日記はゲームの紹介のみ。そのことは次の日記で。申し訳ありませんが、現在意見投稿をできない状態にしています。初心者向けの言語だけど、この話は初心者向けではない。いうプログラムの話だから。いうわけで、Cやアセンブラでゲームなどを作ったことがある人を対象にさせてもらう。いうプログラムの話、といっても、いろいろ実験してその動作から推察しただけだ。処理系のプログラムを読んだわけではないので、間違えていたら申し訳ない。多数のプログラムを書いて、それらが並列に実行される。多数のキャラクターを動かすゲームでも、キャラクターごとのプログラムを個別に作るだけでよい。これが、ゲーム作成には非常に役立つ。キャラクターは動き続けるのだから、永久ループ(もしくは、ゲームオーバーになるまでの長期ループ)の中にプログラムを書くだけでいい。これで、不思議と思い通りに動いてくれる。たくさんのプログラムが同時に動くだけでなく、よく気を付けてみると、動くプログラムの数に関わらず一定の速度を保っている。並列動作と、垂直同期待ちが自然な形で言語仕様に組み込まれているのだ。イベントドリブンマルチタスクだ。OSによって稼働時間を与えられたプログラムは、ある程度の時間動いたのち、処理をOSに戻さなくてはならない。処理を戻されたOSは、次のプログラムを呼び出す。これを繰り返せば多くのプログラムが並列動作できる。「クリックされた」とか「キーが押された」など、特別な事象は「イベント」という形で呼び出される。通常の時間割り当てと違い、特別なことが起きたので、それに対応するプログラムを書く必要がある。逆にいえば、通常の動作の中ではこれらを考慮しなくてよくなり、プログラムがすっきり書ける。「ループの末尾」で処理をシステムに返している。次に処理の割り当て時間が回ってきたときには、もちろんその続きから実行される。追記:ループ末尾でシステムに処理を返すのは、「ループ内に画面を変更する処理がある場合」に限られるようです。詳細はこの日記の末尾に。メッセージの送信という「イベント」は、内部的にはキューに入れられる。この操作自体は即座に行われるが、実際のイベント呼び出しは、システムに処理を返した後で行われる。クローンの生成も、変数領域などのコピーは即座に行われるが、そのクローンに「クローンされた」というイベントを送るのはシステムに処理を返した後だ。最初からプログラムの実行を開始する。それが一番時間を無駄にしないからね。「垂直同期待ち」に入る。全部のキャラが動いた後は、垂直同期待ち。(実際には垂直同期ではないのだけど、ここではそう呼ばせてもらう)コンピューターを「計算機」と考えるなら、待ち時間は無駄となる。ゲームを作ったりアニメを作ったりしたいのなら、この動作は非常に理に適っている。▼高速化ゲーム中に、大量のデータ処理が必要でループを回すと、上に書いたように垂直同期待ちを入れられてしまう。データ処理をゲーム進行と並列に行う...というのでは動作がおかしくなってしまうだろう。なんかでは、一定の操作の中に割り込みを入れないことを保証する記述方法がある。共有している変数を複雑な方法で書き換えている最中に、別のプログラムが関連する変数にアクセスするようでは困るからだ。割り込まれないことを保証する記述方法がある。指定された範囲のプログラムには、ループ末尾で垂直同期が入らなくなる。これで大量のデータ処理が瞬時にできる。この指定には「ブロックを作る」を使う。