今回はプレイヤーの部分を作成しました。当初人対人を予定していましたが、乱数で打つプレイヤーが簡単に作れるので、まずそちらを作ってからマウスを使って人が打つプレイヤーを作りました。どちらもメソッドgetNextMoveで次の手を打つので同じスーパークラスを持ったほうがよいと思い、抽象クラス Player を定義しました。
今回のプログラムを Tic_tac_toe19 として公開します。
【図11 アプレットTic_tac_toe v1.9】
プレイヤーRandom(CPU)とプレイヤーHuman(人)の対戦ができます。先手×はRandomです。後手○は打ちたいところにマウスを持っていきクリックすると打てます。対戦後、[Replay]ボタンを押すと対戦結果の棋譜に従ってプレイを再現します。また、[New]ボタンを押すと新しいゲームが始まります。
今回のプログラムでは以下のクラスを新設しました。
●クラスPlayer
プレイヤーRandom、Humanのスーパークラスです。抽象クラスとして定義したので、Player自身のインスタンスを作ることはできません。
●クラスRandom
CPUの乱数によるプレイヤーです。クラスPlayerを継承しgetNextMoveメソッドを実装しています。
●クラスHuman
人のマウス入力によるプレイヤーです。クラスPlayerを継承しgetNextMoveメソッドを実装しています。
●クラスPos
getNextMoveメソッドの戻り値として盤上の縦横の位置を定義するために新設したクラスです。フィールド iCol, iRow を持ちそれぞれ桁位置、行位置を表します。
●クラスParse
棋譜の字句解析・構文解析のためのメソッドを集約しました。
●クラスTic_tac_toe
これまでアプレットとして使っていたクラスConsoleをGameAppletとリネームし、GameAppletを継承するクラスとしてTic_tac_toeを新設しました。ほとんどの部分がGameAppletで実装されているので、Tic_tac_toeではinitメソッドの中でタイトル名を変更しているだけです。
以上により、三目並べの基本的な部分が完成しました。あとはクラスPlayerを継承するサブクラスMiniMaxを移植すれば、Small Basic版のTic-tac-toe v1.4と同じになります。
(つづく)