一、案例介绍
学习了Java的集合之后,就做了一个斗地主的小demo ,主要的功能和我们玩的斗地主差不多。完成简单的发牌洗牌操作,至于怎么打,就看个人的意思了。
具体规则
使用54张牌,打乱顺序,三个玩家同时参与游戏,三人交替摸牌,每人17张,最后三张留作底牌。
二、案例分析
根据案例规则,和我们的日常经验,我们可以将需求分为以下几步:
- 准备54张扑克牌
(1) 总的扑克牌可以看成一个ArrayList ,里面的每一个字符串视为一张牌
(2) 每张牌由花色和数字组成,我们可以使用花色集合和数字集合嵌套迭代完成每张牌的组装
(3) 牌由Collections类的shuffle方法进行随机排序 - 发牌
将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌 - 看牌
打印输出每个人的牌
三、开搞
- 准备扑克
//构建扑克
public static Collection<String> buildPoker(){
ArrayList<String> pokerList = new ArrayList<>(); //总牌数
ArrayList<String> colors = new ArrayList<>(); //花色
ArrayList<String> numbers = new ArrayList<>(); //数字
//添加花色集合
colors.add("♣");
colors.add("♦");
colors.add("♥");
colors.add("♠");
//添加数字集合
for (int i = 2; i <= 10; i++) {
numbers.add(i+"");
}
numbers.add("J");
numbers.add("Q");
numbers.add("K");
numbers.add("A");
//组合成完整扑克
for (String c:colors){
for (String n:numbers){
pokerList.add(c+n);
}
}
pokerList.add("♚");
pokerList.add("♔");
return pokerList;
}
- 发牌
//发牌
public static void sendPoker(Collection<String> pokerList,Collection<String> player1,Collection<String> player2,Collection<String> player3,Collection<String> dipai){
ArrayList<String> poker=(ArrayList<String>) pokerList;
int size = poker.size();
for (int i=0;i<size;i++){
if (i>=51){
dipai.add(poker.get(i));
}else if (i % 3 == 0){
player1.add(poker.get(i));
}else if (i % 3 ==1){
player2.add(poker.get(i));
}else {
player3.add(poker.get(i));
}
}
}
- 看牌
//看牌
public static void show(Collection<String> coll){
Iterator<String> it = coll.iterator();
while (it.hasNext()){
System.out.print(it.next()+"\t");
}
}
- 测试
public static void main(String[] args) {
Collection<String> poker = buildPoker();
Collections.shuffle((List<String>)poker); //随机打乱
//创建对象和底牌
Collection<String> player1 = new ArrayList<>();
Collection<String> player2 = new ArrayList<>();
Collection<String> player3 = new ArrayList<>();
Collection<String> dipai = new ArrayList<>();
//进行发牌操作
sendPoker(poker,player1,player2,player3,dipai);
//看牌
show(player1);
System.out.println("");
show(player2);
System.out.println("");
show(player3);
System.out.println("");
show(dipai);
}
四、效果显示
五、总结
其实做这个项目就是将学过的集合方法做了一个简单的小汇总和练习。这里面呢,较为有趣的就是利用发牌的机制,如何依次有序的将牌发给每个人。
我在这里使用的简单粗暴地方法,直接将 i 对3 取模,将得到的结果分别给三个人,这样就实现了有序分配。而且四个人、五个人等都可以用这种方式来实现。
其实还可以运用更为简单的一致哈希值来处理……
转载:https://blog.csdn.net/Kings_boy/article/details/108130536
查看评论