http://blogs.wankuma.com/rti/archive/2007/08/10/89801.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門8
http://blogs.wankuma.com/rti/archive/2007/08/08/89397.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7
http://blogs.wankuma.com/rti/archive/2007/08/07/89226.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門6
http://blogs.wankuma.com/rti/archive/2007/08/02/88399.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門5
http://blogs.wankuma.com/rti/archive/2007/07/31/87955.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門4
http://blogs.wankuma.com/rti/archive/2007/07/30/87742.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門3
http://blogs.wankuma.com/rti/archive/2007/07/26/87105.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門2
http://blogs.wankuma.com/rti/archive/2007/07/25/86988.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門1
の続きです。
どこからフォローすれば良いのかわからないので、先頭から順に行ってます。
今回は
実際に設計してみよう
というテーマです。
以前、「オブジェクト指向が難しいんじゃない。難しいのは設計だ。」と言いました。
さて、そんな訳なので、3並べというヌルイゲームを例にとって、軽く設計してみることにします。
まあ、設計と言っても、クラス切ってメンバのっける程度ですけれど・・・
3並べのルールは、以下の通りです。
○ と × の駒を持つプレイヤーが2名で戦います。
各プレイヤーは、交互に3×3のマス目に自分の駒を置きます。
○と×が縦横斜めに3つ並んだら、その駒を持つプレイヤーが勝ちでゲームオーバーです。
全てのマス目に○か×が置かれたら引き分けです。
まあ、かなりアレな人がプレイしなければ、まず引き分けにしかならないヌルイゲームであることは一目瞭然です。
ここで、必要となるオブジェクトは次のようになるかと思います。
○×の駒 ・プレイヤー・3並べボード
まずは駒から考えます。
とは言っても、駒は、○と×しかありません。
列挙型でも使えば良いでしょう。
次にプレイヤーです。プレイヤーは駒を持つので、プレイヤーを表すのは駒で良いように思います。
但し、交互に代わるのですから、現在どちらの番なのかを教えてくれるプロパティが欲しいですね。
それと、現在どちらの番かのメッセージを取得できるメソッド。また、番を交代するためのメソッドも欲しいです。
最後にボードです。
以下のようなものが必要になりそうです。
・特定の場所(マス)に置かれている駒を取得するメソッド、その場所に駒を置くメソッド
・現状での勝者を取得するメソッド
・全て駒が置かれている状態を示すプロパティ
C#で書くと次のようになります。
public enum Chip { ○, ×}
public class Player {
public Chip Turn {}
public public string GetMessage() {}
public void ChangePlayer() {}
}
public class Board {
public bool PutChip(int x, int y, Chip chip) {}
public Chip? GetChip(int x, int y) {}
public Chip? GetWinner() {}
public bool IsFull {}
}
基本的なイメージとしては、こんな感じでしょうか?
インデクサとか、シングルトンとか、イベントなどの単語が頭をよぎりますが、現時点では触れません(w)
これらのクラスを、Windows Form で使う場合は、相応するコントロールをフォームに貼ってバインドさせるなり、ユーザーコントロールにするなりして下さい。
コンソールで行うなら、毎回ボードに置かれた駒のイメージをコンソールに表示させる部分を追加すれば良いでしょう。