テトリスが作れないか試してみました。参考にした動画は↓です。ポーティングしながら、処理を追加・変更していたため、プログラミングだけで4時間ぐらいかかってしまいました。作ったゲームの動作中の画面はこんな感じです。ゲームオーバーすると赤くなります。開けない可能性があります。バイナリを含めていないので各自コンパイルが必要です。見ている前提で説明をしようかと思います。テトリス自体のゲームの処理仕様は書き始めると長くなってしまうので省きたいとおもいます。ゲームで一般的かどうか不明なのですが、このテトリスの座標系は、左上が原点で右へ行くとXが増加し、下へ行くとYが増加します。冒頭の動画とは座標系の上下が反転しているのでご注意ください。周囲を下の画像の様に「番兵」が囲んでいます。上部3列は画面には表示されません。これは、新しいブロックが出現した際に徐々に画面へ落ちてくる演出のためです。動画ではキーボードの矢印キーでボタンを押した場合、ブロックを動かすためのキーボード入力をて1秒間に30回キャプチャキーしています。するとブロックがスムーズに動くのですが、WPFで同じ事を仕様として、KeyDownイベントでキーの入力を見様としたのですが、イベントの発生間隔がどうも違うようでした。最初のKeyDownはボタンを押したときに即座に発生しますが、キーを押しっぱなしにしたときに次にKeyDownイベントが発生するのは数瞬間が空いてその後連続で発生します。KeyDownイベント...となるようです。キーが連続で入力されるのを防ぐための様ですがゲームだとこの仕様が非常に邪魔です。2回目以降のKeyDownが始まる前にゲームオーバーしてしまう可能性があります。(これは、ウインドウプロシージャでVK_DOWN(0x100)を監視した場合も同じです。クラスを以下のように実装して問題を解決しています。登録したメソッドをコンストラクタで指定した間隔で呼び出しています。ブロックの回転)は、ブロックの移動より5倍遅い間隔でイベントを発行しています。イベント発生間隔を指定してオブジェクトを初期化します。押されっぱなしの状態を開始します。キーが離された事をこのオブジェクトをへ通知します。イベントを発行します。動画とは画像の取り扱い方がかなり違います。少々迂遠ですが以下のような関係を持たせています。指定することで画像読み込みのオーバーヘッドを抑えています。パターンですね)まとめキーボードイベントが想定通り発生しないことへの対応、画面に描画するための処理を全て自前で実装するのは少し大変でしたが興味深い経験でした。あと、使う画像のリソースで同じゲームでも天と地ほど印象が変わるのは興味深いですね。今はゲームの基本要素があるだけですがこの上に、更に他のゲームシステム(スコアやだんだん難しくなる仕様)を実装するど、まだまだ発展の余地があると思います。更新したらその時は、別途報告しようかと思います。»Profile受託ソフト会社員でWin系業務屋。趣味でCocos2d-x/C++を触っています。etc...主に受託・開発ネタ、Windowsの事、Srellaris、ゲーム制作の進捗の事を喋ります。Core3.xとUnityでAES暗号化を利用するC#の標準機能でデータを圧縮・展開するC#で属性を利用して処理に制約の説明を追加するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。