すぅぃった その3

シナリオにHSPプログラムを混ぜる

先のサンプルプログラムにおいては
ボタンを押す事によって
ボタンの数と中身それと表示されるテキストを変更しましたが
それだけではせっかくHSPを用いている意味がない
というわけで先ほど説明した
サンプルプログラムにプログラミング要素を加えてみます
ボタンを押す事によってボタンとテキストによって構成される場面を描画するわけですが
ボタンとテキストだけで構成されるプログラミングでは
まだノベルゲームですらできません
(ノベルゲームでもフラグとかあるだろうし)
一度にたくさんの事をやっても講座の意図がよくわからなくなってしまうであろうから
フラグによる条件分岐は次の講座で扱うとして
今講座においてはボタンとテキストのみで構成されるプログラムに
普通の意味におけるプログラムを埋め込んでみたいと思います

//	シナリオにHSPプログラムを混ぜる
//	HSP2.61HSP3.0動作確認

//	変数X
x=0

//	これらの変数の中身をobjprmに代入する
btstr_1=""
btstr_2=""

//	ボタンが押された時にこれらの変数をselected_btnextに代入して
//	メインルーチンにジャンプする
btnext_1=""
btnext_2=""

//	ボタンによって選択される選択肢のID
selected_btnext="a"

//	ここからメインルーチン
*bt_selected_gomain

switch selected_btnext
//	こんなかんじならボタン内の文字の変更と文章の記述
//case "xxxx"
//	btstr_1="NEXT"
//	btnext_1="xxxxx"
//	gosub *one_bt
//	pos 150,0
//	mes {"文章叙述"}
//	swbreak

//	こんなかんじなら変数の操作と強制条件分岐
//	ここではHPの回復を行っていますね
//case "xxx1"
//	player_hp=player_mhp
//	selected_btnext="xxx1x"
//	goto *bt_selected_gomain


case "a"
	btstr_1="X足す1"
	btnext_1="aa1"
	btstr_2="X引く1"
	btnext_2="ab1"
	gosub *two_bt
	pos 150,0
	mes "ボタンを押してください"
	swbreak
case "aa1"
	x+=1
	selected_btnext="ax1a"
	goto *bt_selected_gomain
case "ab1"
	x-=1
	selected_btnext="ax1a"
	goto *bt_selected_gomain
case "ax1a"
	btstr_1="NEXT"
	btnext_1="a"
	gosub *one_bt
	pos 150,0
	mes "Xの値は"+x+"です"
	swbreak
swend
stop

//	ボタンを一つ表示してbtstrの中身をボタンに代入する
*one_bt
	cls 0
	pos 0,0
	objsize 120,24
	button btstr_1,*selected1
return

//	ボタンを二つ表示してbtstrの中身をボタンに代入する
*two_bt
	cls 0
	pos 0,0
	objsize 120,24
	button btstr_1,*selected1
	button btstr_2,*selected2
return

//	ID0のボタンが押された時にselected_btnextにbtnext_1の中身を代入して
//	メインルーチンにジャンプ
*selected1
	selected_btnext=btnext_1
	goto *bt_selected_gomain

//	ID1のボタンが押された時にselected_btnextにbtnext_2の中身を代入して
//	メインルーチンにジャンプ
*selected2
	selected_btnext=btnext_2
	goto *bt_selected_gomain

//	ここまでサンプルプログラム

このサンプルプログラムと先の講座において提示した
サンプルプログラムの違いを説明します

case "aa1"
	x+=1
	selected_btnext="ax1a"
	goto *bt_selected_gomain

理解が難しい部分はここのくだりですね
まずselected_btnext="ax1a"
goto *bt_selected_gomainの記述は

*selected1
        selected_btnext=btnext_1
        goto *bt_selected_gomain

とあるようにボタンを押すと
selected_btnextにbtnext_1を代入してジャンプしていたのですが
selected_btnextに直接"ax1a"を代入してジャンプしているのです
あとはx+=1と記述している部分に
bsaveだろうがbloadだろうが
足し算だろうが掛け算だろうが割り算だろうが剰余求めようが
代入しようが何だろうが好き勝手コーディングしちゃって下さい
他の部分は前講座で用いたサンプルプログラムとほぼ同じです