在本次Java第二次大作业中,学生杨琳设计了一个纸牌游戏(空当接龙)的实现。核心是通过抽象和封装来构建一个复杂的牌类结构。以下是主要类及其功能的详细说明:
1. **Card类**:
- 设计目的:抽象出单张扑克牌的基本属性,如点数(`int face`)、花色(`intsuit`)以及位置坐标(`int x`, `int y`)。
- 封装部分:包含这些属性作为数据成员。
- 方法:
- 返回类型:`Card(int, int)` - 构造方法,接收点数和花色作为参数创建新的扑克牌实例。
- `DisplayCard(Graphics)` - 方法用于显示特定扑克牌,接受一个`Graphics`对象,用于图形渲染。
2. **Cards类**:
- 设计目的:抽象出一副扑克牌,包括52张牌,且不包含大小王。
- 封装部分:使用`LinkedList<Card>`存储牌的集合,`list`。
- 方法:
- 返回类型:`Cards()` - 构造方法,初始化牌堆并将52张牌随机排序。
- `deal()` - 发牌方法,从牌堆中移除并返回第一张牌。
- 其他辅助方法如`isContain()`和`canCollect()`用于游戏中判断牌堆内的卡片匹配规则。
3. **Collection类**:
- 设计目的:表示游戏中按顺序收集牌的牌堆,比如右上方的牌堆。
- 封装部分:包含顺序(`int order`)、牌堆列表(`LinkedList<Card>`)等。
- 方法:
- 返回类型:`Collection(int)` - 构造方法,接收顺序作为参数。
- `isContain()` - 判断指定坐标是否在牌堆内。
- `canCollect(Lin)` - 判断是否可以与另一牌堆合并,考虑花色和点数规则。
- `Merge()` - 合并指定牌堆到当前牌堆。
- `Display(Graphics)` - 显示牌堆内容。
- `is13()` - 判断牌堆是否已收集满13张。
- `CollectedSize()` - 返回已收集的牌数量。
4. **TransferStation类**:
- 设计目的:代表游戏中暂存牌的牌堆,如左上角的牌堆。
- 封装部分:包括顺序、牌堆列表和额外的`int x`坐标信息。
- 方法:
- 返回类型:`TransferStation(int)` - 构造方法,接收顺序作为参数。
整个设计的核心在于将游戏中的实体(扑克牌、牌堆)进行抽象,通过类和方法的组合实现牌的管理和操作,满足空当接龙游戏的需求。同时,利用数据结构如链表处理牌的动态添加和删除,以及判断和合并规则,确保游戏逻辑的顺畅执行。