03)AppleScriptの練習の最近のブログ記事

01)ASじゃんけんスクリプト

| コメント(0)

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

エントリー一覧

OpenID対応しています OpenIDについて
Powered by Movable Type 8.0.2
漢字イラストロジック-脳トレ京
FREE ONLINE SUDOKU