生活中,我们经常和朋友一起玩斗地主纸牌游戏,大家都知道斗地主有54张牌,大王和小王还有四种花色的A~k,那么斗地主中的发牌和洗牌用java是怎么完成的呢?
案列分析:
1.先创建两个String数组存储牌的点数和花色
2.斗地主中有洗牌这一功能,那么我们就可以用Collections这个集合工具类中的shuffle()这个方法,所以创建一个ArrayList集合
3.创建hashmap来存储牌的序号和牌的内容
4.遍历上面的两个数组,将序号和牌加入hs中,并将序号加入lists中
5.将大王和小王加入hs中,序号加入lists中
6.洗牌,洗牌的时候洗索引
7.发牌。创建TreeSet集合来存储各自的牌的序号,使得牌有序
8.写一个看牌的方法
9.看牌
代码如下:
package com.edu;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.TreeSet;
public class Poker {
public static void main(String[] args) {
//1.先创建两个String数组存储牌的点数和花色
//点数
String []numbers={"3","4","5","6","7","8","9","10","J","O","k","A","2"};
String []colors={ "♥", "♠", "♣", "♦" };
//2.因为要洗牌所以用ArrayList集合存储牌的序号
ArrayList<Integer> lists = new ArrayList<Integer>();
//3.创建hashmap来存储牌的序号和牌的内容
HashMap<Integer, String> hs = new HashMap<Integer, String>();
//4.遍历上面的两个数组,将序号和牌加入hs中,并将序号加入lists中
int index=0;
for (String number : numbers) {
for (String color : colors) {
hs.put(index, color+number);
lists.add(index);
index++;
}
}
//5.将大王和小王加入hs中,序号加入lists中
lists.add(index);
hs.put(index, "大王");
index++;//序号加1
lists.add(index);
hs.put(index, "小王");
//6.洗牌,洗牌的时候洗索引
Collections.shuffle(lists);
//7.发牌。创建TreeSet集合来存储各自的牌的序号,使得牌有序
TreeSet<Integer> zhangsan = new TreeSet<Integer>();
TreeSet<Integer> lisi = new TreeSet<Integer>();
TreeSet<Integer> wangwu = new TreeSet<Integer>();
TreeSet<Integer> dipai = new TreeSet<Integer>();
//用for循环发牌
for (int i = 0; i < lists.size(); i++) {
if(i>=lists.size()-3){
dipai.add(lists.get(i));
}else if(i%3==0){
zhangsan.add(lists.get(i));
}else if(i%3==1){
lisi.add(lists.get(i));
}else if(i%3==2){
wangwu.add(lists.get(i));
}
}
lookpoker("张三", zhangsan, hs);
lookpoker("李四", lisi, hs);
lookpoker("王五", wangwu, hs);
lookpoker("底牌", dipai, hs);
}
//8.写一个看牌的方法
public static void lookpoker(String name,TreeSet<Integer> ts,HashMap<Integer, String> hs){
System.out.print(name+"的牌是: ");
for (Integer it : ts) {
System.out.print(hs.get(it)+" ");
}
System.out.println();
}
}
结果如下:
张三的牌是: ♠4 ♦6 ♥8 ♠8 ♥9 ♣9 ♠10 ♥O ♠O ♣O ♦O ♥k ♠k ♥A ♥2 ♣2 ♦2
李四的牌是: ♣3 ♦4 ♥5 ♠5 ♣5 ♣6 ♥7 ♣8 ♦8 ♠9 ♦9 ♥10 ♣10 ♥J ♣J ♣A ♠2
王五的牌是: ♥3 ♦3 ♥4 ♣4 ♦5 ♥6 ♠6 ♠7 ♣7 ♦7 ♦10 ♠J ♣k ♠A ♦A 大王 小王
底牌的牌是: ♠3 ♦J ♦k