利用集合和String常用方法实现扑克牌生成、排序

需求:

使用面向对象完成扑克牌的生成,分别对应3位玩家,每人17张牌,底牌3张。最后再将手牌以点数、花色"♠,♥,♣,♦"降序排列

思路:

涉及到面向对象我们需要创建牌堆作为一个对象,拥有花色、点数俩个属性。

1.生成牌堆

定义花色和点数为一个数组,.split(",")是以逗号分开再放进数组,和一个一个个写"3","4","5"同样的。在上方定义poker集合,双for循环new Card的同时分别把花色和点数赋给集合当中,循环条件长度可以互换,这里效果是:♣2 , ♦A , ♥A ,但注意放入集合时,需要对应放入i 和 j,否则会出现下标越界,由于大小王没有花色,需要单独在添加完其他排后添加

2.洗牌

调用Collections的shuffle();方法,传入集合参数,他会自动打乱集合里的数据,不会产生新的集合,打印洗好牌之后的牌,这里在Card对象里重写了toString方法,只打ians

3.发牌

使用poker.subList(从哪个下标开始截取;结束),遵循前闭后开,0~17,只取0~16,得到每个人的牌,底牌为3张

4.排序

由于有3副牌堆,加上底牌,我们进行排序就需要定义一个方法,传入每个人的手牌集合。在这之前,我们需要考虑用什么来进行排序,因为扑克牌的特殊性,3-10,且2比这些牌都大。我们需要使用到一个下标,所以在Card类中定义了点数的下标和花色的下标,就

* Game 类 * 功能:整个游戏:开始游戏 -> 初始牌 -> 洗牌 -> 发牌 -> 排序 -> 比较大小 -> 游戏结果 * 游戏说明: * 1.创建一副扑克牌,不考虑大小王 * 2.创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌集合 * 3.洗牌,将之前创建的扑克牌顺序打乱 * 4.发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张 * 5.开始游戏,比大小,大小相同比花色 * * PockerCard 类 * 功能:扑克牌的核心类 包括创建角色、创建牌、显示牌、洗牌、比较牌、排序牌等 * 属性:List cards 整幅扑克牌集合 、 People[] peoples 角色 * 方法: public PockerCard() //无参构造函数: 创建牌的集合、创建两个角色对象 * public void initializeCard() //创建整幅扑克牌 * public void showCard() //显示单支牌的花色点数 * public void refreshCard() //洗牌 从第一支牌开始从所有牌中随机取一只与之交换 * public void addPeopleInfo() //添加玩家的基本信息 * public void dealCard() //发牌 从开始分别给A B发牌 每人两支 * public void showPeopleCard() //显示两个角色自己获得的牌 * public void sortCard() //将每个角色自己的牌按从小到大排序 * public void comparePeopleCard() //比较角色的牌 * * SingleCard类 实现Comparable接口 * 功能:产生单支牌 * 属性:ID、color、keyID数组、keyColor数组 * 方法:public SingleCard(){} //无参构造函数 * public SingleCard(String ID,String color) //有参构造函数 * @Override public int compareTo(SingleCard o) //比较当前牌与SingleCard o的牌的大小 * * People类 * 功能:产生一个角色 * 属性:ID、Name、、存储牌的List集合。 * 方法: public People() //初始化存储牌的List集合; *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值