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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1003
たぬきADVのセーブ・ロード機能について5解決


たぬき

リンク

2006/10/3(Tue) 14:47:39|NO.2823

現在、アドベンチャーゲームを創ろうと奮闘中です。
ですが、セーブとロードのさせ方がどうしても分かりません…。
出来れば随時セーブにしたいのですが。

プログラムとしては、表示させたい文章をAという変数に代入し、
それを「notesel A」として順次処理させています。

A={"あいうえお"}
gosub *text_text
A={"かきくけこ"}
gosub *text_text
A={"さしすせそ"}
gosub *text_text

*text_text
notesel A
gyou=notemax
sdim naiyou,1000,gyou
       ・
       ・
       ・  (gyouというのはAの行数を入れています)

セーブとしては、「notesave A」でその時の内容を保存させればいいのでしょうが、
次にロードした時、読み込んだ内容から続きを表示させたい時は、どうすればいいのでしょうか?
(例えば↑では、「かきくけこ」を保存し、次にロードした時は「かきくけこ」から表示され、
次に「さしすせそ」と表示させる方法。もう「あいうえお」は表示されない。)
プログラムの中に、保存してあるAと同じ内容を探して来る・・・という命令があれば、
それでもいけるんではないかと思いましたが…そんな命令はありますでしょうか。

宜しくお願いします。



この記事に返信する


cbird

リンク

2006/10/3(Tue) 15:18:34|NO.2824

アドベンチャーゲームのセーブロードということですが、
内容を保存し、それを探すとなると手間がかかると思います。
(セーブ位置をみれるように現在行の内容を保存するとかはよくありますが)

なのでスクリプトや文章の表示している行数を保存し、再開するときはその行から
再開するようにすればよいとおもいますよ。


switch gyo case 0:A="あいうえお":swbreak case 1:A="かきくけこ":swbreak case 2:A="さしすせそ":swbreak case 3:A="たちつてと":swbreak default:swbreak swend

こんな感じでgyoの数値を保存して、話を進めるにはgyoの数値を変化させていきます。
参考になれば幸いです。



たぬき

リンク

2006/10/3(Tue) 15:58:50|NO.2825

cbird様、ご回答ありがとうございます。
なるほど、そんな考え方もあるんですね。

switch gyo
case 0:goto *gyo_0:swbreak
case 1:goto *gyo_1:swbreak
case 2:goto *gyo_2:swbreak
case 3:goto *gyo_3:swbreak
default:swbreak
swend

*gyo_0
A={"あいうえお"}
gyo=0
gosub *text_text
*gyo_1
A={"かきくけこ"}
gyo=1
gosub *text_text
*gyo_2
A={"さしすせそ"}
gyo=2
gosub *text_text

アドバイスを受けて、こんな感じにプログラムしてみました。
当たっていますでしょうか?一応きちんと動きました!(ありがとうございました)

ですが、このラベルを使った方法だと、ラベルの使用限界がありますよね。確か4096まででしたっけ…。
ラベルを使わずに出来る方法はないものか…。



cbird

リンク

2006/10/3(Tue) 16:25:52|NO.2826

いえ、ラベルを1個ごとに使う必要はないですよ、
下のサンプルでボタンを押せばgyo++するようにとか変えると、すこしづつ進むものとかも
できますよ。


gyo=0 *main gosub *gyounaiyou gosub *text_text gyo++ goto *main *gyounaiyou switch gyo case 0:A="あいうえお":swbreak case 1:A="かきくけこ":swbreak case 2:A="さしすせそ":swbreak case 3:A="たちつてと":swbreak default:swbreak swend return *text_text     ;処理 return



たぬき

リンク

2006/10/3(Tue) 17:06:27|NO.2828

なるほど…!!目から鱗の思いです。
骨格があり、肉付けを変化させる事の出来るプログラムが良いプログラミングなのですね。
cbird様、りさ様、丁寧なご回答ありがとうございました。
アドバイスを参考に、頑張ってみます!^^



りさ

リンク

2006/10/3(Tue) 17:10:17|NO.2829

こんにちわ☆
(cbirdさんと同時投稿だったので、一回直しましたm(_ _)m)

>ですが、このラベルを使った方法だと、ラベルの使用限界がありますよね。

HSP3.0のマニュアルには、

宣言できるラベルの最大数 無制限 宣言できる変数の最大数 無制限 識別されるラベル・変数の最大文字数 59文字(半角)

と書いてあります。その(限界の)心配はないと思います(^^

>ラベルを使わずに出来る方法はないものか…。

文字の表示が多い、ノベル型のアドベンチャーでは、
ラベルを多数作成したり、表示文字を一回一回設定したり、
というのは効率が悪いように思います。

色々方法はありますが、簡単なのは、
表示自体を「関数化」することだと思います。
 ヽ杏凜謄ストファイルから読み込んで、それを一つの変数に入れ、
◆〇慊蟾圓鬟汽屮襦璽船鵑何かで読み出す

保存するのは同じく「行数」でいいと思います。

動かないサンプルですが、

// sdim scenario, 64000 bload "text.txt", scenario repeat -1 gosub *next // page を保存 // その他色々 loop // ◆ note系命令の方がいいかも) *next page++ getstr string, scenario, n n += strsize mes string return

こんな風に、表示処理をまとめないと、
次の作品を作る時に、一から作り直さなければならなくなってしまいます(><

少しでも参考になればいいのですが・・・



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