オセロのゲームのサンプルをまねしてつくろうとアルゴリズムを見たのですが、よく分かりません。説明では以下に記述しますが、★「指定されたx座標をx、y座標をyとする
右上方向の隣の駒が相手の駒であるかどうかを確認する。隣の駒の座標はx+1 y-1 ですので、配列[y – 1][x + 1] の要素の値である」の説明の部分で右上方向の隣の駒とはどこの場所で、隣の駒の座標がなぜx+1 y-1になるのかでつまずいています。単純な日本語の理解ができていないのは承知しています。ここでつまずいて後が進みません。私はまだjavaの入門と実践編しか読み終えていない初心者です。お力を貸していただけるとありがたいです。
駒の位置は座標で管理する。座標はx方向に0~7、同じくy方向に0~7とします。座標中にどの駒がおかれえいるかどうかはString[8][8]の多次元配列で管理する。
オセロゲームにおいて一番肝心となるのが同色で挟んだ駒をひっくり返す部分である。ある位置に駒をおくと、その上、下、右、左、左上、右上、左下、右下の8方向に配置済みの駒を確認し今おいた駒と挟むことができる場合はひっくり返す。
例として右上方向の配置を確認してひっくり返すアルゴリズムを記述する。
★指定されたx座標をx、y座標をyとする
右上方向の隣の駒が相手の駒であるかどうかを確認する
隣の駒の座標はx+1 y-1 ですので、配列[y – 1][x + 1] の要素の値である
隣の駒が自分の駒の場合は続きの処理はしない
相手の駒の場合は、さらにその右上方向の駒をひとつづつ確認する。ここでは自駒からの距離をあらわすiをインクリメントしつつfor文で処理をする
自分の駒がある場合は挟まれた位置にある駒を全て自分の駒として多次元配列の値を上書きをする
多次元配列の値を上書きする処理はfor文を使って行う
自分の駒がない場合や、座標が8×8の表から出てしまう場合は処理を終了。
このような処理を8方向分作成し、駒を配置するごとに8方向全てを確認し駒をひっくり返す。
駒のひっくり返しが終った状態の情報になっている配列の要素をひとつづつ取り出し、表として出力。
表の出力は2重for文を使って行う。
回答3件
あなたの回答
tips
プレビュー