// // シューティングゲームの制作 サンプル その2 // // 2014/07/20 「閉じる」を有効 title "戦え! ロケットマン" tmx=3 // 弾数の指定 (tmx=3で弾数4になる) dim tx,tmx // 弾のx座標を格納する配列 dim ty,tmx // 弾のy座標を格納する配列 dim tf,tmx // 弾の有無を判定する配列 repeat tmx+1 // repert と loop間を4回繰り返す tf(cnt)=0 // cntは0から4まで値が増えていき、配列変数tf(0)からth(4)が全て0になる loop buffer 1 // バッファ1を指定(ゲームキャラクター保存のため) picload "sozai4.bmp" // ゲームキャラクター画像の読み込み screen 0,500,500,4 // ウィンドウサイズ gmode 2 // gcopyのモード設定(黒は透明色としてコピーしない) px=200 : py=400 // 戦闘機の初期座標 pos px, py // 戦闘機の座標指定 gcopy 1, 0,0,50,50 // バッファ1より戦闘機の画像データをコピー onexit goto *exit // 閉じるボタンを押したら終了 *main redraw 0 // 仮想画面を指定 color 255,255,255 // 白色を指定 boxf 0,0,500,500 // 仮想画面の(0,0)から(500,500)の範囲を(白色で)塗りつぶす stick ky,15 // キー入力検査 kyに値が入る if ky = 1 : px=px-10 // kyが1なら[左]カーソルキー if px < 0 : px=0 // px<0 の時、px=0にする if ky = 4 : px=px+10 // kyが4なら[右]カーソルキー if px >450 : px=450 // px>450 の時、px=450にする(戦闘機の横幅50を考慮) if ky = 16 : gosub *kogeki // kyが16なら[スペース]キー サブルーチンkogekiへ移動 if ky = 2 : py=py-10 // kyが2なら[上]カーソルキー if py <10 : py=0 // py<10の時、py=0にする if ky = 8 : py=py+10 // kyが8なら[下]カーソルキー if py >450 : py=450 // py>440の時、py=440にする repeat tmx+1 // cntが0からtmx(=3)まで変化。loopまでの間をtmx+1(=4)回繰り返す。 if tf(cnt)=1 { // 弾の有無をチェック、tf()=1の時、弾が有りとして ty(cnt)=ty(cnt)-50 // 弾のy座標を計算 if ty(cnt)<10 : tf(cnt)=0 // 弾のy座標 ty()<10 の時、次回から表示なし pos tx(cnt), ty(cnt) // 弾の座標を指定 gcopy 1,50,0,50,50 // ロケットマンの画像データをバッファ1よりコピー } loop pos px,py // 戦闘機の座標を指定 gcopy 1,0,0,50,50 // 戦闘機の画像をバッファ1よりコピー redraw 1 // 仮想画面を実際の画面に写し取る wait 5 // 50msecの時間待ち goto *main stop *kogeki // -- 弾のデータをセット -- repeat tmx+1 if tf(cnt)=0 { // 弾の有無を記録するtf()のうち、0であるものを調べ tf(cnt)=1 // tf()=1 とする tx(cnt)=px // tx()=px として弾のx座標を格納 ty(cnt)=py // ty()=py-50 として弾上部のy座標を格納 break // repeat繰返しを抜け出し、リターン } loop return // [gosub *kogeki] の次の命令に移動 *exit end