简单斗地主的实现
- 需求:通过程序实现斗地主过程中的洗牌,发牌和看牌。
- 要求:对每个人的牌进行排序
- 思路:
- 创建HashMap,键是编号,值是牌
- 创建ArrayList,存储扑克牌的编号
- 创建花色数组和点数数组
- 从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号
- 洗牌,使用collections集合中shuffle()方法
- 发牌,为了保证顺序,使用TreeSet集合接收
- 定义方法看牌,遍历TreeSet集合,在HashMap中找到对应的牌
- 调用看牌方法
源代码
package Collection.demo07;
import java.util.*;
public class PokerDemo {
public static void main(String[] args) {
//创建HashMap,键是编号,值是牌
HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
//创建ArrayList,用来存放扑克牌
ArrayList<String> poker = new ArrayList<String>();
//创建ArrayList,用来存放牌的编号
ArrayList<Integer> totalNumber = new ArrayList<Integer>();
//创建花色数组和点数数组
String[] colors = {"♥", "♦", "♣", "♠"};
String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A","2"};
//添加进扑克牌集合
for (String n : numbers) {
for (String c : colors) {
poker.add(c + n);
}
}
poker.add("joker");//小王
poker.add("JOKER");//大王
//将扑克牌添加进HashMap集合,并为每一张牌添加一个编号
for (int i = 0; i < 54; i++) {
hashMap.put(i, poker.get(i));
totalNumber.add(i);
}
//洗牌,将牌的编号打乱,使用 Collections.shuffle()方法实现
Collections.shuffle(totalNumber);
//创建三个玩家集合以及一个底牌集合
TreeSet<Integer> play1 = new TreeSet<Integer>();
TreeSet<Integer> play2 = new TreeSet<Integer>();
TreeSet<Integer> play3 = new TreeSet<Integer>();
TreeSet<Integer> landlord = new TreeSet<Integer>();
//发牌,将打乱的编号依次发给每个人
for (int i = 0; i < 54; i++) {
if (i >= 51) {
landlord.add(totalNumber.get(i));
} else if (i % 3 == 0) {
play1.add(totalNumber.get(i));
} else if (i % 3 == 1) {
play2.add(totalNumber.get(i));
} else if (i % 3 == 2) {
play3.add(totalNumber.get(i));
}
}
//调用看牌方法
lookCard("玩家一", play1, hashMap);
lookCard("玩家二", play2, hashMap);
lookCard("玩家三", play3, hashMap);
lookCard("底牌", landlord, hashMap);
}
//定义看牌方法,有三个参数,分别是玩家的名字,玩家的手牌以及提供编号和扑克牌对应关系的HashMap集合
public static void lookCard(String name, TreeSet<Integer> ts, HashMap<Integer, String> hm) {
System.out.print(name + "的牌是:");
for (Integer i : ts) {//遍历玩家的手牌
String s = hm.get(i);//获取与编号相对应的扑克牌
System.out.print(s + " ");
}
System.out.println();//换行
}
}
运行结果
第一次运行:
第二次运行:
第三次运行: