下記のようなじゃんけんするスクリプトを書いてみました。簡単で楽しいのでスクリプトの練習にはもってこいです。
まず「さいしょはぐー」からはじめます。「ぐー」を選ばなければ「最初はぐーだよ」とダイアログを出します。次にコンピュータの手を決めます。random number from 1 to 3でランダムな数字を出してから決めます。最後に勝ち負け判定をして終了です。
set AAA to choose from list {"ぐー", "ちょき", "ぱー"} with prompt "さいしょはぐー!"
if AAA is not {"ぐー"} then
display dialog "最初はぐーだよ"
end if
set AAA to choose from list {"ぐー", "ちょき", "ぱー"} with prompt "じゃーんけーん"
set myJanken to AAA--わたしの手はmyJankenに入る
set BBB to random number from 1 to 3--1から3のランダムな数字がBBBに入る
if BBB is 1 then--もし1なら
set asJanken to {"ぐー"}--変数asJankenを {"ぐー"}にする
else if BBB is 2 then
set asJanken to {"ちょき"}
else
set asJanken to {"ぱー"}
end if
if myJanken is asJanken then
display dialog "あいこだよ"
else if myJanken is {"ぱー"} and asJanken is {"ぐー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの勝ちです。"
else if myJanken is {"ぐー"} and asJanken is {"ちょき"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの勝ちです。"
else if myJanken is {"ちょき"} and asJanken is {"ぱー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの勝ちです。"
else if myJanken is {"ぱー"} and asJanken is {"ちょき"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの負けです。"
else if myJanken is {"ぐー"} and asJanken is {"ぱー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの負けです。"
else if myJanken is {"ちょき"} and asJanken is {"ぐー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの負けです。"
end if
さてこのスクリプトには欠点がいくつもあります。まず「さいしょはぐー」の部分ですが「ぐー」を出さなくてもじゃんけんに進めます。「ぐー」をださない限り進めなくしたいものです。
repeat
set AAA to choose from list {"ぐー", "ちょき", "ぱー"} ¬
with prompt "さいしょはぐー!"
if AAA is not {"ぐー"} then--ぐーでなければ
display dialog "最初はぐーだよ"--ダイアログを出す
else--そうでなければ(ぐーなら)
exit repeat--repeatを抜ける
end if
end repeat
上のようにrepeatを入れぐーならばrepeatを抜けれるようにすれば「さいしょはぐー」の部分は完成です。
次の欠点は勝っても負けてもあいこでもじゃんけんが終了してしまう事です。こちらもrepeat文で直す事が出来ます。
repeat
set AAA to choose from list {"ぐー", "ちょき", "ぱー"} with prompt "じゃんけん"
set myJanken to AAA
set BBB to random number from 1 to 3
if BBB is 1 then
set asJanken to {"ぐー"}
else if BBB is 2 then
set asJanken to {"ちょき"}
else
set asJanken to {"ぱー"}
end if
if myJanken is asJanken then
display dialog "あいこだよ"
else if myJanken is {"ぱー"} and asJanken is {"ぐー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの勝ちです。"
exit repeat
else if myJanken is {"ぐー"} and asJanken is {"ちょき"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの勝ちです。"
exit repeat
else if myJanken is {"ちょき"} and asJanken is {"ぱー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの勝ちです。"
exit repeat
else if myJanken is {"ぱー"} and asJanken is {"ちょき"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの負けです。"
exit repeat
else if myJanken is {"ぐー"} and asJanken is {"ぱー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの負けです。"
exit repeat
else if myJanken is {"ちょき"} and asJanken is {"ぐー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの負けです。"
exit repeat
end if
end repeat
これでいちおう完成ですが、勝ち負け判定に同じ処理を何度も書いています。こういうのはスクリプト的に非常によろしくないですし、そもそも勝ち負け判定自体もif文がいっぱいでスマートではありません。
まず勝ち負け判定ですが「あいこ」なら繰り返しでそれ以外なら勝ちか負けなので繰り返しを抜けます。そして「勝ち」かどうか判定できれば「あいこ」と「勝ち」以外は自動的に「負け」なので判定する必要はありません。これをスクリプトにすると下記のようになります。
if myJanken is asJanken then
display dialog "あいこだよ"
else
if myJanken is {"ぱー"} and asJanken is {"ぐー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの勝ちです。"
else if myJanken is {"ぐー"} and asJanken is {"ちょき"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの勝ちです。"
else if myJanken is {"ちょき"} and asJanken is {"ぱー"} then
display dialog "わたしの手は" & asJanken & "でした。あなたの勝ちです。"
else
display dialog "わたしの手は" & asJanken & "でした。あなたの負けです。"
end if
exit repeat
end if
これで多少はスマートになりましたがまだまだ工夫の余地がありそうです。私がいろいろ考えたところなんとか下記のようになりました。みなさんもいろいろ工夫してみてください。
set MSGSTR to "さいしょはぐー!"
repeat
set asJanken to item (random number from 1 to 3) of {{"ぐー"}, {"ちょき"}, {"ぱー"}}
set myJanken to choose from list {"ぐー", "ちょき", "ぱー"} with prompt MSGSTR
if myJanken is {"ぐー"} and MSGSTR is "さいしょはぐー!" then
set MSGSTR to "じゃーんけーんぽん!"
else if MSGSTR is "さいしょはぐー!" then
display dialog "さいしょはぐーだよ!"
else if myJanken is asJanken then
set MSGSTR to "あーいこーでしょっ!"
else if {myJanken, asJanken} is {{"ぱー"}, {"ぐー"}} or ¬
{myJanken, asJanken} is {{"ぐー"}, {"ちょき"}} or ¬
{myJanken, asJanken} is {{"ちょき"}, {"ぱー"}} then
set FLG to "勝ち"
exit repeat
else
set FLG to "負け"
exit repeat
end if
end repeat
display dialog "わたしの手は" & asJanken & return & "あなたの手は" & ¬
myJanken & return & "あなたの" & FLG & "です。"