私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇686:
Re[3]:補足 [戒] 07/30 00:36

 └◇687:Re[4]:補足 [哲] 07/30 02:20
  └◇688:Re[5]:補足 [戒] 07/30 19:42
   └◇689:Re[6]:補足 [moon] 07/30 21:12
    └◇690:Re[7]:補足 [戒] 07/31 00:42
     └◇691:Re[8]:補足 [哲] 07/31 02:02
      └◇692:Re[9]:補足 [moon] 07/31 09:00
       └◇693:Re[10]:補足 [哲] 07/31 10:01


686● Re[3]:補足[ 戒 ] 2003 07/30 00:36
えっと、ないと思います。
・・・以前は毒になっていたのですが。
(元からなかった・・?
 誤って消した・・?)

確かに、状態を毒にする処理が
なければ毒にもなりませんよね(汗
っでもなんで、毒になってたんでしょうか・・・?(滝汗
スレッド一覧


687● Re[4]:補足[ 哲 ] 2003 07/30 02:20
元はあった処理を、改造などの時に誤って消してしまったのでしょう。
毒にする処理が無ければ、毒になるはずが無いので…。
スレッド一覧


688● Re[5]:補足[ 戒 ] 2003 07/30 19:42
#トラップデータ読み込みルーチン
# Sub Creat Traps #
sub creattraps {
unless (@traplines) { &error('トラップーデータ読みこみエラー') }
local($wnnam) = $#traplines+1;
foreach (0 .. $#traplines){
($wame[$_],$type[$_],$others)= split(/<>/,$traplines[$_]);
}
return($wnnam)
}

#トラップメインルーチン
# Sub Trap #
sub trap{
if ($av eq 'alive') {
local($wnnam) = &creattraps;
undef $wand;
local($wand) = int(rand($wnnam));
if($sp =~ /Wn/){
if ($wana <= $del_wana) { push (@msg,'トラップ解除成功!!'); }
else{ push (@msg,"トラップ解除失敗!!$wame[$wand]"); $tav = "$type[$wand]"; }
}
else{ push (@msg,"$wame[$wand]"); $tav = "$type[$wand]"; }
if ($tav eq 'cure') {$hp = $hp + 2; $hp = $xp if $hp >= $xp; push (@msg,"<font color=lightskyblue>2ポイント回復した</font>" ); }
if ($tav eq 'ya') { push (@msg,"<font color=red>$wandポイントのダメージを受けた</font>"); $hp=$hp-$wand; $av = 'daed' if $hp <= 0; }
if ($tav eq 'isi') { push (@msg,"<font color=red>2ポイントのダメージを受けた</font>"); $hp=$hp-2; $av = 'daed' if $hp <= 0; }
}
if ($tav eq 'poison') { $av = 'poison'; }
}
1;
といった感じに変更してみました。
これで大丈夫だと思います・・・っが、
数値の不安定さは探索のせいでした(汗
罠にかかった後は、探索を中断したいのですが・・・
どうしたら良いでしょうか?
スレッド一覧


689● Re[6]:補足[ moon ] 2003 07/30 21:12
> if ($tav eq 'poison') { $av = 'poison'; }

aliveとpoisonとdead状態しかない、かつ、探索で毒状態が回復しない、なら無駄処理という以外には問題が無いと思いますが、このスクリプトの場所は$tav eq 'isi'の下あたりが適当だと思われます。

> 罠にかかった後は、探索を中断したいのですが・・・
> どうしたら良いでしょうか?

複数探索の実現方法が定かでないので推測ですが、
  }
}
1;
を、
    last;
  }
}
1;
に変更してみては?

# 書いておいてアレですが、個人的には絶対やりたくない方法です。
# サブルーチン外のループを脱出する目的のlast;は-wで表示される警告の対象なので。
スレッド一覧


690● Re[7]:補足[ 戒 ] 2003 07/31 00:42
> aliveとpoisonとdead状態しかない、
>かつ、探索で毒状態が回復しない、
>なら無駄処理という以外には問題が無いと思いますが、
>このスクリプトの場所は$tav eq 'isi'の下あたりが
>適当だと思われます。
場所は変えておきました。
あと、上の3行がよく分からないのですが・・・(;;


> 複数探索の実現方法が定かでないので推測ですが、
複数探索ではないです・・。

> # 書いておいてアレですが、個人的には絶対やりたくない方法です。
> # サブルーチン外のループを脱出する
>目的のlast;は-wで表示される警告の対象なので。
ぇ・・・?(汗
ループを脱出する
>目的のlast;は-wで表示される警告の対象
っというのが分からないです・・・(;;
スレッド一覧


691● Re[8]:補足[ 哲 ] 2003 07/31 02:02
> > # サブルーチン外のループを脱出する
> >目的のlast;は-wで表示される警告の対象なので。
> ぇ・・・?(汗
> ループを脱出する

多分、lastを使っている所をみると、複数回探索機能がついていると解釈されている様なので、罠にかかりループを終了という処理を書かれている訳です…。
find_itemの罠にかかって、trapにくる所、
if (5 <= $wanarand){&trap}
(処理方法がわからないので適当です。)

if (5 <= $wanarand){&trap; goto JUMP}
として、
アイテムを拾う処理の下辺りに
JUMP;と入れれば、
「罠にかかった。アイテムを手に入れた。」
という処理にはならないですが…。


> >目的のlast;は-wで表示される警告の対象
> っというのが分からないです・・・(;;

ファイル検査の表現?分からない…。


あと、関係無いですが、

if ($tav eq 'cure') {$hp += 2; $hp = $xp if $hp >= $xp; push (@msg,"<font color=lightskyblue>2ポイント回復した</font>" ); }
elsif ($tav eq 'ya') { push (@msg,"<font color=red>$wandポイントのダメージを受けた</font>"); $hp -= $wand; $av = 'daed' if $hp <= 0; }
elsif ($tav eq 'isi') { push (@msg,"<font color=red>2ポイントのダメージを受けた</font>"); $hp -= 2; $av = 'daed' if $hp <= 0; }
else { $av = 'poison'; }

こうすると、少しだけ綺麗かなとも思いました…。
スレッド一覧


692● Re[9]:補足[ moon ] 2003 07/31 09:00
> > > # サブルーチン外のループを脱出する
> > >目的のlast;は-wで表示される警告の対象なので。
> > ぇ・・・?(汗
> > ループを脱出する
>
> 多分、lastを使っている所をみると、複数回探索機能がついていると解釈されている様なので、罠にかかりループを終了という処理を書かれている訳です…。

そうです。
完全に複数探索を取り入れていると思い込んでいました。

> find_itemの罠にかかって、trapにくる所、
> if (5 <= $wanarand){&trap}
> (処理方法がわからないので適当です。)
> を
> if (5 <= $wanarand){&trap; goto JUMP}
> として、
> アイテムを拾う処理の下辺りに
> JUMP;と入れれば、
> 「罠にかかった。アイテムを手に入れた。」
> という処理にはならないですが…。

もう少し手を入れて、sub trapのif($av eq 'alive'){}ブロック内に$trapflag = 1;を追加し、goto JUMP;ではなくgoto JUMP if($trapflag);にしたほうが良いかもしれません。

> > >目的のlast;は-wで表示される警告の対象
> > っというのが分からないです・・・(;;
>
> ファイル検査の表現?分からない…。

perl -wというように使用する警告表示用のオプションのことです。
Perlの実行環境がインストールされているのならコマンドプロンプトから、perl -e "sub xxx{last;} foreach(0 .. 1){ &xxx; }"とperl -we "sub xxx{last;} foreach(0 .. 1){ &xxx; }"を実行してみればどういうことか分かると思います。(前者は警告表示なしの指定)

# 文法チェックをする場合は普通-wを付けると思うのですが、簡略化して書いたので思い当たらなかったのでしょうか。 > 哲さん
スレッド一覧


693● Re[10]:補足[ 哲 ] 2003 07/31 10:01
> # 文法チェックをする場合は普通-wを付けると思うのですが、簡略化して書いたので思い当たらなかったのでしょうか。 > 哲さん

コマンドプロントの方でしたか…。
あの時はてっきり忘れてましたよ…ははは…。
スレッド一覧

CGIROOM