sample\obaq\fuujin_dish.hsp » Plain Format
; 風神 ver1.0 HSP Script / onitama
;
; 風を操る風神となって魂のカケラを集めてください。操作はすべてマウスで行ないます。
; 魂のカケラ(赤い点のある物体)を出口(緑色の点がある四角形)に送り出せばポイントとなります。
; プレイヤーは、画面上の好きな場所でボタンを押すことで、そこから強い風を発生させることができます。
; ボタンを押し続けることで、より強い力となります。うまく風を使って、魂のカケラを導きましょう。
; 風を発生させると画面上Powerで示されている力が減っていきます。Powerが0になるとゲームオーバーです。
; 限られた風の力でどこまでポイントを稼ぐことができるかを競うゲームです。
; ゲームのステージは、ランダムに生成されます。遊ぶたびに異なるテクニックと判断が要求されます。
;
;
;
#include "hsp3dish.as"
#packopt name "fuujin"
#define gametitle "風神"
#const gr_ball 1
#const gr_goal 2
#const gr_drain 4
#const gr_wall 8
randomize ; 乱数の初期化
screen 0,640,480 ; ウィンドウ初期化
title gametitle ; タイトル
high=0 ; ハイスコア
celload "fuujin.png",1 ; タイトル画面
*maintitle
; タイトル画面
cls ; 画面の初期化
objsize 120,24:pos 260,320
button "START",*gamestart
button "END",*gameend
*main1
redraw 0
color 0,0,0:boxf ; 画面クリア
gmode 0,640,480
pos 0,0:gcopy 1 ; タイトル表示
x=mousex:y=mousey
color 255,255,255
pos x-10,y-10:mes "+"
redraw 1
await 1000/30
goto *main1
*gamestart
; ゲームスタート
cls ; 画面の初期化
qreset ; OBAQの初期化
; 背景(坂道)を作成
bgdiv=10:dim mdl_bg,10
wx=120:wy=60:px=wx/bgdiv/2
x=wx/2:y=-wy:bgx=146:bgy=114
repeat bgdiv
i=0:x2=px:y2=y
y+=rnd(8)+1:if y>0 : y=0
x1=-px:y1=y
mdl_bg(i)=x2:mdl_bg(i+1)=y2:i+=2
mdl_bg(i)=x1:mdl_bg(i+1)=y1:i+=2
mdl_bg(i)=x1:mdl_bg(i+1)=0:i+=2
mdl_bg(i)=x2:mdl_bg(i+1)=0:i+=2
mdl_bg(i)=x2:mdl_bg(i+1)=y2:i+=2
qaddmodel bg, mdl_bg, -1, bgx,bgy,0, 1,1,colsw_none ; モデルを追加
qtype bg, type_bind
qgroup bg, gr_wall
bgx-=px*2
loop
; 排出口を作成
qaddpoly drain, 4, 20,114,0, 16,2, colsw_none
qtype drain, type_bind
qgroup drain, gr_drain,gr_ball,gr_ball
; ゴールを作成
qaddpoly goal, 4, 100,20,0, 8,8
qtype goal, type_bind
qgroup goal, gr_goal,gr_ball,gr_ball
; ゲームスタート
score=0 ; スコア
frame=0 ; フレームカウント用
wind=1500 ; 風圧のこり
blflag=0 ; 風圧カウント
gameover=0 ; ゲームオーバーカウント
*main
; メインループ
;
redraw 0 ; 画面の更新を開始
gradf ,,,,1,0,128 ; 画面クリア
qexec ; OBAQによるオブジェクトの更新
stick key,$10f ; キーの取得
if key&128 : end ; [ESC]キーで終了
if (frame\16)=0 { ; ボールを追加
qaddpoly i, 12, 15+rnd(4),12,0, 4,4
qweight i,6.0,3000.0
qgroup i, gr_ball
}
if wind<=0 { ; ゲームオーバー処理
color 0,255,255
pos 284,220:mes "GAME OVER"
gameover++
if gameover>500 : goto *maintitle
key=0
}
if key&$100 { ; 風を発生
blx=mousex:bly=mousey
blflag=(blflag+1)&15
qblast blx/4,bly/4,1
color 255,255,0:i=blflag*4
circle blx-i,bly-i,blx+i,bly+i,0
wind--
} else {
blflag=0
}
qdraw ; オブジェクトの描画
x=mousex:y=mousey
pos x-10,y-10:mes "+"
; 表示関係
if score>high : high=score
color 255,255,255
pos 0,0:mes "Power:"+wind+" High:"+high
pos 480,0:mes "Score:"+score ; スコア表示
redraw 1 ; 画面の更新を終了
await 1000/60 ; 一定時間待つ
; 排出口との接触判定
qcollision drain
qgetcol i,colx,coly
if i>=0 {
qdel i ; GOALに触れた玉は消す
}
; ゴールとの接触判定
qcollision goal
qgetcol i,colx,coly
if i>=0 {
score+=5
qdel i ; GOALに触れた玉は消す
}
frame++ ; フレームカウントを更新
goto *main
*gameend
end