GUIクラス図

f:id:t_hsn0:20160627223038p:plain

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を初期化するなり何なり頑張って

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;
	}
}