下記のようなじゃんけんするスクリプトを書いてみました。簡単で楽しいのでスクリプトの練習にはもってこいです。
まず「さいしょはぐー」からはじめます。「ぐー」を選ばなければ「最初はぐーだよ」とダイアログを出します。次にコンピュータの手を決めます。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 & "です。"