#define WIN_W 640 ;ウィンドウの幅
#define WIN_H 480 ;ウィンドウの高さ
#define CHAR_W 40 ;自機や敵の幅
#define CHAR_H 40 ;自機や敵の高さ
;--------------------変数の初期化------------------
char_x=WIN_W/2 : char_y=WIN_H-50 ;キャラクタの初期位置
dx=4 : dy=4 ;自機の移動量
randomize ;乱数初期化
enemy=8
dim enemy_x,enemy : dim enemy_y,enemy ;敵の初期位置の変数
dim enemy_dx,enemy : dim enemy_dy,enemy ;敵の移動量
;敵の初期位置、移動量を乱数で決定
repeat enemy
rnd enemy_x.cnt,WIN_W-CHAR_W
rnd enemy_y.cnt,WIN_H/2
rnd kari,11 : enemy_dx.cnt=kari-5
rnd kari,11 : enemy_dy.cnt=kari-5
loop
;--------------------画面の準備------------------
buffer 2,CHAR_W,CHAR_H*2,0 : cls 4
font "MS ゴシック",CHAR_H
color 255,255,255 : mes "▲" ;自機
color 220,220,0 : mes "◆" ;敵
screen 0,WIN_W,WIN_H,0,0,0
cls 4
gmode 2 ;黒(0,0,0)をすかして表示
;--------------------メインループ------------------
*main_loop
await 10
gosub *my_move ;自機移動
gosub *enemy_move ;敵移動
gosub *hantei ;あたり判定
gosub *draw ;表示
goto *main_loop
;--------------------サブルーチン------------------
;--------------------自機移動------------------
*my_move
stick a,15 ;これで、十字キーの押しっぱなしの判定ができる(1+2+4+8=15)
if a&1 : char_x-=dx ;左
if a&2 : char_y-=dy ;上
if a&4 : char_x+=dx ;右
if a&8 : char_y+=dy ;下
;ウィンドウからはみ出ないかを判定
if char_x<0 : char_x=0
if char_y<0 : char_y=0
if char_x>(WIN_W-CHAR_W) : char_x=(WIN_W-CHAR_W)
if char_y>(WIN_H-CHAR_H) : char_y=(WIN_H-CHAR_H)
return
;--------------------敵移動------------------
*enemy_move
repeat enemy
enemy_x.cnt+=enemy_dx.cnt
enemy_y.cnt+=enemy_dy.cnt
if (enemy_x.cnt < 0)|(enemy_x.cnt > (WIN_W-CHAR_W)) : enemy_dx.cnt=-enemy_dx.cnt
if (enemy_y.cnt < 0)|(enemy_y.cnt > (WIN_H-CHAR_H)) : enemy_dy.cnt=-enemy_dy.cnt
loop
return
;--------------------あたり判定------------------
*hantei
repeat enemy
if (char_x+(CHAR_W*3/4) >enemy_x.cnt)&(enemy_x.cnt+(CHAR_W*3/4) > char_x) {
if (char_y+(CHAR_H*3/4) >enemy_y.cnt)&(enemy_y.cnt+(CHAR_H*3/4) > char_y) {
dialog "MISS!!"
end
}}
loop
return
;--------------------表示------------------
*draw
redraw 0
color 0,0,0
boxf 0,0,WIN_W,WIN_H ;全画面を塗りつぶす
;自機の表示
pos char_x,char_y
gcopy 2,0,0,CHAR_W,CHAR_H
;敵の表示
repeat enemy
pos enemy_x.cnt,enemy_y.cnt
gcopy 2,0,CHAR_H,CHAR_W,CHAR_H
loop
redraw 1
return
|