没有合适的资源?快使用搜索试试~ 我知道了~
Java程序实现扑克牌拉火车游戏
资源推荐
资源详情
资源评论
JavaSE01 Day04
1. 拉火车游戏——编写Card类,实现equals、hashCode方法
2. 拉火车游戏——完成TrainGame类的设计及其shuffle方法的实现
3. 拉火车游戏——完成TrainGame类play方法和reap(int, Card)方法
4. 拉火车游戏——完成CardView及TrainFrame的设计和绘制方法、dealTimer调
度任务的编写
1 拉火车游戏——编写Card类,实现equals、hashCode方法
1.1 问题
在拉火车游戏中,如何使用Java代码来表示一张扑克牌,并且给出判断两张牌是否为同一张牌
的方式。
拉火车游戏主要的功能洗牌,发牌和游戏的过程。
我们的系统设定有两个玩家,一个是系统,一个是“Me”。发出的牌背面朝上,按次序出
牌,每个出牌的人,都要取最上面的一张。第一个人把她的第一张牌摆在牌桌上,第二个人把她的
第一张牌摆在第一个人牌的下面,只露出最上面的字号来供辩认即可,这样依次把牌出下去,直到
有人看到自己出的牌和桌面的牌有相同的,就把两张相同牌中间的都收走,放在自己手中牌的下
面,并且两张相同的牌牌面朝上,这样依次下去,直到某个玩家没有牌为止。拉火车游戏界面如
下:
启动系统,开始发牌,发到牌的玩家显示红色,否则是绿色。如图-29所示:
图-29
两个玩家(系统和Me,界面中上边的牌是系统玩家的,下边的牌是Me的,中间为两个玩家出
的牌,我们称之为桌面上的牌)依次出牌,如果系统玩家出牌时,发现有两张牌点数相同,系统玩
家收获两张相同牌中间的所有牌,放在牌底,并且相同的牌牌面朝上。Me玩家可以点中桌面的某
张牌,如果这张牌和Me玩家即将出的这样牌点数相同,Me玩家收获两张相同牌中间的所有牌,放
在牌底,并且相同的牌牌面朝上,如图-30所示:
图-30
1.2 方案
创建Card类来表示一张扑克牌,扑克牌有花色(红桃,黑桃,方片,梅花四种花色)属性,有
点数属性(从A...10...K),有牌是否处于选中状态属性,有牌是翻开还是扣着的属性。在Card中定
义这些属性。
覆盖equals方法,两张牌的花色和点数都相同,我们认为两张牌为同一张牌:
01. private int suit;//牌的花色
02. private int points;//表示牌的点数
03. private boolean selected = false;//是否是选中状态,默认为不选中
04. private boolean face = false;//牌是翻开的还是扣着的,默认为扣着的
01. @Override
02. public boolean equals(Object obj) {
03. if (this == obj)
04. return true;
05. if (obj == null)
06. return false;
07. if (obj instanceof Card) {
08. Card card = (Card) obj;
09. return suit == card.suit && points == card.points;
10. } else {
覆盖hashCode方法,与equals覆盖的原则保持一致,即取花色和点数:
1.3 实现
新建Card类:
在Card类中添加以下常量:
11. return false;
12. }
13. }
01. @Override
02. public int hashCode() {
03. final int prime = 31;
04. int result = 1;
05. result = prime * result + points;
06. result = prime * result + suit;
07. return result;
08. }
01. public class Card {}
01. public static final int SUIT_SPADE = 3;//表示黑桃
02. public static final int SUIT_HEART = 2;//表示红桃
03. public static final int SUIT_DIAMOND = 1;//表示方块
04. public static final int SUIT_CLUB = 0;//表示梅花
05. //表示13张牌
06. public static final int POINTS_A = 1;
07. public static final int POINTS_2 = 2;
08. public static final int POINTS_3 = 3;
09. public static final int POINTS_4 = 4;
10. public static final int POINTS_5 = 5;
11. public static final int POINTS_6 = 6;
12. public static final int POINTS_7 = 7;
13. public static final int POINTS_8 = 8;
在Card类中添加下列属性并生成它们的getter和setter方法:
在Card类添加构造方法:
14. public static final int POINTS_9 = 9;
15. public static final int POINTS_10 = 10;
16. public static final int POINTS_J = 11;
17. public static final int POINTS_Q = 12;
18. public static final int POINTS_K = 13;
19. //牌的花色常量数组
20. public static final int[] SUITS =
21. { SUIT_CLUB, SUIT_DIAMOND, SUIT_DIAMOND,SUIT_SPADE };
22. //牌的花色名字数组
23. public static String[] SUIT_NAMES =
24. { "梅花", "方块", "红桃", "黑桃" };
25. //牌的点数名字数组
26. public static String[] POINTS_NAMES =
27. { "", "A", "2", "3", "4", "5", "6",
28. "7", "8", "9", "10", "J", "Q", "K" };
29. //牌的点数常量数组
30. public static final int[] POINTS =
31. { POINTS_A, POINTS_2, POINTS_3,POINTS_4,
32. POINTS_5, POINTS_6, POINTS_7, POINTS_8, POINTS_9,
33. POINTS_10, POINTS_J, POINTS_Q, POINTS_K };
01. private int suit;//牌的花色
02. private int points;//表示牌是什么
03. private boolean selected = false;//是否是选中状态,默认为不选中
04. private boolean face = false;//牌是翻开的还是扣着的,默认为扣着的
01. public Card(int suit, int points) {
02. super();
03. this.suit = suit;
04. this.points = points;
05. }
在Card类中添加equals方法:
在Card类中添加hashCode方法:
在Card类中添加toString方法:
Card类完整代码如下:
01. @Override
02. public boolean equals(Object obj) {
03. if (this == obj)
04. return true;
05. if (obj == null)
06. return false;
07. if (obj instanceof Card) {
08. Card card = (Card) obj;
09. return suit == card.suit && points == card.points;
10. } else {
11. return false;
12. }
13. }
01. @Override
02. public int hashCode() {
03. final int prime = 31;
04. int result = 1;
05. result = prime * result + points;
06. result = prime * result + suit;
07. return result;
08. }
01. @Override
02. public String toString() {
03. return SUIT_NAMES[suit] + POINTS_NAMES[points];
04. }
剩余59页未读,继续阅读
资源评论
java界的小趴菜
- 粉丝: 27
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功