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

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



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