すぅぃった その1

ボタンとテキストの関係を考えてみよう

ボタンを押せばテキストが表示させる
押したボタンの種類によってボタンの中身も変わる
そんなプログラムを考えてみよう

このサンプルプログラムは3つの場面によって構成される
シナリオらしきものによってプログラムを制御しています
HSPを少しかじった人ならばボタンの表示とテキストの表示くらいは
理解しているでしょうが
ボタンとボタンによる場面の更新とテキストの反映からなる
シナリオらしきものの構成は少しややこしいです
このサンプルプログラムは
ボタンとボタンによる場面の更新とテキストの反映からなる
構成を持ったプログラムです
このサンプルプログラムに手を加えて
画面を手のこんだものとして画像と音を加えれば
立派なアドベンチャーゲームと相成ります
それではサンプルプログラムいってみましょー!!!

//	以下はサンプルプログラム
//	SCENARIO_TEST_01.as

//	HSP2.61HSP3.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


case "a"
	btstr_1="A"
	btnext_1="aa"
	btstr_2="B"
	btnext_2="ab"
	gosub *two_bt
	pos 150,0
	mes "ボタンを押してください"
	swbreak
case "aa"
	btstr_1="NEXT"
	btnext_1="a"
	gosub *one_bt
	pos 150,0
	mes "あなたはAを押しましたね"
	swbreak
case "ab"
	btstr_1="NEXT"
	btnext_1="a"
	gosub *one_bt
	pos 150,0
	mes "あなたはBを押しましたね"
	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

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


ボタンがあってその押したボタンによって
次に表示されるテキストとボタンの数と中身に
反映されるプログラムを考えてみよう

まずはその場面において表示する要素の集まりを用意します
そのまえにサンプルプログラムにおける重要な変数3種類の説明から

btstr_1 btstr_2
btstrとはbuttonに表示するstrという意味で適当につけた変数の名前でもあり
深くはつっこまないように
その場面においてボタンに表示するstrです
btstr_1="あいうえお" と記述した場合
その場面において表示されるボタンの一番目に"あいうえお"
と表示します 実際はbtstr_1="あいうえお" と記述しただけでは
ボタンに何も表示されませんがgosubを用いて
btstr_1="あいうえお":gosub *one_bt
と記述する事でボタンの一番上に"あいうえお"と表示します

selected_btnext
現在どこの場面であるかがこの変数によって指し示されています

このサンプルプログラムにおけるメインルーチンを簡単に示すと

*bt_selected_gomain
switch selected_btnext
case "a"
        ・・・
        swbreak
case "aa"
        ・・・
        swbreak
case "ab"
        ・・・
        swbreak
・・・
swend
stop


となっているのですが
"a"とか"aa"とか"ab"とかの文字列は一体どういう法則で命名しているのでしょうか
これはもう好きなように名前をつけちゃって下さい

*bt_selected_gomain
switch selected_btnext
case "start"
	btnext_1="a"
	btnext_2="b"
	・・・
	swbreak
case "a"
	btnext_1="start"
	・・・
	swbreak
case "b"
	btnext_1="start"
	・・・
	swbreak
・・・
swend
stop

なんて命名するともっとわかりやすいかもしれません
僕もあまり深く考えて分岐先の名前を決めているわけではないですが
分岐1の名前は"〜a"分岐2の名前は"〜b"というように
なんとなくどこをどう分岐したかわかるように命名しています
これは講座が進むにつれて重要性が大きくなっていくと思います
でも命名規則で一番重要なのは
そこがどんな場面であるかわかりやすい事です
適当に命名すると後から読み直して自分が何を記述しているのか
わけがわからなくなってきます
命名に時間を費やしすぎて肝心のプログラミングが遅々として進まないのも
よくないでしょうが
あまりにも適当につけすぎて読み返した時にわけがわからないのも問題です
それは変数の命名と一緒