チャレンジ課題:繰り返し処理「潜水艦ゲーム(海戦ゲーム)」
潜水艦ゲーム(簡易ルール)の説明:
1.10x10の盤を用いる。盤の座標は[0,0]〜[9,9]とする。
2.コンピュータは、盤の上のどこか(乱数の座標)に潜水艦(1マス)置く。
潜水艦の座標は、プレイヤーには見えない。
潜水艦の位置は一度決めたら、移動できない。
※乱数生成例
//潜水艦の座標を乱数で0-9の範囲で生成
int sx = (int)(Math.random()*10);
int sy = (int)(Math.random()*10);
//Math.random()は 0.0から1.0未満の乱数をdouble型で返す
3.プレイヤーは、任意の座標に機雷攻撃を1回行う。
4.もし、攻撃が潜水艦に命中したならば、プレイヤーの勝ちとしてゲーム終了。
命中判定は、着弾の座標と潜水艦の座標が完全に一致した場合。
((着弾x座標 == 潜水艦x座標) && (着弾y座標 == 潜水艦y座標))
5.もし、砲撃が外れたならば、以下の式を用いて、潜水艦までの距離を報告する。
報告する距離情報は、潜水艦と着弾位置のx座標、y座標の差の合計。
距離情報 = (潜水艦x座標 と 着弾x座標 の誤差) + (潜水艦y座標 と 着弾y座標 の誤差)
※ 一般的にはマンハッタン距離という
※ 誤差の計算では、潜水艦座標と着弾座標の誤差が負の値にならないように注意する
6.10回繰り返すか、潜水艦を沈めるまで手順3にもどる。
7.10回以内に潜水艦を沈められなければ、プレイヤーの負けとしてゲーム終了。
※元になった「潜水艦ゲーム」は、各プレイヤーが複数の艦艇をそれぞれ配置し、
先に相手の艦艇を全て撃沈した方が勝ち、という2人対戦ゲーム。
紙と鉛筆があれば遊べる。
動作例)
砲撃のx座標を入力してください。(0-9)
5
砲撃のy座標を入力してください。(0-9)
3
砲撃回数1
砲撃(5,3)は外れました・・・
相手潜水艦との誤差は3
砲撃のx座標を入力してください。(0-9)
5
砲撃のy座標を入力してください。(0-9)
5
砲撃回数2
砲撃(5,5)は外れました・・・
相手潜水艦との誤差は3
砲撃のx座標を入力してください。(0-9)
7
砲撃のy座標を入力してください。(0-9)
4
砲撃回数3
砲撃(7,4)は命中しました!
相手の潜水艦を撃沈しました。【YOU WIN!】
※水色はユーザからのキーボード入力
チャレンジ課題
サンプルを参考に、上記の説明通りのプログラムを作成せよ。