学习Java两个多月了,用集合的知识写了一个斗地主的代码,分享给大家,有不对的地方请指正。
要求:模拟斗地主的规则,用代码实现洗牌和发牌。
代码:
package z3;
//导包
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class text3 {
public static void main(String[] args) {
//用hashMap将牌的序号与牌花的花色和数字联系起来,序号是每个牌的标识
HashMap<Integer, String> hm = new HashMap<>();
//定义一个ArrayList集合,用与储存HashMap的键(序号),往后的洗牌和看牌都是用此集合的数据进行操作
ArrayList<Integer> array = new ArrayList<>();
String[] h = {"♦", "♣", "♥", "♠"};
String[] s = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "q", "k", "A", "2"};
int i = 0;
//遍历两个数组,将牌的序号与牌花的花色和数字储存在 HashMap集合中,牌的序号储存在ArrayList集合中
//注意数字的for循环在外面
for (String string : s) {
for (String s1 : h) {
hm.put(i, string + s1);
array.add(i);
i++;
}
}
//单独储存大小王
hm.put(i, "小王");
array.add(i);
i++;
hm.put(i, "大王");
array.add(i);
//因为发到手上的牌是按顺序的,用TreeSet集合储存每个人手上牌的序号,就可以实现牌的顺序发放
//x1,x2,x3为用户,x为底牌
TreeSet<Integer> x1 = new TreeSet<>();
TreeSet<Integer> x2 = new TreeSet<>();
TreeSet<Integer> x3 = new TreeSet<>();
TreeSet<Integer> x = new TreeSet<>();
//随机将ArrayList的序号发到每个人的TreeSet集合中,实现发牌
Collections.shuffle(array);
for (int z = 0; z < array.size(); z++) {
int d = array.get(z);
if (z >= array.size() - 3) {
x.add(d);
} else if (z % 3 == 0) {
x1.add(d);
} else if (z % 3 == 1) {
x2.add(d);
} else if (z % 3 == 2) {
x3.add(d);
} else System.out.println("你作弊!!!!!!");
}
//调用方法实现看牌
k("x1", x1, hm);
k("x2", x2, hm);
k("x3", x3, hm);
k("底牌", x, hm);
}
//此方法用于输出每个人手上的牌,用HashMap集合将每个人HashMap集合的序号映射出对应的值,也就是牌的花色和数字
public static void k(String name, TreeSet<Integer> x, HashMap<Integer, String> hm) {
System.out.print(name + "的牌是:");
//遍历TreeSet,调用HashMap的get()方法返回牌的花色和数字并输出
for (Integer i : x) {
System.out.print(hm.get(i) + " ");
}
System.out.println();
}
}
请看完点赞关注,谢谢你们!!