すぅぃった その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="ax11"
        goto *bt_selected_gomain
case "ab1"
        x-=1
        selected_btnext="ax11"
        goto *bt_selected_gomain
case "ax11"
        if x>=3{
                selected_btnext="ax11a"
                goto *bt_selected_gomain        }
        else{   selected_btnext="ax11b"
                goto *bt_selected_gomain        }
case "ax11a"
        btstr_1="NEXT"
        btnext_1="a"
        gosub *one_bt
        pos 150,0
        mes "Xの値は3以上です"
        mes "実際のところXの値は"+x+"です"
        swbreak
case "ax11b"
        btstr_1="NEXT"
        btnext_1="a"
        gosub *one_bt
        pos 150,0
        mes "Xの値は3以下です"
        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 "ax11"
        if x>=3{
                selected_btnext="ax11a"
                goto *bt_selected_gomain        }
        else{   selected_btnext="ax11b"
                goto *bt_selected_gomain        }

しかしやっていることは単純
if文で条件を分岐して
それぞれ違うシナリオに進むのです