シューティングゲームを作ろう その2 |
2.プログラム実行時の初期設定 |
#include "hmm.as" ; ;プログラム実行時の初期設定 ; #define GWIDTH 480 ;ゲーム画面の幅 #define GHEIGHT 480 ;ゲーム画面の高さ #define ENEMAX 64 ;敵の最大数 #define ESHOTMAX 100 ;敵の弾の最大数 chgdisp 1 bgscr 0, 640, 480, 0, 0, 0 gsel 0, 2 gosub *Clear_Screen ;仮想画面に絵を読み込む celload "graphics\\size32.bmp", 1 celdiv 1, 32, 32 celload "graphics\\size64.bmp", 2 celdiv 2, 64, 64 celload "graphics\\size16.bmp", 3 celdiv 3, 16, 16 randomize dim enemy_x, ENEMAX dim enemy_y, ENEMAX dim enemy_dx, ENEMAX dim enemy_dy, ENEMAX dim enemy_state, ENEMAX ;0:存在しない 1:通常 2:爆発中 dim enemy_kind, ENEMAX dim enemy_phase, ENEMAX dim enemy_cnt, ENEMAX dim eneexplode_cnt, ENEMAX dim eshot_x, ESHOTMAX dim eshot_y, ESHOTMAX dim eshot_dx, ESHOTMAX dim eshot_dy, ESHOTMAX dim eshot_f, ESHOTMAX zkey = 0 upkey = 0 downkey = 0 dsinit diinit digetjoynum n_joy = stat hiscore = 5000 ;効果音を読み込む dsloadfname "sound\\tm2_shoot003.wav", 0 ;ショット音 dsloadfname "sound\\tm2_bom001.wav", 1 ;敵の爆破音 dsloadfname "sound\\bom01.wav", 2 ;自機の爆破音 ;BGMファイルを開く mci "open sound\\rbutai_xg.mid alias bgm" mci "set bgm time format milliseconds"
#define ESHOTMAX 100 ;敵の弾の最大数
敵の弾は最大100発まで存在できるものとします。
本ゲームの画面はフルスクリーンモードとします。
chgdisp 1
フルスクリーンモードにします。
bgscr 0, 640, 480, 0, 0, 0
枠がないウィンドウを作ります。
第1引数はウィンドウIDで、第2、第3引数は画面の大きさです。第4引数は画面モードで、0だとフルカラー(すべての色が使える)で、1だとパレットモード(256色しか使えない)です。第5、第6引数はウィンドウを配置するx座標、y座標で、通常は0を指定します。
gsel 0, 2
第2引数に2を指定すると、第1引数で指定したウィンドウが常に最前面に表示されます。
要は、フルスクリーンモードにするには
chgdisp 1 bgscr 0, 640, 480, 0, 0, 0 gsel 0, 2
とする、ということです。なお、ウィンドウモードにするには
chgdisp screen 0, 640, 480 gsel 0, 1
とします。
;仮想画面に絵を読み込む celload "graphics\\size32.bmp", 1 celdiv 1, 32, 32 celload "graphics\\size64.bmp", 2 celdiv 2, 64, 64 celload "graphics\\size16.bmp", 3 celdiv 3, 16, 16
size32.bmp、size64.bmp、size16.bmpはそれぞれ32×32、64×64、16×16の絵が並んだ画像です。
size32.bmp
size64.bmp
size16.bmp
dim enemy_x, ENEMAX dim enemy_y, ENEMAX dim enemy_dx, ENEMAX dim enemy_dy, ENEMAX dim enemy_state, ENEMAX ;0:存在しない 1:通常 2:爆発中 dim enemy_kind, ENEMAX dim enemy_phase, ENEMAX dim enemy_cnt, ENEMAX dim eneexplode_cnt, ENEMAX
敵の配列変数です。
enemy_x、enemy_yは敵の座標です。enemy_dx、enemy_dyは、一度にx方向、y方向に動くドット数です。enemy_stateは敵の状態です。0なら存在しない、1なら通常の状態、2なら爆発中であることを表します。
enemy_kindは敵の種類、enemy_phaseは現在どの段階にあるか、enemy_cntは弾発射用カウンタ、eneexplode_cntは敵の爆発用カウンタです(詳細は後述)。
dim eshot_x, ESHOTMAX dim eshot_y, ESHOTMAX dim eshot_dx, ESHOTMAX dim eshot_dy, ESHOTMAX dim eshot_f, ESHOTMAX
敵の弾用配列です(eはenemyの略です)。
eshot_x、eshot_yは弾の座標です。eshot_dx、eshot_dyは、一度にx方向、y方向に動くドット数です。eshot_fは弾の存在フラグです。
zkey = 0 upkey = 0 downkey = 0
「キー、ジョイパッドの入力」サブルーチンで、
pre_zkey = zkey pre_upkey = upkey pre_downkey = downkey
としています。そのため、最初にこのサブルーチンを呼ぶ時に、zkey、upkey、downkeyの初期値が必要です。便宜的に0としています。