11月4日
[实验任务一]:围棋
设计一个围棋软件,在系统中只存在一个白棋对象和一个黑棋对象,但是它们可以在棋盘的不同位置显示多次。
实验要求:
1.提交类图;
2.提交源代码;
3.注意编程规范;
4.要求用简单工厂模式和单例模式实现享元工厂类的设计。
实验内容:
1. 类图:
2. 源代码:
// 颜色枚举
enum Color {
WHITE, BLACK
}
// 棋子接口
interface Stone {
Color getColor();
void place(int x, int y);
}
// 白棋实现
class WhiteStone implements Stone {
private final Color color;
public WhiteStone() {
this.color = Color.WHITE;
}
@Override
public Color getColor() {
return color;
}
@Override
public void place(int x, int y) {
System.out.println("在棋盘上放置了白棋:位置 (" + x + ", " + y + ")");
}
}
// 黑棋实现
class BlackStone implements Stone {
private final Color color;
public BlackStone() {
this.color = Color.BLACK;
}
@Override
public Color getColor() {
return color;
}
@Override
public void place(int x, int y) {
System.out.println("在棋盘上放置了黑棋:位置 (" + x + ", " + y + ")");
}
}
// 享元工厂类(单例模式)
class StoneFactory {
private static StoneFactory instance;
private WhiteStone whiteStone;
private BlackStone blackStone;
private StoneFactory() {
whiteStone = new WhiteStone();
blackStone = new BlackStone();
}
public static synchronized StoneFactory getInstance() {
if (instance == null) {
instance = new StoneFactory();
}
return instance;
}
public Stone getStone(Color color) {
if (color == Color.WHITE) {
return whiteStone;
} else {
return blackStone;
}
}
}
// 棋盘类
class Board {
private int size;
private List<Stone> stones;
public Board(int size) {
this.size = size;
this.stones = new ArrayList<>();
}
public void placeStone(int x, int y, Color color) {
Stone stone = StoneFactory.getInstance().getStone(color);
stone.place(x, y);
stones.add(stone);
}
}
// 游戏类
class GoGame {
private Board board;
public GoGame(int boardSize) {
this.board = new Board(boardSize);
}
public void startGame() {
System.out.println("游戏开始。");
}
public void endGame() {
System.out.println("游戏结束。");
}
}
// 主类
public class GoGameMain {
public static void main(String[] args) {
GoGame game = new GoGame(19); // 创建一个19x19的围棋游戏
game.startGame(); // 开始游戏
// 放置棋子
game.board.placeStone(3, 3, Color.WHITE); // 在(3, 3)位置放置一个白棋
game.board.placeStone(4, 4, Color.BLACK); // 在(4, 4)位置放置一个黑棋
game.board.placeStone(5, 5, Color.WHITE); // 再次在(5, 5)位置放置一个白棋
game.endGame(); // 结束游戏
}
}
3. 运行截图: