#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			;自機の移動量

;--------------------画面の準備------------------
	buffer 2,CHAR_W,CHAR_H,0 : cls 4
	font "MS ゴシック",CHAR_H
	color 255,255,255 : 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 *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

;--------------------表示------------------
*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
	redraw 1
	return
まずは、融通の利くように、物のサイズを決めておきましょう。
ここでは講座なので画像は使用しません(というより管理人が絵をかけないので・・・)。
次に、必要な変数を初期化および、バッファーに必要な画像を読み込んでおきます。 この辺は自分の自由にしてください。
さて、サブルーチンの説明です。
自機の移動に関しては、stick命令で方向キーの入力を確認します。押されているかの判定は =ではなく&を使って行います。こうしないと、斜めの移動ができません(&についての 詳しい話は、ちょっと難しい話のビット、条件判断を読めばわかると思います)。 また、画面からはみ出ては困るので、ここでは強制的に画面内に納めるようにしています。
表示に関しては、詳しく説明する必要はないと思いますが、大事なことが2つあるので、 それについて説明します。一つ目は、はじめにredraw 0を用いて、最後にredraw 1を 行うことです。これは、redraw 1の命令が行われたときだけ、画面を書き換えるのです。 通常は、picloadやmesなどでも、一度書き換えてしまいます。それをすぐにはしないで 一回だけですべてを書き換えます。これにより画面のちらつきがほぼ無くなります。 もう一つは、画面全部を黒で塗りつぶす時にはclsを使用しないと言うことです。 単純にboxfで塗りつぶした方がclsよりも早いということです。早い処理が必要なゲームなどには clsは使用しないようにしましょう。
■ 目次へ戻る ■

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル