◆ HSPのコーナー
ここでは基礎的な制作方法についてを取り扱います
おしながき
● ちょっと実践
・簡単なSTGを作ろう(始めに)
・その1(基本的なこと)
・その2(文字と文字列)
・その3(変数)
・その4(ラベル)
・その5(キー取得と条件分岐)
・その6(繰り返し)
トップへ戻る
◆ 掲示板
|
では少し本格的なプログラムを組んでみましょう。
まず始めにという事で簡単な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
などなど、かなりありますね…。
というわけで今後は文法とアルゴリズム部分の解説を述べていきます。
|