HSPプログラマに100の質問

HSP講座&スクリプト

ここではあくまで1から始めるのである程度の技術を習得している方にお勧めします。
逆に技術が高い方でも、ここで習うことは無いと思いますねw
1・シューティングゲームを作ってみる
ここではシューティングゲームを作ってみます。
ここではあくまで講座なので、スクリプトをそのままぜんぶ載せることはないです。
サンプルをそのまま使うよりも覚えたほうが役に立ちますからねw
まずは画像を用意します。
そして、画像を仮想画面に描画します。そのままpicloadで画像を描画するよりも一度仮想画面に描画してgcopyなどでコピーしたほうが軽くなります。
仮想画面の初期化はbuffer命令でします。初期化したあとはpicloadで仮想画面に画像を描画してください そして次にscreenで画面を初期化します。
ここらへんで変数の設定をしておいて下さい。(自機の初期位置など)
もし、画像を透過させたいならここで「gmode 2」と指定してください(R,G,B値が0,0,0の所が透過されます)
そしてその後はメインルーチンを作ります。
メインルーチンの一番上はboxfで画面全体を塗りつぶします。
次はstickでキー入力判定をします。
stick ky,15
if ky&1:x-4
if ky&2:y-4
if ky&4:x+4
if ky&8:y+4
;みたいなかんじですw
しかしこれでは画面外にも移動できてしまうのでifと自機座標の変数、ここではx,yを使って画面外にでれなくしましょう。
以下工事中・・・

スクリプト置き場
ご自由にお使いください。動作保証とかはないです。ソースは汚いです。ジャンクスクリプトっていうんですかね(ほんとかよw

screen 0,104,40
life=100
color 0,0,0:boxf
repeat
redraw 0
if life>=50:color 0,255,0
if life>=10&life<50:color 255,255,0
if life<10:color 255,0,0
v+1
if v=10:line 0,0,10,36
if v=20:line 10,36,20,12
if v=30:line 20,12,30,30
if v=40:line 30,30,50,30
if v=50:line 50,30,60,10
if v=60:line 60,10,70,30
if v=70:line 70,30,80,4
if v=80:line 80,4,90,4
if v=90:line 90,4,100,20
if v=100:color 0,0,0:boxf:v=0
stick ky
if ky&16:life-10
redraw 1
wait 1
loop
なんか適当に作ってみた。スペースでlifeは減らせます。ちょっとバイオハザードの体力をイメージしてみたり。w
screen 0,400,400
font "MS ゴシック",20
title "追跡君からは逃れられない"
tx=190:ty=190
repeat
redraw 0
////描画
color 255,255,255:boxf
color 0,0,0
pos x,y
mes "〇"
color 255,0,0
pos tx,ty
mes "●"
////描画
////動作
stick ky,15
if ky&1:x-5
if ky&2:y-5
if ky&4:x+5
if ky&8:y+5
if x<0:x+5
if x>380:x-5
if y<0:y+5
if y>380:y-5

if tx>x{
txs-1:tx+txs
if txs=-10:txs+1
pos 0,0:mes "追跡中・・・"
}
if txy{
tys-1:ty+tys
if tys=-10:tys+1
pos 0,0:mes "追跡中・・・"
}
if ty

・・・暇つぶし的に作ったものだす。うまくできないときはここ
buffer 1,180,50
pos 0,0:picload "tama.gif",1
pos 40,0:picload "teki.gif",1
pos 90,0:picload "ttama.gif",1
pos 130,0:picload "ziki.gif",1
screen 0,360,480,0,0,0
tmax=5
dim hissatu,2
dim tx,tmax:dim ty,tmax:dim tama,tmax
repeat
redraw 0
///描画
color 0,0,0
boxf
pos x,y
gcopy 1,130,0,50,50
color 255,255,255
boxf 0,440,360,480
color 0,0,0
boxf 1,441,358,478
color 0,hv,255
if hv>255:color 0,255,255
if hv>358:color 255,50,50
boxf 1,441,1+hv,478
///描画
///動作
stick ky,79
if ky&1:x-5
if ky&2:y-5
if ky&4:x+5
if ky&8:y+5
if x<0:x+5
if x>330:x-5
if y<0:y+5
if y>390:y-5
///動作
///必殺技
getkey tameru,32
if tameru=1:hv+5:if hissatu(0)=0:hissatu(0)=1
if hv>359:hv=359
if tameru=0:if hissatu(0)=1:hissatu(1)=1
if hissatu(1)=1{
color 150,150,255:boxf x,y,x+50,0
hv-5
if hv<0:hissatu(1)=0:hissatu(0)=0:hv=0
}
///必殺技
gosub *tamahassya
redraw 1
wait 1
loop
*tamahassya
if ky&64:if hissatu(1)=0:if v=0:if tama(tcnt)=0{
tx(tcnt)=x+5:ty(tcnt)=y
tama(tcnt)=1
tcnt+1
if tcnt=tmax:tcnt=0
}
repeat tmax
if tama(cnt)=1{
if hissatu(1)=1:tama(cnt)=0
ty(cnt)-30:pos tx(cnt),ty(cnt):gcopy 1,0,0,40,40
if ty(cnt)

うまくできないときはここ 画像はここ(透過していません)