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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0211
ぼぶ#deffuncのあとのreturnができなくなってしまいました。3解決


ぼぶ

リンク

2020/2/11(Tue) 00:13:36|NO.89471

この関数で、サブルーチン外のreturnは無効です、というエラーがでるのですが、原因がよくわかりません。

一番下からみて、1,2,3つめのreturnでエラーがでます。
チェスのプロモートをbutton goto命令でしてるのですがそれが原因でしょうか。



#deffunc 左クリック受け付け var inhand,int click, array koma_haichi, var sashita, var te, var option マスの大きさ = 100 縦 = 8 横 = 8 if click == 256 { if 0<mousex && mousex<マスの大きさ*横 && 0<mousey && mousey<マスの大きさ*縦{ box = 1+rnd(3) mmplay box if inhand == 12 {//持っていない //かつ何も置いてない if koma_haichi(mousex/マスの大きさ,(mousey)/マスの大きさ)=12{ return }else{ //かつ 自分の駒をくりっくした  if 0 <= koma_haichi(mousex/マスの大きさ,(mousey)/マスの大きさ) && koma_haichi(mousex/マスの大きさ,(mousey)/マスの大きさ) <12{ inhand = koma_haichi(mousex/マスの大きさ,(mousey)/マスの大きさ) koma_haichi(mousex/マスの大きさ,(mousey)/マスの大きさ)=12 motoposx = mousex/マスの大きさ motoposy = (mousey)/マスの大きさ return } } } if 0<mousex && mousex<マスの大きさ*横 && 0<mousey && mousey<マスの大きさ*縦{ //なにかもってて かつ おいた位置になにもない if inhand != 12 && koma_haichi(mousex/マスの大きさ,(mousey)/マスの大きさ)==12 { //元の位置と同じなら取り消す if motoposx - mousex/マスの大きさ == 0 && motoposy - (mousey)/マスの大きさ == 0{ koma_haichi(mousex/マスの大きさ,(mousey)/マスの大きさ) = inhand inhand = 12 return } sakiposx = mousex/マスの大きさ sakiposy = (mousey)/マスの大きさ //プロモートの処理 if sakiposy == 0 && inhand == 5{ pos 100,0 button goto "queen", *queen pos 200,0 button goto "knight", *knight pos 300,0 button goto "bishop", *bishop pos 400,0 button goto "rook", *rook redraw 1 stop *queen inhand = 4 goto *promotebottom *knight inhand = 1 goto *promotebottom *bishop inhand = 2 goto *promotebottom *rook inhand = 0 goto *promotebottom *promotebottom clrobj 1 clrobj 2 clrobj 3 clrobj 4 } if sakiposy == 7 && inhand == 11{ pos 100,0 button goto "queen", *queen2 pos 200,0 button goto "knight", *knight2 pos 300,0 button goto "bishop", *bishop2 pos 400,0 button goto "rook", *rook2 redraw 1 stop *queen2 inhand = 10 goto *promotebottom2 *knight2 inhand = 7 goto *promotebottom2 *bishop2 inhand = 8 goto *promotebottom2 *rook2 inhand = 6 goto *promotebottom2 *promotebottom2 clrobj 1 clrobj 2 clrobj 3 clrobj 4 } //プロモートの処理ここまで if option == 1{ a= str(motoposx) b= str(motoposy) c= str(sakiposx) d= str(sakiposy) e= str(inhand) te= te+a+b+c+d+e } koma_haichi(sakiposx,sakiposy) = inhand inhand = 12 sashita = 1 return } if inhand != 12 && (koma_haichi(mousex/マスの大きさ,(mousey)/マスの大きさ)!=12) { //なにかもってて かつ 置いた位置に何かある sakiposx = mousex/マスの大きさ sakiposy = (mousey)/マスの大きさ a= str(motoposx) b= str(motoposy) c= str(sakiposx) d= str(sakiposy) e= str(inhand) te= te+a+b+c+d+e koma_haichi(sakiposx,sakiposy) = inhand inhand = 12 sashita = 1 return } } } } return



この記事に返信する


あらや

リンク

2020/2/11(Tue) 02:11:20|NO.89472

こちらの過去ログの下の方をご覧ください。
(あまらは改名する前の私の名前です)
http://hsp.tv/play/pforum.php?mode=pastwch&num=82209

サブルーチンの途中でstopが入るとreturn出来なくなります。



沢渡

リンク

2020/2/11(Tue) 12:30:25|NO.89473

マニュアルには
>割り込みによるジャンプ(on??? gosubを使わない割り込み)が発生した場合には、
>サブルーチンやrepeat〜loopのネストはすべて0(初期状態)に 戻されます。
とありますので、厳密にはstopではなくbutton gotoのせいのようですね。
もっとも、stop状態から脱出する方法といったら
goto系の割り込みぐらいしか考えられないので、実質同じではありますが。

(個人的には『なんでこんな仕様にしたの?』ってくらい
 わけのわからない仕様だと思います。>goto系割り込みでネストリセット)



ぼぶ

リンク

2020/2/11(Tue) 13:37:03|NO.89474

解決しました!ありがとうございました!



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.89471への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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