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.  运行截图:


 

 


 


 

 
posted @ 2024-11-04 19:15  序章0  阅读(9)  评论(0编辑  收藏  举报