基本の部分は出来ました。
今後、特殊ブロックやシステムの微調整をします。
http://ramtieger.sakura.ne.jp/p/cgi/modulo/modulo.html
【遊び方】
・ブロックの移動方法
カーソルキー(↑↓←→)でカーソルを動かして、
ブロックに合わせてスペースを押すと、ブロックを掴めます。
掴むと、ブロックを左右に動かせます。1段だけなら上にも上れます。
もう一度、スペースを押すと、ブロックを離します。
・消し方
主に2通りあります。(ロジックには区別が無いんですが)
<イコール消し>
同じ数字を上下に重ねたら消えます。
<モジュロ消し>
[5]
[2][3]
のように、下の数字を足した一の位が上と同じだと消えます。
・ブロックが少ないときは・・・
Zキーを押すと、降ってきます。
ブロックが落ちなくなったらゲームオーバーです。
【ここから先、PGの話】
今までは、リアルタイムにモノが動くゲームを作ったことがないので
ここまで来るのに、結構苦労しました。
(そもそも、canvasがアニメーションに不向きなのかもしれない)
特に難しかったのは、落下中や削除中にカーソルを上書きするタイミング。
どうすればいいか分からなくて、行き当たりばったりです(汗)。
また、設計として納得の行っていない部分があって、
ゲーム中にタイマーを3つ持っているんですが、
・落ちるタイミングを計っているタイマー
・落ちるアニメーションのタイマー
・削除アニメーションのタイマー
それぞれでタイマーを持っていると、オーバーヘッドが大きい気がして、
これは1つのタイマーにまとめようかと思っています。
普通、ゲーム作るときは、ある決まった周期(60fpsとか)で
1つのタイマーで動いてるんですかね?
ちなみに、周期は100ms(10fps)にしようかと思っています。
それから、これは現在悩み中なんですが、
天井のラインの再描画の方法です。
今は、高さが1マスのブロックしか出てこないですが、
2マス以上の高さがあるブロックも、登場させたいと思っています。
そうすると、天井のラインの再描画が必要になってきます。
この再描画を、どのクラスでさせたら良いかが悩みどころです。
プレイフィールドを司るクラスで描画するのが「筋」ってもんですが、
ブロックを描画したタイミングを一番知っているのは、
個々のブロックなんですよね。
こういうときのセオリーを知りたいです。
常に再描画させた方が、実は早いのかもしれませんが、
あまり綺麗じゃない気がします。
天井を書かない、という手もあるけど、見づらいしなー。
canvasにレイヤーという概念があったら・・・(遠い目)
[4]らむてが
そのままレジを通ってしまったんだそうです。
レジ処理のとき、プラスチックケースから出して、タグを外していたので
まさかニセモノとは思いませんでしたよ。
[3]くろさわ(り)
山D電気も結構イイカゲンなんだね・・・。
[2]らむてが
ゲームで勝負して欲しかったのぉ。
[1]こばひっ
この時点で既に挑戦状じゃないか。