GUIクラス図
MainFrame
+MainFrame()
コンストラクタ
1.右上の×ボタンで閉じる動作を実装。
2.現在選択されているパネルpanelをMainFrameに追加する。
+main()
MainFrameのインスタンスを生成し、表示を行う。
+setPanel
パネルの切り替えを行う
@param panel 新しく設定するパネル
1.MainFrameで現在選択されているパネルthis.panelをMainFrameから削除する。
2.引数で渡された新しく設定するパネルpanelをMainFrameに追加する。
3.this.panelにpanelを代入する。
4.MainFrameの描写の更新(validate())
MainPanel
+MainPanel()
コンストラクタ
1.引数のmainFrameをフィールドのmainFrameに格納する。
2.画像をインポートする(ImageIcon)。
3.各labelに画像を設定する。
4.画像にマウスリスナーをつける。
+mouseReleased()
マウスがクリックされた時の動作(正しくはマウスのクリックが離された時の動作)
1.playButtonが押された場合
mainFrameのsetPanel()にmainFrameのplayerNumPanelをぶん投げる(getterつかおう)
2.playButtonが押された場合
rulePanelをぶん投げる
PlayerNumPanel
+PlayerNumPanel()
コンストラクタ
1.引数のmainFrameをフィールドのmainFrameに格納する。
2.パネルplayOrReturnの初期化を行う
+mouseReleased()
マウスがクリックされた時の動作(正しくはマウスのクリックが離された時の動作)。
playOrReturn()のplayButtonが押された時の処理を行う。
1.ひとりであそぶ場合
とりあえずmainFrameのisCpuを{false,true}にしておく。
2.ふたりであそぶ場合
isCpuを{true,true}にする。
CpuLevelPanel
+CpuLevelPanel()
コンストラクタ
1.引数のmainFrameをフィールドのmainFrameに格納する。
2.パネルplayOrReturnの初期化を行う
+mouseReleased()
マウスがクリックされた時の動作(正しくはマウスのクリックが離された時の動作)。
playOrReturn()のplayButtonが押された時の処理を行う。
mainFrameのcpuLevelに、弱いなら0、普通なら1、強いなら2を設定する
DicideFirstPanel
+DicideFirstPanel()
コンストラクタ
1.引数のmainFrameをフィールドのmainFrameに格納する。
2.パネルplayOrReturnの初期化を行う
+mouseReleased()
マウスがクリックされた時の動作(正しくはマウスのクリックが離された時の動作)。
playOrReturn()のplayButtonが押された時の処理を行う。
cpuが先手になった時にmainFrameのisCpuを反転する
PlayOrReturn
+PlayOrReturn()
コンストラクタ
1.this.mainFrameに引数mainFrameを格納、this.panelに引数panelを格納
2.画像をインポート
3.ボタンに画像を設定
3.playButtonにマウスリスナーをつける。処理はthis.panelにまかせる。
4.returnButtonにマウスリスナーをつける。処理は当クラスで行う。
+mouseReleased()
マウスがクリックされた時の動作(正しくはマウスのクリックが離された時の動作)
・playButtonが押された場合
mainFrameのsetPanel()にmainFrameのmainPanelをぶん投げる
GamePanel
+GamePanel()
コンストラクタ
mainFrameのisCpuとcpuLevelに基づいてJudgeを初期化するなり何なり頑張って
Chick
package model; public class Chick extends AbstractPiece { public Chick(int id, boolean isFirst) { super(id, isFirst); boolean[][] setDirection = { { false, true, false }, { false, false, false }, { false, false, false } }; movableDirection = setDirection; NAME = "CHICK"; if (!isFirst) { invertMovableDirection(); } } }
AbstractPiece
package model; public abstract class AbstractPiece { protected int ID; protected String NAME; protected boolean isFirst; protected boolean[][] movableDirection; public AbstractPiece(int ID, boolean isFirst) { this.ID = ID; this.isFirst = isFirst; } public void invertMovableDirection() { boolean[][] out = new boolean[3][3]; for (int i = 0; i < out.length; i++) { for (int j = 0; j < out[i].length; j++) { out[i][j] = movableDirection[2 - i][2 - j]; } } movableDirection = out; } public int getID() { return ID; } public boolean[][] getMovableDirection() { return movableDirection; } public boolean isFirst() { return isFirst; } public void setFirst(boolean isFirst) { this.isFirst = isFirst; } public String getNAME() { return NAME; } }
TreeTester
package tester; import java.util.List; import model.AbstractStrategy; import model.Board; import model.BoardNode; import model.TreeStragety; public class TreeTester { public static void main(String[] args) { Board board = new Board(); AbstractStrategy strategy = new TreeStragety(board); strategy.nextTree(false); List<BoardNode>[] tree = strategy.getTree(); for (int i = 0; i < tree[tree.length - 1].size(); i++) { System.out.println(tree[tree.length - 1].get(i).getBoard()); } } }
AbstractStrategy
package model; import java.util.List; public abstract class AbstractStrategy { Board board; List<BoardNode>[] tree; AbstractStrategy(Board board) { this.board = board; } public abstract Hand nextSelect(); public abstract Hand nextMove(); public abstract void nextTree(boolean isFirst); public abstract List<BoardNode>[] getTree(); }
TreeStragety
package model; import java.util.ArrayList; import java.util.List; public class TreeStragety extends AbstractStrategy { List<BoardNode>[] tree = new ArrayList[1]; public TreeStragety(Board board) { super(board); List<BoardNode> initList = new ArrayList<BoardNode>(); initList.add(new BoardNode(new Board(board), -1, -1)); tree[0] = initList; } @Override public Hand nextSelect() { // TODO 自動生成されたメソッド・スタブ return null; } @Override public Hand nextMove() { // TODO 自動生成されたメソッド・スタブ return null; } @Override public void nextTree(boolean isFirst) { List<BoardNode>[] newTree = new ArrayList[tree.length + 1]; for (int i = 0; i < tree.length; i++) { newTree[i] = tree[i]; } newTree[newTree.length - 1] = new ArrayList<BoardNode>(); tree = newTree; // 新しいノード for (int i = 0; i < tree[tree.length - 2].size(); i++) { Board board = tree[tree.length - 2].get(i).getBoard(); AbstractPiece[][] mainBoard = board.getMainBoard(); List<AbstractPiece> inventory = board.getInventorys()[isFirst ? 0 : 1]; // mainBoard for (int j = 0; j < mainBoard.length; j++) { for (int k = 0; k < mainBoard[j].length; k++) { if (mainBoard[j][k] != null && mainBoard[j][k].isFirst() == isFirst) { boolean[][] movablePlace = board.getMobablePlace(mainBoard[j][k]); for (int l = 0; l < movablePlace.length; l++) { for (int m = 0; m < movablePlace[l].length; m++) { if (movablePlace[l][m]) { Board addBoard = new Board(board); addBoard.select(new Hand(j * 3 + k, isFirst)); addBoard.move(new Hand(l * 3 + m, isFirst)); tree[tree.length - 1].add(new BoardNode(addBoard, i, -1)); } } } } } } // inventory for (int j = 0; j < inventory.size(); j++) { boolean[][] movablePlace = board.getMobablePlace(inventory.get(j)); for (int k = 0; k < movablePlace.length; k++) { for (int l = 0; l < movablePlace[l].length; l++) { if (movablePlace[k][l]) { Board addBoard = new Board(board); addBoard.select(new Hand(12 + 6 * (isFirst ? 0 : 1) + j, isFirst)); addBoard.move(new Hand(k * 3 + l, isFirst)); tree[tree.length - 1].add(new BoardNode(addBoard, i, -1)); } } } } } } @Override public List<BoardNode>[] getTree() { return tree; } }