HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1123
さめノベルゲーム、紙芝居ソフト等を作る際に、テキスト側から変数などを代入したい。7解決


さめ

リンク

2016/11/23(Wed) 03:11:25|NO.77367

始めまして。

HSPの教本のサンプル(新宿公園がどうとか)を読みながら、ノベルゲームと言うか紙芝居を作り、
サンプルに行数を足して音楽の再生を加えたりする所まで着ました。
そこで、一部で流行ってた「夢小説」みたいに、主人公の名前を変えられるようにしようと考えたのですが、
シナリオファイル側で、

--- No.000 ---
1.jpg(画像)
1.mid(音楽)
私の名前は「name」です(メッセージ)

--- No.001 ---
......
(あくまで例です、現時点で「」内をどう処理させれば良いかわからないので)

と書き、HSPで読み込む時に
	mes"自分の名前"
input name ,100,40 , 8

などで予め指定した文字(上の「name」にあたる)を当てはめられないかと試行錯誤しているのですが、どうもうまく行きません。
\nで改行、と言う様な特殊な決まりがあるのは知っているのですが、それに順ずる決まりがあるのでしょうか?
宜しくお願いします。



この記事に返信する


MillkeySoftware

リンク

2016/11/23(Wed) 05:12:36|NO.77368

作品に絶対出てこない文字列にしちゃえば?

テキスト上は「私の名前は $Name$...」とか

表示する前に、テキスト部を分離してるよね。
その際に、文字列に名前を担当する文字列 $Name$ があったらその部分を「自分の名前」とかに置き換えればいいと思うよ。

サンプルだと、moj という変数が画面に表示する文字列になっているからその moj に置き換え対象の文字列があるかどうかを調べればいいと思うよ。

//仮配列変数(サンプル本体がないので仮のデータです) Name = "おにたま" //input などで自分の名前を指定したという想定 sdim moj,64,32 moj(0) = "私の名前は $Name$..." mes "置き換え前の文字列 : "+moj(0) //文字置き換え部 strrep moj(0),"$Name$",Name //↑置き換えする文字が存在しない場合は strrep は何もしない //仮の表示 mes "置き換え後の文字列 : "+moj(0)



MillkeySoftware

リンク

2016/11/23(Wed) 05:29:22|NO.77369

スレタイよく見てなくて答えてたけど・・・
「ノベルゲーム、紙芝居ソフト等を作る際に、テキスト側から変数などを代入したい。」
というタイトルを
「ノベルゲーム、紙芝居ソフト等を作る際に、テキスト側の文字列を指定した文字列を置き換えたい」
に脳内変換したけど、間違っているのかな・・・間違っていたら 記事.77368 は無視してください



Taker32X

リンク

2016/11/23(Wed) 19:24:39|NO.77373

ちょっと雜かも知れませんが、

#module #deffunc reset xensu=" sdim xensu_,,2 return #deffunc let str p1,str p2 notesel xensu repeat notemax+1 if cnt==notemax{ xensu+p1+"="+p2+"\n break } noteget xensu_,cnt split xensu_,"=",xensu_ if xensu_(0)==p1{ noteadd p1+"="+p2+"\n",cnt,1 break } loop return #defcfunc get str p1 text=p1 notesel xensu repeat notemax noteget xensu_,cnt split xensu_,"=",xensu_ strrep text,"{"+xensu_(0)+"}",xensu_(1) loop return text #global
こんな感じのモジュールを作って、その中の命令から代入、参照するというのを私はします。

たとえば、

reset print "名前を入力してください。 sdim name input name button "OK",*ok stop *ok let "name",name print get("私は{name}です")
の様に最初に
reset
で初期化して、
let "変数名","文字列"
で代入し、
get("これは{変数名}です。")
という感じで変数を置換する。
(getカンスウの中の文字列で変数を指定するときは{}でくくります。)



Taker32X

リンク

2016/11/23(Wed) 19:27:40|NO.77374

●補足
reset
let "変数","aiueo" print 変数
みたいにHSPで直接変数名を指定しても置換されません。 必ずgetカンスウから読み込んでください。



スペース

リンク

2016/11/23(Wed) 19:56:11|NO.77375

うぅ〜ん。HSPの仕様について根本的に間違っているような。
「私の名前は「name」です(メッセージ)」というのはただの文字列です。
仮にnameという変数に「太郎」という名前を代入したとして、「私の名前は「太郎」です(メッセージ)」とはなりません。
今回の場合、strrepで文字列を置換する事で実現できるのではないでしょうか。



Ve

リンク

2016/11/24(Thu) 07:20:03|NO.77378

初心者向けの教本なんですかね?
スクリプト内の『文+name変数』なら簡単ですが、
文字列型変数内の文字列からの置き換えなら、strrepで十分かなと。


name="太郎" ;name変数に表示する名前 mes "◆スクリプト内の文+name" mes "私の名前は「"+name+"」です" ;文中のname変数表示 msg="私の名前は「name」です" ;文字列型変数の場合 strrep msg,"name",name ;strrepは文字列を探して置き換えます mes "◆文字列変数のname置き換え" mes msg



さめ

リンク

2016/11/24(Thu) 14:54:29|NO.77380

皆様、返信ありがとうございます。
皆様から頂いた教授で無事、解決する事が出来ました。
どうもありがとうございました。

>>MillkeySoftwareさん
すいません、その通りです。タイトルが間違っていました。

>>Taker32Xさん
ありがとうございます。モジュール、便利ですね、参考にします。

>>スペースさん
ありがとうございます。

>>Veさん
何年か前のですが、おにたまさん等が監修している本です。確かにビギナー向けです。



ONION software Copyright 1997-2023(c) All rights reserved.