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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0523
Y_repeat(旧y.tack)switchっぽいifの右側の整数値5解決


Y_repeat(旧y.tack)

リンク

2016/5/23(Mon) 20:04:13|NO.75559

疑似コードでアレなんですけど

#define A(%1,%2):\ if %1==%2:%1++:gosub *hoge_G:\ if %1==%2+1:%1++:gosub *hoge_H /*みたいな処理 if pc==1:pc++:gosub *hoge_A if pc==2:pc++:gosub *hoge_B if pc==3:pc++:gosub *hoge_C if pc==4:pc++:gosub *hoge_D if pc==5:pc++:gosub *hoge_E if pc==6:pc++:gosub *hoge_F */ pc_b=1 A pc_B,1 A pc_B,3 A pc_B,5 stop
こんなのがあった時
Aマクロの%2を直接指定しない書き方ってありますか?
毎回2ならいいんですが
1だったり3だったりで間違いがちなんで



この記事に返信する


Y_repeat(旧y.tack)

リンク

2016/5/23(Mon) 22:08:15|NO.75560

>毎回2ならいいんですが
>1だったり3だったりで間違いがちなんで
%2の増加する値でってことで

マクロから値を返したり
(変数に代入的に)

%2に変数絡めるのも上手くいかないんですよね



Y_repeat(旧y.tack)

リンク

2016/5/24(Tue) 17:02:15|NO.75568

別の例で言うと


switch pc case 1:gosub hoge_A:swbreak case 2:gosub hoge_B:swbreak case 3:gosub hoge_C:swbreak case 4:gosub hoge_D:swbreak case 5:gosub hoge_E:swbreak case 6:gosub hoge_F:swbreak swend
の1〜6の数値をコピペで機能させる方法はないか。と
上から順に評価するのではなくそれぞれに飛んでいくので
疑問なんですよね

案1
pcはnext_pcの値を知っている的な

dim many_next,1000 many_next.0=-1 repeat 999,1 many_next.cnt=cnt+1 loop pc=1 *sw_begin switch pc case 1:next_pc=many_next.pc:mes "A":swbreak case 2:next_pc=many_next.pc:mes "B":swbreak case 3:next_pc=many_next.pc:mes "C":swbreak case 4:next_pc=many_next.pc:mes "D":swbreak case 5:next_pc=many_next.pc:mes "E":swbreak case 6:next_pc=many_next.pc:stop:swbreak swend pc=next_pc await 1 goto *sw_begin
数値消えてないしw




Y_repeat(旧y.tack)

リンク

2016/5/24(Tue) 17:24:16|NO.75569

処理かさみましたが数値消えました
マクロでどれだけ処理消せるかな?的な
問題は__LINE__で識別してるので複数行を一行にまとめれないですね
それとサブルーチンにまとめるには識別する変数増やさないといけないし
方針も思いついてないですね

dim many_next,1000 many_next.0=-1 ;repeat 999,1 ;many_next.cnt=cnt+1 ;loop ;pc=1 ;pc_cnt=1 flag_pre=1 flag_main=0 next_cnt=1 *sw_begin pre_pc=int(__LINE__) if flag_pre==1{ many_next.next_cnt=pre_pc } if flag_main==1{ if pre_pc==many_next.next_cnt{ mes "A" } } next_cnt++ pre_pc==int(__LINE__) if flag_pre==1{ many_next.next_cnt=pre_pc } if flag_main==1{ if pre_pc==many_next.next_cnt{ mes "B" } } next_cnt++ pre_pc==int(__LINE__) if flag_pre==1{ many_next.next_cnt=pre_pc } if flag_main==1{ if pre_pc==many_next.next_cnt{ stop } } next_cnt++ pre_pc==int(__LINE__) if flag_pre==1{ many_next.next_cnt=pre_pc } if flag_main==1{ if pre_pc==many_next.next_cnt{ mes "C" } } await 1 if flag_pre==1{ next_cnt=1 } flag_pre=0 flag_main=1 goto *sw_begin



Y_repeat(旧y.tack)

リンク

2016/5/25(Wed) 00:03:12|NO.75582

解決しました
サブルーチン側を常に1から始めるかんじだと
サブルーチンは一回書いちゃえば終わりですし
毎回1から始めるのでややこしくなさそうです

pc=0 subr_pc=1 three_def pc mes stat pc=stat subr_pc=1 one_def pc mes stat pc=stat subr_pc=1 two_def pc mes stat pc=stat stop #deffunc three_def int p_pc if subr_pc==1:mes "*"+(subr_pc+p_pc)+" 1 of three subr":subr_pc++ if subr_pc==2:mes "*"+(subr_pc+p_pc)+" 2 of three subr":subr_pc++ if subr_pc==3:mes "*"+(subr_pc+p_pc)+" 3 of three subr" return subr_pc+p_pc #deffunc two_def int p_pc if subr_pc==1:mes "*"+(subr_pc+p_pc)+" 1 of two subr":subr_pc++ if subr_pc==2:mes "*"+(subr_pc+p_pc)+" 2 of two subr" return subr_pc+p_pc #deffunc one_def int p_pc if subr_pc==1:mes "*"+(subr_pc+p_pc)+" 1 of one subr" return subr_pc+p_pc

みたいなことをやってるので
こちらへも遊びに来てくださいな
http://zuzazann.boy.jp/wiki/index.php?HSPソース投稿Wiki



Y_repeat(旧y.tack)

リンク

2016/5/25(Wed) 00:31:00|NO.75584

解決したと見せかけて 未動作checkな部分が
基本順に動くので
途中にjumpしたり途中からjumpしたりが
ちゃんと確かめてないです

・サブルーチン内(途中)からのjump
・サブルーチン内(途中)へのjump

・トップレベル(途中)からのjump
・トップレベル(途中)へのjump



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