メモ的な何か

技術的な私のメモになる予定です。

初記事 Javaでオブジェクト指向とリバーシ作成

お初の記事となります。

主に技術系(プログラミング)メインで自分のメモ代わりに書いてきたいと思います。

 

早速本題なのですが、今回Javaリバーシ(オセロっすね)を作成してみました。

私、C言語が長いので(できるとは言ってない)Javaわかりません。オブジェクト指向もっとわかりません。

なんで今回はオブジェクト指向的な考え方でJavaを使ってリバーシを作成してトレーニングな感じです。

 

まず初めにいつもどおり何も考えず いきなりコード書き始めます。もちろん撃沈です(Cでもこれしてたからダメなんですね)

「オブジェクトって現実にあるもんだから白黒の石、ボード、マス?あとプレイヤーとか必要だ。あれ、GUIつけたいのに描画とかするオブジェクトっていなくね?ターンってオブジェクト」「石を置くってメソッドってプレイヤーが持ってんの?ボードが持ってんの?」

みたいなことを考えてたら頭がこんがらがり、ぐちゃぐちゃコードになり途中で挫折でした。

なのでとりあえずお勉強から入ろうと本買ってきました。

なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング

なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング

 

 本の内容はトランプゲームをオブジェクト指向で設計、製作していく内容で個人的には分かりやすく、読みやすかったです。

 

本をこなすと何となくクラス設計の考え方がわかってきたので、この本の内容に沿ってリバーシを作成していきたいと思います。

1、作成物の概要を文章にする。

これは機械にプログラミングで教えるにあたって、とりあえず日本語で説明しよう的なやつです。作ったものが下記になります。

 

プレイヤーの人数
プレイヤーは2人とする。

ボード
8マス×8マスとする。

ゲームの開始
ゲームマスターにプレイヤーを教える。
ゲームマスターがプレイヤーの順番を決める
先攻プレイヤーに黒、後攻プレイヤーに白とする。
両プレイヤーはボードの中央に黒、白の石を2つずつ置く。

ゲームの流れ
ゲームマスターが先攻から順番にプレイヤーを指名する。
指名されたプレイヤーは石を置ける位置を取得。
置けるところがある場合
プレイヤーによって動作を変える
・入力プレイヤー
石を置きたい場所を選択。
取得した位置と一致する場合、石を置く。
取得した位置と不一致な場合、石を置きたい場所を選択に戻る。
・自動プレイヤー
取得した位置から置ける場所を選択。
石を置く。

置いた石と同じ色の石に挟まれた違う色の石をひっくり返す。
白、黒石の数を数える。
ボードに置くとこがなくなった場合は石の数が多いプレイヤーが勝利とし、結果を表示し、ゲームを終了する。

置けるとこがない場合
パスをする。

ゲームマスターが次のプレイヤーを指名する。

 

まあ、こんな感じで考えました。はい、日本語も苦手なことがバレましたね。

 

 2、クラスになりえそうな名詞を抜き出す

ここでクラスの検討になります。それっぽいものを適当でいいので抜きだします。

 

プレイヤー、ゲームマスター、石、マス、ボード

 

的な感じですね。先の文章でゲームマスターとか書いてたのこのためです。せこい手つかいました。ターンとかの役割をゲームマスターが行ってくれるのでゲーム的なものは結構いいんじゃないかと思います。本でもやってましたし・・・

 

3、クラス操作の分析

操作とはクラス間のメッセージになります。先ほど上げたクラス間でどんなやり取りがあるか考えます。

文章のゲームの準備とゲームの開始に分けて考えてみます。

図と矢印で考えるとわかりやすいんでパワポで適当に図描きました。

 

 f:id:rui_phone:20140923211214p:plain

f:id:rui_phone:20140923212537p:plain

こんな感じになります。図についての意見は言わなくていいです。

最初は大体で描ければいいと思います。作ってるうちに増えたり減ったりしています。

ここで重要だと思ったのが矢印の向きになります。矢印が付いてるほうがメソッドを持つ方と反対が呼び出す方になります。

 

長くなってきた気がするので、次の記事に続きます。