広告スペース 笑っているのか、泣いているのかさっぱり解らない驚異の無表情キャラ「クター」 © GIGA-RENSYA


◆ HSPのコーナー
ここでは基礎的な制作方法についてを取り扱います

おしながき

 ● ちょっと実践
  ・簡単なSTGを作ろう(始めに)
  ・その1(基本的なこと)
  ・その2(文字と文字列)
  ・その3(変数)
  ・その4(ラベル)
  ・その5(キー取得と条件分岐)
  ・その6(繰り返し)


トップへ戻る


掲示板

簡単なSTGを作ろうその1

では少し本格的なプログラムを組んでみましょう。

まず始めにという事で簡単なSTGを作ることにしましょう。
簡単なSTGでは必要な命令はあまり多くありません。
特殊な命令は画像表示くらいでしょう。

…というわけでサンプルプログラムを書いてみました。


	
	screen 0,480,240,1
	randomize

	jiki_x=20
	jiki_y=100
*main
	redraw 2
	title "score "+ten
	color 0,0,0
	boxf 0,0,480,240

	gosub *jiki
	gosub *teki
	gosub *hantei

	await 10
	redraw 1
	goto *main

*jiki
	color 255,255,255
	pos jiki_x,jiki_y
	mes"●"
	
	stick key,15
	if key&1 :jiki_x-=2 :if jiki_x<0 :jiki_x=1
	if key&4 :jiki_x+=2 :if jiki_x>450 :jiki_x=450
	if key&2 :jiki_y-=2 :if jiki_y<0 :jiki_y=1
	if key&8 :jiki_y+=2 :if jiki_y>230 :jiki_y=230
	
	if key&128 :end

	repeat 15
		if tama.cnt=0 { 
			if key&16  {
				tama_x.cnt=jiki_x 
				tama_y.cnt=jiki_y 
				tama.cnt=1 :key=0
			}
		}
		else {
			tama_x.cnt+=6 
			if tama_x.cnt>480 :tama.cnt=0 
		}
		if tama.cnt=1 :pos tama_x.cnt,tama_y.cnt :mes"◎"
	loop		
	return

*teki
	repeat 15
		if teki_h.cnt=0 {
			rnd rt,5 :if rt=0 {
				rnd spx.cnt,5 :teki_x.cnt=480
				rnd spy.cnt,5 :rnd teki_y.cnt,200
				spx.cnt++
				spy.cnt-=2
				teki_h.cnt=1
			}		
		}	
		else {
			teki_x.cnt-=spx.cnt
			teki_y.cnt+=spy.cnt
			if teki_y.cnt<0 :spy.cnt=spy.cnt*(-1)
			if teki_y.cnt>230 :spy.cnt=spy.cnt*(-1)
			pos teki_x.cnt,teki_y.cnt
			mes "∈"

			if teki_x.cnt<0 :teki_h.cnt=0
		}

	loop

	return

*hantei

	repeat 15
		if tama.cnt=1  { 
			n=cnt

		repeat 15
			x=teki_x.cnt :y=teki_y.cnt 
			tx=tama_x.n :ty=tama_y.n
			hata=teki_h.cnt
			if (hata=1)&(x+16>tx)&(tx+16>x)&(y+16>ty)&(ty+16>y) {
				ten+=10 :teki_h.cnt=0 :tama.n=0
			}
		loop
		}
	loop
	
	repeat 15
		
		x=teki_x.cnt :y=teki_y.cnt :tx=jiki_x :ty=jiki_y
		if (teki_h.cnt=1)&(x+16>tx)&(tx+16>x)&(y+16>ty)&(ty+16>y) {
			pos 200,100 :color 255,255,255
			title "game over" :await 2000 :end
		}
	loop

	return





少ないと述べましたが、まぁ…それなりに命令はあるので…。
これを丸写しして実行してみると、
「●を操作しスペースキーで◎を出し∈を倒す」
という内容のシューティングゲームができる筈。
(当り判定は適当なので少し理不尽な当り方をします)

文法としては
randomize
redraw
title
gosub
goto
await
color
stick
pos
if
repeat
end
などなど、かなりありますね…。

というわけで今後は文法とアルゴリズム部分の解説を述べていきます。