本次Java作业的主题是构建一个双人对战的联机中国象棋游戏。在这个项目中,学生需要实现一系列关键功能和类来确保游戏的正常运行。以下是这个项目的主要知识点:
1. **Util类**:作为工具类,Util包含了多次被调用的函数,如`drawString`用于居中输出文字,`loadFont`用于加载外部字体,以及`loadImage`用于加载外部图像。这些静态方法提高了代码的复用性,简化了程序设计。
2. **ChessPainter类**:这是一个核心组件,它定义了一个棋盘的绘制和事件处理机制。它实现了`ChessPainterListener`接口,定义了新的事件类,用于图形绘制和事件处理。此外,为了适应两位玩家的视角差异,当玩家执黑子时,棋盘会通过`Graphics2D`的`rotate`方法进行180度旋转,同时调整文字方向,以达到视觉上的翻转效果。
3. **ChessBoard类**:继承自ChessPainter,实现了一些关键方法,如`hasChess`检查某个位置是否有棋子,`isEnemy`判断棋子是否属于对手,`getPointAround`获取当前位置周围的点,`getNearestChessInDirection`找到某个方向上最接近的棋子,`getEdge`和`isEdge`检测边界,以及`getContinuePoints`计算连续可移动的点。这些方法为`getDestinations`方法提供了基础,该方法根据每种棋子的规则确定其可能的移动位置。
4. **Server类和Client类**:分别代表服务器和客户端。这两个类是实现双人在线对战的关键,它们建立并管理套接字连接,负责数据的转发,允许玩家通过相同的编号进行匹配对战。服务器IP和端口号为114.116.73.229:4331,如果连接出现问题,可以在Client.java中将IP更改为本地地址127.0.0.1。
5. **PlayChess类**:这是在网络通信中传输棋步的对象,抽象了棋子的移动方式。通过对象流传输,实现了棋局的网络同步。
6. **优化与待开发功能**:尽管基本功能已经实现,但仍有改进的空间。比如,联机界面和加载界面的美化,悔棋功能的添加(通过栈存储历史棋局状态),棋局的保存和读取(支持标准象棋术语记录),以及算法优化以提高`getDestinations`方法的执行效率。此外,还可以添加对无法行走棋步的提示,以及对棋局绝杀情况的判断。
这个Java作业要求学生具备扎实的面向对象编程能力,理解图形用户界面的设计和事件处理,熟悉网络编程,以及对中国象棋规则的深入理解。通过这个项目,学生不仅可以提升编程技能,还能增强问题解决和系统设计的能力。