Demo
package jihe;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
/**
* 斗地主
*/
public class Landlords {
public static void main(String[] args) {
method1();
System.out.println("------------------------------");
method2();
}
/**
* 斗地主
* 需求:
* 通过程序实现斗地主过程中的洗牌、发牌和看牌
* 思路:
* 1、创建牌盒,也就是定义一个集合对象
* 2、往牌盒装牌
* 3、洗牌,将牌中的顺序打乱 (用 Collections 的 shuffle 方法)
* 4、发牌,也就是遍历集合,给三个玩家发牌
* 5、看牌,输出三个玩家分配的牌
*/
public static void method1() {
//创建牌盒,也就是定义一个集合对象,用ArrayList集合实现
ArrayList<String> array = new ArrayList<>();
//往牌盒装牌
//先定义花色数组
String[] colors = {"♦", "♣", "♥", "♠"};
//定义牌面数组
String[] number = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
//拼接花色和牌面
for (String c : colors) {
for (String n : number) {
//往牌盒中装牌
array.add(c + n);
}
}
//再拼接上小王、大王
array.add("小王");
array.add("大王");
//洗牌 - 使用Collections
Collections.shuffle(array);
//创建三个玩家 和 三张底牌盒子
ArrayList<String> a = new ArrayList<String>();
ArrayList<String> b = new ArrayList<String>();
ArrayList<String> c = new ArrayList<String>();
ArrayList<String> div = new ArrayList<String>();
//发牌
for (int i = 0; i < array.size(); i++) {
//拿到每一张牌
String poker = array.get(i);
if (i >= array.size() - 3) {
//保留3张底牌
div.add(poker);
} else if (i % 3 == 0) {
//给第一个玩家发牌
a.add(poker);
} else if (i % 3 == 1) {
//给第二个玩家发牌
b.add(poker);
} else if (i % 3 == 2) {
//给第三个玩家发牌
c.add(poker);
}
}
//看牌
System.out.println("第一个人的牌是:" + a);
System.out.println("第二个人的牌是:" + b);
System.out.println("第三个人的牌是:" + c);
System.out.println("三张底牌是:" + div);
}
/**
* 需求:
* 通过程序实现斗地主过程中的洗牌、发牌和看牌
* 思路:
* 1、创建HashMap 键是编号,值是牌
* 2、创建ArrayList 存储编号
* 3、创建 花色和点数 数组
* 4、从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号
* 5、洗牌(洗的是编号,为了保证编号是排序的,创建TreeSet集合接收)
* 7、看牌(遍历TreeSet集合,获取编号,到HashMap中查找对应的牌)
*/
public static void method2() {
//创建HashMap 键是编号 值是牌
HashMap<Integer, String> hm = new HashMap<>();
//创建ArrayLIst 存储编号
ArrayList<Integer> array = new ArrayList<>();
//创建花色数组
String[] colors = {"♦", "♣", "♥", "♠"};
//定义牌面数组
String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
//从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号
int index = 0;
for (String n : number) {
for (String c : colors) {
hm.put(index, c + n);
array.add(index);
index++;
}
}
//大小王
hm.put(index, "小王");
array.add(index);
index++;
hm.put(index, "大王");
array.add(index);
//洗牌
Collections.shuffle(array);
//定义角色和保留三张
TreeSet<Integer> a = new TreeSet<>();
TreeSet<Integer> b = new TreeSet<>();
TreeSet<Integer> c = new TreeSet<>();
TreeSet<Integer> div = new TreeSet<>();
for (int i = 0; i < array.size(); i++) {
//拿到每一张牌
int x = array.get(i);
if (i >= array.size() - 3) {
//保留3张底牌
div.add(x);
} else if (i % 3 == 0) {
//给第一个玩家发牌
a.add(x);
} else if (i % 3 == 1) {
//给第二个玩家发牌
b.add(x);
} else if (i % 3 == 2) {
//给第三个玩家发牌
c.add(x);
}
}
//看牌
lookPoker("a", a, hm);
lookPoker("b", b, hm);
lookPoker("c", c, hm);
//底牌
System.out.print("底 牌 是:");
for (Integer dv : div) {
System.out.print(hm.get(dv) + " ");
}
}
public static void lookPoker(String name, TreeSet<Integer> ts, HashMap<Integer, String> hm) {
System.out.print(name + "的牌面是:");
for (Integer key : ts) {
String poker = hm.get(key);
System.out.print(poker + " ");
}
System.out.println();
}
}