2009年2月7日土曜日

strf (使ってないけどw) その2

なんかコメントなかったので書き直し
配列そのまま使ってる部分(文字列返ってくるので)を
intにキャストしてgetter使った

TACKはHSPもしますけどRPGツクールもします
変数使ったテキストだけの自前戦闘作って
ショボくて飽きたりします

そんな感覚で作りました
それがワクワクすると形容した部分です
では、サンプルスクリプトです
// 製作:y.tack version 0.03
;
// enemy のstates eはenemyのeです
// 値は1から3にしたかったので4つ確保してます
sdim e_name,32,4
e_name="","スライム","こうもり","さそり"
dim e_mhp,4
e_mhp=0,20,40,80
dim e_hp,4
e_hp=0,20,40,80
dim e_at,4
e_at=0,10,20,40
// Player のstates pはPlayer のpです
// 値は1から3にしたかったので4つ確保してます
sdim p_name,32,4
p_name="","TACK","RAG","LIST"
dim p_mhp,4
p_mhp=0,30,60,120
dim p_hp,4
p_hp=0,30,60,120
dim p_at,4
p_at=0,10,20,40
;
goto *@f
// enemy のgetter 文字列で取得したいのでstr()使ってます
#defcfunc get_e_name int number
return e_name.number
#defcfunc get_e_hp int number
return str(e_hp.number)
#defcfunc get_e_at int number
return str(e_at.number)
// enemyのHPを減らす処理
#deffunc sub_e_hp int number,int value
e_hp.number-=value
return
;
// Player のgetter 文字列で取得したいのでstr()使ってます
#defcfunc get_p_name int number
return p_name.number
#defcfunc get_p_hp int number
return str(p_hp.number)
#defcfunc get_p_at int number
return str(p_at.number)
// PlayerのHPを減らす処理
#deffunc sub_p_hp int number,int value
p_hp.number-=value
return
;
// HP初期化
#deffunc e_hp_reset int number
e_hp.number=e_mhp.number
return
#deffunc p_hp_reset int number
p_hp.number=p_mhp.number
return
;
// 戦闘の前に表示する文字列
#defcfunc fight_begin int p_number,int e_number
return get_p_name(p_number)+" VS "+get_e_name(e_number)
;
// Playerの攻撃
// get_p_at()は文字列で返ってくるのでintにcastしてます
#defcfunc p_attack int p_number,int e_number
sub_e_hp e_number , int(get_p_at(p_number))
s =get_p_name(p_number)+"の攻撃!"+get_e_name(e_number)+" は "
s+=get_p_at(p_number)+" のダメージを受けた"
return s
// enemyの攻撃
// get_e_at()は文字列で返ってくるのでintにcastしてます
#defcfunc e_attack int p_number,int e_number
sub_p_hp p_number , int(get_e_at(e_number))
s =get_e_name(e_number)+"の攻撃!"+get_p_name(p_number)+" は "
s+=get_e_at(e_number)+" のダメージを受けた"
return s
;
// Playerの勝利
#defcfunc p_win int p_number
return get_p_name(p_number)+" の勝利!"
// enemyの勝利
#defcfunc e_win int e_number
return get_e_name(e_number)+" の勝利!"
;
// HPの表示
#defcfunc show_hp int p_number,int e_number
s =get_p_name(p_number)+" : HP "+get_p_hp(p_number)+" "
s+=get_e_name(e_number)+" : HP "+get_e_hp(e_number)
return s
*@
sel_p=1
sel_e=1
// Playerキャラ選択
*scene_A
cls 0
mes "プレイヤーキャラクターを選んで下さい"
button get_p_name(1),*sel_p_A
button get_p_name(2),*sel_p_B
button get_p_name(3),*sel_p_C
stop
*sel_p_A
sel_p=1
goto *scene_B
*sel_p_B
sel_p=2
goto *scene_B
*sel_p_C
sel_p=3
goto *scene_B
// 敵キャラ選択
*scene_B
cls 0
mes "対戦相手を選んで下さい"
button get_e_name(1),*sel_e_A
button get_e_name(2),*sel_e_B
button get_e_name(3),*sel_e_C
stop
*sel_e_A
sel_e=1
goto *scene_C
*sel_e_B
sel_e=2
goto *scene_C
*sel_e_C
sel_e=3
goto *scene_C
// 戦闘前の文字列の表示
*scene_C
cls 0
mes fight_begin(sel_p,sel_e)
button "NEXT",*scene_p_AT
stop
// Playerの攻撃
*scene_p_AT
cls 0
mes show_hp(sel_p,sel_e)
mes p_attack(sel_p,sel_e)
if int(get_e_hp(sel_e))>0{
button "NEXT",*scene_e_AT
}else{
button "NEXT",*scene_p_win
}
stop
// enemyの攻撃
*scene_e_AT
cls 0
mes show_hp(sel_p,sel_e)
mes e_attack(sel_p,sel_e)
if int(get_p_hp(sel_p))>0{
button "NEXT",*scene_p_AT
}else{
button "NEXT",*scene_e_win
}
stop
// Playerの勝利
*scene_p_win
cls 0
mes p_win(sel_p)
p_hp_reset sel_p
e_hp_reset sel_e
button "NEXT",*scene_A
stop
// enemyの勝利
*scene_e_win
cls 0
mes e_win(sel_e)
p_hp_reset sel_p
e_hp_reset sel_e
button "NEXT",*scene_A
stop

#スクリプトが横からはみ出たのでスクロールバーをつけてみました
#スクロールバーつけたのはじめてや(久しぶりのWEB検索でした)

0 件のコメント: