ABで避けゲーを作る

前回までのあらすじ:主人公の残した負の遺産「残像」を消し去るため対抗手段を用意した我々であったが、画面のサイズを教えろとコンパイラの怒りが爆発!!

7.画面のサイズ

そーいえばゲームにとって非常に重要な要素である、画面の大きさというのを今まで考えていませんでした。
大きな画面で迫力のあるプレイとか、小さな画面でちょこちょこやりたいとか、スペックの関係上画面を大きくできなかったりとか、考えなくてはいけなさそうです。
原作のほうではディスプレイドライバの多くがフルスクリーンをサポートしているという理由で縦480ドット横640ドットにしていました。
今回はこのページに多量の画面写真を原寸大で載せていることを考慮して小さめに半分の縦240ドット横320ドットにしておきましょう。
では早速GAMEWIDTHを320に、GAMEHEIGHTを240に、といいたいところですが、320とか240とかいった数字を別の場所に他の目的で使っていたら後で混乱するかもしれません。
直接数字を書き込むよりもゲーム画面の幅ならGAMEWIDTHと、意味がわかりやすいように書いたほうがいいかもしれません。
こういう設定は定数で決めてしまいます。
ついでにマイキャラの位置も画面中央にしておきましょう。

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Const GAMEWIDTH     = 320
Const GAMEHEIGHT    = 240

Dim MyCharaX As Long, MyCharaY As Long
MyCharaX = GAMEWIDTH / 2
MyCharaY = GAMEHEIGHT / 2

でも触れますが、ゲームバランスを決めるためのパラメータなども定数で決めることにします。
さて、あとはhDCをマイキャラのときと同じ要領で使ってやれば残像が残らずに都合よくまるが動くということになります。

ただ、何度も言うように、Ac(中略)なので、ゲーム画面を収めるウィンドウそのものはいかに定数を使おうともでかいままです。
そこで!
そこで・・・・
説明が面倒なんで以下のコードをMainWnd_Createの中に書いてみてください。

MoveWindow(hMainWnd, 0, 0, _
GAMEWIDTH + GetSystemMetrics(SM_CXDLGFRAME) * 2, _
GAMEHEIGHT + GetSystemMetrics(SM_CYDLGFRAME) * 2 + GetSystemMetrics(SM_CYCAPTION), 0)

ウィンドウ枠も考慮に入れたサイズ指定です。
残像が残らない(614byte)

残像が残らないサンプル(36.0kilobyte)

続く