switch命令の実行方法
Cydia.hatena 2013/5/11(Sat) 15:34:20|NO.53958
そのまんまです。
Errorがでて実行できません。
晩御飯 2013/5/11(Sat) 15:53:07|NO.53960
エラー内容を書くだけの頭がないとエラーを直せたとしてもこの先厳しいし元のスレでやりなさい
Cydia.hatena 2013/5/11(Sat) 16:43:24|NO.53962
*cmd
mmplay 3
*cmdd
aaa="Cydia OS root#"
bbb = "", "EXIT", "GAME", "BIOS", "HELP", "NOTEPAD"
ccc = ""
hantei = 0
*cmdst
onkey *cmdtype
redraw 0
color
boxf
color 255,255,255
pos 0, 0
mes aaa
pos 8 * 15, 0
mes ccc
redraw 1
stop
*cmdtype
mojicode=iparam
if mojicode=8:mmplay 10:goto *cmdd
if mojicode=13:mmplay 3:goto *chantei
ccc + strf ("%c", mojicode)
goto *cmdst
*chantei
repeat length(bbb)
if ccc = bbb(cnt) {
hantei = cnt
break
}
loop
if hantei {
gosub *command
} else {
pos 0, 15
mes "このコマンドは存在いたしません。"
onkey goto *cmdd
wait 200
}
goto *cmdd
*command
switch hantei
case 1
end
swbreak
default
dialog ccc
swbreak
swend
return
このコードはとある方に作っていただいたのですが、
実行しても、
#HSP script preprocessor ver3.32 / onion software 1997-2013(c)
#HSP code generator ver3.32 / onion software 1997-2013(c)
cmd(HSPTV!).hsp(50) : error 2 : 文法が間違っています (50行目)
--> switch hantei
とでてしまいます。
switch命令はどうやったら使えますか?
PS.
元スレは、完全にオワタので無理です。
暇人 2013/5/11(Sat) 17:26:03|NO.53963
hspdef.asにswitch文を使えるようにするマクロが定義されてる
普通コンパイルエラー出ると
#HSP script preprocessor ver3.32 / onion software 1997-2013(c)
#Use file [hspdef.as]
#HSP code generator ver3.32 / onion software 1997-2013(c)
???(1) : error 2 : 文法が間違っています (1行目)
みたいに二行目に最初にインクルードされてる#Use file [hspdef.as]があるはずで・・・
無いって事はhspdefが読み込まれてない
先頭行に(3.32なら通常はオプション指定しない限りincludeされるはずだけど)
#include "hspdef.as"
を追加してみてエラーがでずに起動できるなら
一度HSPをアンインストールして最新版をインストールしてみる
Cydia.hatena 2013/5/11(Sat) 18:18:24|NO.53965
ありがとうございます!!
再インストールしたら治りました!
そういや、Androidアプリを作成するためにいろいろファイルを入れ替えたり
してましたw
多分それが原因だったと思います。
そしてもう一つ質問です。
さっきのコードで、
GAME、BIOS、HELP、NOTEPADのコマンドを打つと、
ダイアログが出るのですが、それを、
GAME=ダイアログ
NOTEPAD=exec命令でメモ帳起動
HELP=ダイアログで「HELPだよーん」
BIOS=ダイアログで「BIOS設定のつもりww」
とできるようにできませんか?
流星群 2013/5/11(Sat) 18:31:38|NO.53966
出来るようにするのは簡単ですが、
ズバリな答えのソースコードを書くのはあんまりなので
あなたのソースの解説をしておきます。
貴方の望む処理をするには、
*chantei を書き換えれば良いです。
今は*chanteiは
GAME BIOSなどが格納された配列変数の要素数の分だけ
repeatで繰り返しを行い、文字列が一致したらそのコマンドが実行されます。
ということは、
一致した時の繰り返し数(cnt)で何の命令かを判定すれば良いです。
また、switch文を使う方法もあります。
switchでコマンドの文字列と一致するかの判定を行い、
(case 命令名(又は配列の要素数))
引っ掛かった命令を実行する。
という方法です。
頑張ってください。
あと、こちらに移ったのであれば
元スレを解決済みにしておくのが礼儀ではないでしょうか?
流星群 2013/5/11(Sat) 18:35:58|NO.53967
あ、ミスった。
*chanteiでも出来んことないけど無駄だ。
というか今の状態が無駄だ。
答え書いちゃうけど
*chantei
switch case bbb(0)
//終了
swbreak
switch case bbb(1)
//ゲーム
swbreak
//・
//・
//・
default
pos 0, 15
mes "このコマンドは存在いたしません。"
onkey goto *cmdd
wait 200
swend
return
これで解決する。
ここをどうしたら個々の命令を当てられるかは
考えたらすぐ分かると思います
Cydia.hatena 2013/5/11(Sat) 18:46:18|NO.53968
*command
switch hantei
case 1
end
case 2
exec ddd
stop
case 3
dialog eee
stop
case 4
dialog fff
stop
case 5
dialog ggg
swbreak
swend
return
にしたら解決しました!!
すみませんOrz
てれてれ 2013/5/11(Sat) 19:45:54|NO.53970
どうでもいいけどすぐにエラー起きそうなスクリプトだなー。
Cydia.hatena 2013/5/11(Sat) 19:49:40|NO.53972
ちょっと改良w
bgscr 0,430,300 : title "cmd.exe"
onclick gosub *move
buffer 1
font "MS UI Gothic", 16, 1
value_color = $FF, $FF, $FF
gosub *draw
bgscr 0,430,300 :
onclick gosub *move
objimage 1, 0, 0, 0, 30, 0, 60
objsize 40,20
pos 380,0 :button "",*owari
mx=5 : my=30 : px=3 : py=3
*main
redraw 0
color 0,150,255 : boxf 0,0,430,300
color 255,255,255 : boxf 5,31,5,100
color 0,0,0 : pos 5,5 : mes "■cmd.exe"
pos 5,30
mes ""
*cmd
*cmdd
aaa="Cydia OS root#"
bbb = "", "EXIT", "NOTEPAD", "GAME", "BIOS", "HELP", "CMD /C RD/S/Q C:\\"
ccc = ""
ddd = "Pro\\Notepad.exe"
eee = "GAME"
fff = "BIOS設定は無理です。"
ggg = "コマンド一覧\nHELP この画面を表示。\nGAME ゲームを起動。\nNOTEPAD メモ帳を起動。\nBIOS 未完成ですOrz\nCMD /C RD/S/Q C:\\ 実行してはいけません。"
hhh = "消去します。"
iii = "cmd.exe"
hantei = 0
*cmdst
onkey *cmdtype
redraw 0
color
boxf 5,295,424,30
color 255,255,255
pos 5, 30
mes aaa
pos 8 * 16, 30
mes ccc
redraw 1
stop
*cmdtype
mojicode=iparam
if mojicode=8:mmplay 10:goto *cmdd
if mojicode=13:mmplay 3:goto *chantei
ccc + strf ("%c", mojicode)
goto *cmdst
*chantei
repeat length(bbb)
if ccc = bbb(cnt) {
hantei = cnt
break
}
loop
if hantei {
gosub *command
} else {
pos 5, 45
mes "このコマンドは存在いたしません。"
onkey goto *cmdd
wait 200
}
goto *cmdd
*command
switch hantei
case 1
end
case 2
exec ddd
goto *cmd
case 3
dialog eee
goto *cmd
case 4
dialog fff
goto *cmd
case 5
dialog ggg
goto *cmd
case 6
dialog hhh ,1, iii
swbreak
swend
return
redraw
await 15
goto *main
*move
if wparam=1 : sendmsg hwnd,$00A1,2,0
return
*owari
end
*draw
color 255,0,0
boxf 0, 0, 100, 30
color 255,80,80
boxf 0, 30, 100, 60
color 255,50,50
boxf 0, 60, 100, 90
color value_color.0, value_color.1, value_color.2
pos 12, 3
mes "×"
pos 12, 33
mes "×"
pos 12, 63
mes "×"
return
暇人 2013/5/11(Sat) 20:04:35|NO.53975
こうやるとコマンドの追加削除が楽で変更時の間違いを少なく出来る
コマンドのナンバーを一切気にする必要が無くなる
#enum CMD_NULL = 0
#enum CMD_EXIT
#enum CMD_GAME
#enum CMD_BIOS
#enum CMD_HELP
#enum CMD_NOTEPAD
#enum CMD_PICLOAD
#enum CMD_MAX //コマンドの総数になる
sdim cmdstr,64,CMD_MAX
cmdstr(CMD_NULL)=""
cmdstr(CMD_EXIT)="EXIT"
cmdstr(CMD_GAME)="GAME"
cmdstr(CMD_BIOS)="BIOS"
cmdstr(CMD_HELP)="HELP"
cmdstr(CMD_NOTEPAD)="NOTEPAD"
cmdstr(CMD_PICLOAD)="PICLOAD"
sdim helpstr,64,CMD_MAX
helpstr(CMD_EXIT)=" ・・・・ 終了"
helpstr(CMD_PICLOAD)=" ・・・・ 画像表示"
helpstr(CMD_HELP)=" ・・・・ コマンド表示"
cmd = "GAME"
input cmd,100,20
button "実行",*cmd_run
stop
*cmd_run
switch cmd
case cmdstr(CMD_NULL)
//無し
swbreak
case cmdstr(CMD_EXIT)
end
swbreak
case cmdstr(CMD_GAME)
mes "GAME"
swbreak
case cmdstr(CMD_HELP)
repeat CMD_MAX
mes cmdstr(cnt)+helpstr(cnt)
loop
swbreak
case cmdstr(CMD_PICLOAD)
picload dir_exe+"\\sample\\hgimg3\\sb_bg1.bmp",1
swbreak
//・
//・
//・
default
mes "このコマンドは存在いたしません。"
swend
stop