#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 *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 ;--------------------表示------------------ *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 |