流れる星空を背景に、自分が好きなように動かせるキャラを表示するのだ

よし、いよいよ自機を動かずぞ〜!

と言っても、細かい計算なんかは先人の知恵を拝借した方が良さそうなんで、MIAさんのページに載ってた解説をそのまま利用させていただくことにしました。深謝。


	SCREEN 0,600,400,1,100,50,600,400
	CLS 4
	RANDOMIZE
	MX=300 :MY=200		;自機の初期位置を指定
	MOVE=2			;自機の移動速度を指定

;バッファー3に星空の絵を描きこみ
	BUFFER 3,600,400,1
	COLOR 0,0,0 : BOXF 0,0,600,400
		REPEAT 1000
		RND X,600 : RND Y,400
		RND R,7 : RR=(R+1)*32-1
		RND G,7 : GG=(G+1)*32-1
		RND B,7 : BB=(B+1)*32-1
		COLOR RR,GG,BB
		PSET X,Y
		LOOP
	BUFFER 4,600,400,1

;バッファー2に自機の画像を描きこみ
	BUFFER 2,600,400,1
	POS 0,0 : PICLOAD "myship.bmp"


;描画画面の準備
	GSEL 0 : COLOR 0,0,0 : BOXF O,O,600,400
	PALCOPY 3
	POS 0,0 :GCOPY 3,0,0,600,400		;星空を複写
	POS MX,MY :GCOPY 2,0,0,32,32		;自機画像を複写

;メインルーチン
*MAIN
	REPEAT 400
	REDRAW 0
	GOSUB *HAIKEI
	GOSUB *JIKI
	REDRAW 1
	STICK K : IF K=128 : END
	AWAIT 16
	LOOP
GOTO *MAIN

;流れる星を表示するためのサブルーチン
*HAIKEI
	GMODE 1,600,400
	GSEL 4
	POS 0,0 : GCOPY 3,0,0,600,400	;現在の画面を保存

	GSEL 3
	POS 0,0		: GCOPY 4,0,399,600,400
	POS 0,1		: GCOPY 4,0,  0,600,399

	GSEL 0
	POS 0,0		: GCOPY 3,0,0,600,400
RETURN

;自機を動かすためのサブルーチン	
*JIKI
	STICK PAT,15
	XV=(PAT>>2&1)-(PAT&1)
	YV=(PAT>>3&1)-(PAT>>1&1)
	MX=XV*MOVE+MX : MY=YV*MOVE+MY
	IF MX<0   : MX=O
	IF MX>566 : MX=566
	IF MY<0   : MY=0
	IF MY>364 : MY=364
	POS MX,MY : GMODE 2 : GCOPY 2,0,0,32,32
RETURN

なんと今回は、新しい命令一つもなし。そのかわり、何やら難しげな条件判断が(赤い部分)。ここはMIAさん曰く、「こういうふうにやるもんだと暗記しちゃいましょう」とのこと。要は変数PATを調べて、自機の移動方向を決定するための公式らしい。で、次の行で自機の座標(MX,MY)を決定すると。移動速度をわざわざ変数(MOVE)にしたのは、後々スピードアップアイテムを登場させるため。なんて読みが深いんでしょ(笑)

あと、緑の部分の条件判断は、自機がウィンドウからはみださないようにするため。ウィンドウサイズが600×400なんで、右端と下端は若干少なめに設定してある。これは、カレントポジションを左上にした32×32のキャラを表示させてるから。

ちなみに最初に真っ黒な背景で動かしたら、自機のかけらが残っちゃったんだけど、今回の場合毎回背景の描きこみをしてるから、自動的に消えちゃうんだよね。なんか案ずるより生むが易しって感じ。無駄なことしないですむってのはいいよね。

前のページへ戻る 奮闘記のメニューへ戻る 次のページへ進む