[もどる]
一括表示
0247 セーブ機能とif文中へのジャンプについて
投稿者:あきら 2005/07/09(土) 22:12

こんにちは。yu-risをちまちまといじらせて頂いています。
大体yu-risの機能的な狙いは理解しつつあるかなという感じでして、
そのうちに本格的に使うことができればと思っております。

さてセーブ機能についてなのですが、今のところステータスを
セーブするだけで文章の読み込み位置を記録することはできない
わけなのですよね。
当然文章の途中でセーブしたいという場合、文章のどの部分を読んで
いるのかという情報を変数で持っておいてそのステータスをセーブし、
ロードする時にはそのステータスを参照して該当するメッセージ部分に
ジャンプするようにif分岐するしか無いことは分かるのです。
ただこの場合、ゲームの中での選択肢分岐をラベルで分岐させるのではなく
if文をそのまま利用する形で分岐する場合(と言いますか私は面倒くさい
のでいちいちラベル名を考えるよりもダイレクトにif節で分岐したい派
なのですけれども)、ファイルの先頭で該当メッセージにジャンプする
場合、if節の外部から、if節の中にgoで移動してしまうというとてつもない
荒技を使わなくてはなりません。
このようなプログラムをyu-risのシステム側で保証することは
できますでしょうか。さらにifbreakやifcontinueなどを、まあ普通の
ノベル形式のゲームで使うことはあり得ませんけれども、そういった
部分の動作も確実にできますでしょうか。
まあif節の中からif節の外にgoすることができるのであれば大丈夫
だろうとは思いますが……。あまりプログラム的に綺麗ではありませんので。
と言いつつ私もそんな大したプログラムを組めるわけではないですが。
もしも動作的に少し危ないのであればラベルを使って分岐することには
致します……。ただif節中でさらに選択肢でif分岐する時にラベルを
使うと非常に面倒くさいのでできれば使いたくないのは本音です(汗)。

0249 どうもです(^^
投稿者:たくみ 2005/07/13(水) 01:36

あきらさんどうもです(^^
遅レスすみません;;

> さてセーブ機能についてなのですが、今のところステータスを
> セーブするだけで文章の読み込み位置を記録することはできない
> わけなのですよね。

現状だとまだそうですね。本当に申し訳ないです;

> if文をそのまま利用する形で分岐する場合(と言いますか私は面倒くさい
> のでいちいちラベル名を考えるよりもダイレクトにif節で分岐したい派
> なのですけれども)、ファイルの先頭で該当メッセージにジャンプする
> 場合、if節の外部から、if節の中にgoで移動してしまうというとてつもない
> 荒技を使わなくてはなりません。
> このようなプログラムをyu-risのシステム側で保証することは
> できますでしょうか。さらにifbreakやifcontinueなどを、まあ普通の
> ノベル形式のゲームで使うことはあり得ませんけれども、そういった
> 部分の動作も確実にできますでしょうか。

はい。保証されますです。例えば、
--------------------------------
GO[#=LABEL1]
END[]
IF[1==1]
  #LABEL1
  我が輩はねこっぽい。
IFEND[]
--------------------------------
などと書いても大丈夫です(^^
そのあたりはCの基準に沿わせました。

> ただif節中でさらに選択肢でif分岐する時にラベルを
> 使うと非常に面倒くさいのでできれば使いたくないのは本音です(汗)。

なるほど。
ただその場合の書き方の制限として、IFのネスト(IFの中にIF)が16個まで
というのがありますので、もしたくさんIFネストするようであれば、
それに引っかからないように(IFネストしないで記述するように)しなくては
ならないですね。
例えば、どの選択肢を選んだかを各選択肢毎に用意した変数に保存しておいて、
各値を参照して分岐するような形でIFを使えばネストしなくても書けると思います。
参考までに記述してみますと…。

---------------------------------------------------------------------------

我が輩はねこっぽい。
さて、なにをしよう。

GOSUB[#=選択肢A] // 選択肢処理A「1:出かける」「2:食べる」

//============================================ 選択肢Aの分岐処理
IF[@SEL_A==1] // 選択肢Aで選択肢1を選んだら
  どこへ?
  GOSUB[#=選択肢B] // 選択肢処理B「1:駅前」「2:公園」
ELSE[@SEL_A==2] // 選択肢Aで選択肢2を選んだら
  なにを?
  GOSUB[#=選択肢C] // 選択肢処理C「1:寿司」「2:ラーメン」
IFEND[]

//============================================ 選択肢Bの分岐処理
//選択肢Bを実行していない場合(選択肢Aで選択肢2を選んだ場合)は、
//@SEL_Bの値は0なので、ここの分岐処理は通らないことになり、※1へ
IF[@SEL_B==1] // 選択肢Bで選択肢1を選んだら
  駅前へでかけた。つづく…
ELSE[@SEL_B==2] // 選択肢Bで選択肢2を選んだら
  公園へ向かった。つづく…
IFEND[]
//※1

//============================================ 選択肢Cの分岐処理
//選択肢Cを実行していない場合(選択肢Aで選択肢1を選んだ場合)は、
//@SEL_Cの値は0なので、ここの分岐処理は通らないことになり、※2へ
IF[@SEL_C==1] // 選択肢Bで選択肢1を選んだら
  寿司を注文した。つづく…
ELSE[@SEL_C==2]
  ラーメンを注文した。このあと大変な事態に…
IFEND[]
//※2

---------------------------------------------------------------------------

ひとまずこんな感じですが、これですとシナリオの流れが分かりづらく
なってしまうかもしれません…(^^;
まぁでも、分岐してもすぐに合流するようなシナリオならば
(IFネストが16個もいかないような分岐ならば)普通にネストして記述しても
問題ないと思います(^^

根本的にただ、実際のところ現状ではジャンプ命令で飛べる先がラベルでないと
いけないので、任意のテキストの場所に飛ぶ、ということが出来ません…。
なので、なんとか現状で実現させるとするなら、
シナリオをたとえば段落毎に区切って、段落毎にラベルを作っておきまして、
現在どこの段落を実行しているかを表すフラグ変数を保持しておきます。
で、セーブでそれを保存しておいて、
ロードする時は、その変数の値を調べて各ラベルへ飛ばせる処理をさせる、
というのが現実的でしょうか。
ただ段落毎ですので、段落の最後のほうでセーブしてもロード時には
また段落の最初からになってしまいますけど…;

こんなところでしょうか。参考になれば幸いです。
あと現在更新が停滞してしまっていてすみません。
次の Ver0.165 は7/17更新になります。
もうしばらくお待ち下さいませ。

0250 セーブについて
投稿者:あきら 2005/07/13(水) 22:14

ご丁寧にありがとうございました。

セーブポイントについてですが、一応こちらで
エディタのマクロを作りまして、各メッセージ行ごとに
ロード時処理用のジャンプラベルを作成するように
しております。

各行ごとにライン数を記録する変数を設定して、ロードする時は
ファイルの先頭にIF文の羅列が続きまして(汗)、
変数に応じたラベルに飛んでいくというものです。
ジャンプ先のラベルが最終的に数千個とか数万個とかになって
しまいそうですけれども……。その中から該当するラベルを
探し出してジャンプする。結構大変そうです(笑)。
これ……大丈夫ですよ、ね?

秀丸用のマクロなんですけれども、メールででもお渡しして
おきましょうか? あった方が助かるという方もおられるかも
しれませんし。
一応マクロ自体のテストは済ませてうまくはいっているものの
yu-ris側での実作業はさせておらず動作確認はしておりませんが。><

0252 凄いです
投稿者:たくみ 2005/07/18(月) 10:19

あきらさんどうもです(^^

> セーブポイントについてですが、一応こちらで
> エディタのマクロを作りまして、各メッセージ行ごとに
> ロード時処理用のジャンプラベルを作成するように
> しております。

す、凄いですね(^^;
ていうか、無理矢理こうでもしないとセーブロードが実現できない仕様で本当にすみません…;
今回セーブロード機能を不完全ながらも実装しましたので、
これでいくらか楽になっていくかと思います。

> 各行ごとにライン数を記録する変数を設定して、ロードする時は
> ファイルの先頭にIF文の羅列が続きまして(汗)、
> 変数に応じたラベルに飛んでいくというものです。
> ジャンプ先のラベルが最終的に数千個とか数万個とかになって
> しまいそうですけれども……。その中から該当するラベルを
> 探し出してジャンプする。結構大変そうです(笑)。
> これ……大丈夫ですよ、ね?

なるほど、仕様上は問題ないはずです。
ただまだベータ版なのでメモリ管理とか弱い分、
メモリ使用量が多くなったりとかちょっと不都合ありそうかも…。

> 秀丸用のマクロなんですけれども、メールででもお渡しして
> おきましょうか?

どんな感じか見てみたいです。
宜しければ(^^