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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0714
けぃセーブ機能7解決


けぃ

リンク

2012/7/14(Sat) 10:07:47|NO.47669

現在TRPGのソロプレイ支援ツールとして、
まずはHPとMPを記録する簡単なプログラムから組んでるのですが、
乱数をセーブする方法がいまいちよくわかりません。
bsave,bloadを使う事はなんとなくわかるのですが……
ちなみに、以下のようにプログラムを組みました。

;HPMP管理 ;F5で実行 *saisyo cls mes "現在のステータス" mes "HP"+maxhp+"/"+hp+"  MP"+maxmp+"/"+mp pos 3.0 objsize 120,23 button "最大HPMP入力",*maxinput button "SAVE",*save button "LOAD",*load stop *maxinput mes "最大HPを入力してください" input maxhp mes "最大MPを入力してください" input maxmp button "完了",*saisyo stop *save bsave "save" ,maxhp bsave "save" ,maxmp bsave "save" ,hp bsave "save" ,mp goto *saisyo *load bload "save" ,maxhp bload "save" ,maxmp bload "save" ,hp bload "save" ,mp goto *saisyo



この記事に返信する


KA

リンク

2012/7/14(Sat) 11:58:11|NO.47672

>>bsave "save" ,maxhp
>>bsave "save" ,maxmp
>>bsave "save" ,hp
>>bsave "save" ,mp

使い方を完全に間違っています。
サンプルを調べて下さい。



MillkeyWeler

リンク

2012/7/14(Sat) 16:03:09|NO.47676

>>乱数をセーブする方法がいまいちよくわかりません。
乱数ではなく、変数ですよね・・・・?

[説明]
まず、わかりやすく説明すると、複数の情報(maxhp maxmp hp mp)を保存するときは、
ひとつの情報にまとめないといけない。

質問者さんの場合は、maxhp maxmp hp mp の各情報をひとつに、まとめて保存・読込してないから
KA さんの答えになってしまっているの。

でも、ひとつにまとめる場合、どーするの?
になると思うけど、その場合の情報をまとめるのに必要なのが配列変数というものがあるの。

配列変数とは、maxhp maxmp hp mp をひとつにまとめる事ができる変数なの。

;例

maxhp=777 maxmp=666 hp=555 mp=444

をひとつにまとめるには、DIM 命令で配列変数を作らないとだめだから


;↓DIM は命令で、Status は変数の名前で、4 は、Statusに何個いれるか?ってこと DIM Status,4 Status(0)=maxhp ;Status 0個目に、maxhp 変数を入れる。 Status(1)=maxmp ;Status 1個目に、maxhp 変数を入れる。 Status(2)=hp ;Status 2個目に、maxhp 変数を入れる。 Status(3)=maxmp ;Status 3個目に、maxhp 変数を入れる。 ;↑がなぜ 0 個目から?は、数字は 0 から始まっているから。

ひとつにまとまったら、その Status ってのを BSAVE / BLOAD をすればいい。
下記、質問者さんのスクリプトをちょっと変更した一部スクリプト。


*save dim Status,4 Status(0)=maxhp Status(1)=maxmp Status(2)=hp Status(3)=mp bsave "save",Status goto *saisyo *load dim Status,4 bload "save",Status maxhp=Status(0) maxmp=Status(1) hp=Status(2) mp=Status(3) goto *saisyo

長い文章になっちゃったけど、ヘルプとか見てもわからないことがあれば、また質問するといいよ。



けぃ

リンク

2012/7/14(Sat) 17:27:13|NO.47677

なるほど………そういう使い方があったのですか………
あと、dimの命令でstatusの変数を記憶して、
以後はそのstatusの変数を増やす形でデータを次足せばいいのでしょうか?


dim Status,4 Status(0)=maxhp Status(1)=maxmp Status(2)=hp Status(3)=mp Status(4)=str ;筋力
といった具合に



spider

リンク

2012/7/14(Sat) 19:41:09|NO.47682

上のあなたが投稿したスクリプトは
バグりまくります。

理由は二点。
dimで配列変数を確保すると、第二パラメータで指定した個数しか
 使えず、自動的に拡張はされない。
strは関数名、型などとして登録されているので、
 strongとでもしておくとよいでしょう。

,牢違いする人がいますが、
dimの第二パラメータは確保する個数です。
つまり上のスクリプトの場合、Status(0)〜Status(3)まで確保
されます。Status(4)以上を使用するとエラーになります。

またdimを使わなくても配列は使えますが、
基本的にdimを使うのがよいでしょう。
Status = maxhp, maxmp, hp, mp, strong

こんな感じ。 あと、上では()で配列番号を指定してますが、 Status.0 のようにしてもよいのです。 そのほか配列を使用する方法として考えられることは たくさんありますが、ここら辺が抑えられれば、OKです。 長文失礼しました。



MillkeyWeler

リンク

2012/7/14(Sat) 20:03:03|NO.47683

spiderさんと回答が被るけど。

dim Status,4 は、予め多めに確保しよう。(4 を 確保しておきたい個数にするといい)
質問者さんのスクリプトを予測すると、DEX STR INT DEF などなど使う可能性もあるので。


dim Status,512 ; 多めに 512個 確保した。これで、Status(0)〜Status(511) まで使える。 Status(0)=maxhp Status(1)=maxmp Status(2)=hp Status(3)=mp Status(4)=str

あと、「あっ、確保した数が足りなーい」などで DIM してるのに、再度 DIM すると、
Status にまとめたデータがすべて 0 になっちゃうので。(DIM の再確保仕様)



けぃ

リンク

2012/7/14(Sat) 20:32:18|NO.47685

ありがとうございます!
ひとまずこれでやってみます!



暇人

リンク

2012/7/14(Sat) 22:03:35|NO.47689

最初から配列にHPとかのデータを入れてしまう方法もある
要素数はマクロ使って名前を付ける

#enum MAXHP = 0 //#enumはヘルプ参照 #enum MAXMP //MAXMPが1に置き換わる #enum HP #enum MP #enum MSTR #enum STATUS_END dim Data,STATUS_END *saisyo cls mes "現在のステータス" mes "HP"+Data(MAXHP)+"/"+Data(HP)+"  MP"+Data(MAXMP)+"/"+Data(MP) pos 3.0 objsize 120,23 button "最大HPMP入力",*maxinput button "SAVE",*save button "LOAD",*load stop *maxinput mes "最大HPを入力してください" input Data(MAXHP) mes "最大MPを入力してください" input Data(MAXMP) button "完了",*saisyo stop *save bsave "save" ,Data,-1 goto *saisyo *load bload "save" ,Data,-1 goto *saisyo



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