チャレンジ課題:「丁半(サイコロ)ゲーム」
「丁半」ゲーム説明
「丁半」は時代劇でよく登場する、サイコロを使った賭博である。Wikipedia
ツボにサイコロを二つ入れ、サイコロの出目の合計が偶数(丁)か奇数(半)かを賭ける。
サイコロの出目の組み合わせは以下の通りである。
丁 : (1,1), (1,3), (1,5), (2,2), (2,4), (2,6), (3,1), (3,3), (3,5), (4,2), (4,4), (4,6), (5,1), (5,3), (5,5), (6,2), (6,4), (6,6) 計18通り
半 : (1,2), (1,4), (1,6), (2,1), (2,3), (2,5), (3,2), (3,4), (3,6), (4,1), (4,3), (4,5), (5,2), (5,4), (5,6), (6,1), (6,3), (6,5) 計18通り
つまり、丁か半の確立は五分五分である。
「丁」とは、丁度(2で割れる)、「半」は(2で割ると)半端(が出る)からきている。
「一か八(ばち)か」は、「一」は「丁」、「八」は「半」の上半分を取った賭博用語からきているという説がある。
ステップ1
サイコロを二つ振り、出た目をASCIIアートで表示せよ。
ステップ1では、main()メソッドとrollDice()メソッドは以下のプログラムを変更せずに使え。
メソッドroll()はサイコロの目を乱数で1~6の数値で返す。
メソッドone(),two(),three(),four(),five(),six()はそれぞれ、サイコロの目をアスキーアートで画面に表示する。
プログラムが正しく実行できるように、メソッドroll(),one(),two(),three(),four(),five(),six()を実装せよ。
public class DoubleDice{
public static void main(String[] args){
rollDice();
rollDice();
}
static int rollDice(){
int face = roll();
switch(face){
case 1:
one();
break;
case 2:
two();
break;
case 3:
three();
break;
case 4:
four();
break;
case 5:
five();
break;
case 6:
six();
break;
}
return face;
}
}
実行例)
+---+
|O O|
| O |
|O O|
+---+
+---+
|O |
| O |
| O|
+---+
ヒント
ステップ2
サイコロの目の結果が奇数(半)か偶数(丁)か判定して表示せよ。ステップ2および以降のステップではmain()メソッドへ処理を追加しても良い。
実行例)
+---+
|O O|
| |
|O O|
+---+
+---+
| O|
| |
|O |
+---+
丁!
+---+
|O O|
|O O|
|O O|
+---+
+---+
| |
| O |
| |
+---+
半!
ヒント
ステップ3
サイコロを振る前に、ユーザの賭け(半か丁か)をキーボード入力から受け取り、入力結果を表示せよ。
実行例)
半か丁か(1:半, 2:丁)?1
半でよござんすね
+---+
| |
| O |
| |
+---+
+---+
|O |
| O |
| O|
+---+
丁!
※水色はキーボードからの入力例
ヒント
ステップ4
ユーザの入力とサイコロの目を比較し、当たったか外れたかを表示せよ。
実行例)
半か丁か(1:半, 2:丁)?2
丁でよござんすね
+---+
|O O|
| |
|O O|
+---+
+---+
|O O|
|O O|
|O O|
+---+
丁!
当たり!
※水色はキーボードからの入力例
ヒント
チャレンジ課題
上記の説明通りステップ4まで完成したプログラムを作成せよ。
<mackin>