STEP-04
石をひっくり返してみよう
オセロのオセロたる所以である、石をひっくり返すという機能を加えてみました。 boolean mouseDown(Event evt, int x, int y)で、マウスが押されたことを検出し、 void placeStone(int x, int y, int color)の中で、石をひっくり返す処理を行っています。それから、オセロのルールにあるパスの機能も必要ですね。 boolean isPosibleToPlace(int color)で、パスしなければならないかどうかを調べています。
どちらの石も置くことができなくなるとゲーム終了ですので、終了の処理をします。ここでは、新しくウインドウを開いて、それぞれの石の数を表示するようにしました。また、リスタートボタンも用意して、それを押すとまた最初からゲームを始められるようにしました。
一応これで、二人そろえば、オセロで遊べるアプレットになりました。次は、いよいよ、コンピュータ側のアルゴリズムの作成にはいります。
[STEP-03へ] [Making of Othelloへ] [STEP-05へ]
Tips
- Javaでは、引数の数や型の異なる複数の同名のメソッドを定義することができます。下のプログラムの、boolean isPosibleToPlace(int x, int y, int color)と boolean isPosibleToPlace(int color)がそれにあたります。
「その色の石をその場所に置くことができるか?」というのと、「その色の石を置くことができるか?」というのでは、「置くことができるか?」が一緒だから、メソッド名も一緒でいいというのは、何となく納得できますよね。- クラスで定義するインスタンス変数は、privateで宣言できるのなら、そうした方が良いと思います。オブジェクト指向で言うところのカプセル化(情報隠蔽)というやつですね。そうすることで、そのクラスの提供する機能がはっきりするので使い勝手が良くなるようです。下のプログラムで新しく追加したクラス(ControlPanel, ScoreCanvas)は、インスタンス変数を全てprivateにして、必要な機能をメソッドで提供しています。
(えっ、Othelloクラスではprivateを使ってないじゃないかって? え〜と、それは、そのお、いわゆる手抜きというやつですね。まあ、Othelloクラスそのものは、他のクラスから利用されることを考えていないので、それほど気にしなくてもいいんじゃない?といったところです。)[Source code]
NAKAGAWA Masami ( nakagawa@yo.rim.or.jp )