Hello,大家好!我是Cx_330
本篇博文该大家演示一下如何自己实现一个简单的斗地主
游戏,包括普通版和升级版两个版本,升级版本是在名牌的
时候向我们展示的是已经排好序的牌
小游戏描述
- 自己模拟实现一个斗地主的创建牌,洗牌,发牌,名牌阶段
游戏目的
- 综合考察我们对于集合的灵活应用与实践
实现思路
-
通过Collections类对集合进行相关操作
-
根据HashMap特性用来存放牌的序号和牌的值
-
通过ArrayList存放牌的序号
-
通过TreeSet接受牌的序号并进行自动的排序存储
普通版斗地主源码实现
普通斗地主的简单实现[建牌,洗牌,发牌,名牌]
public class Test {
public static void main(String[] args) {
//创建54张牌
ArrayList<String> poker = new ArrayList<String>();
String[] colors={"♦","♠","♥","♣"};
String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
for(String col:colors){
for (String num:numbers){
poker.add(col+num);
}
}
poker.add("🐱");//小王
poker.add("🦁");//大王
//洗牌
Collections.shuffle(poker);
//发牌
ArrayList<String> player1 = new ArrayList<>();
ArrayList<String> player2 = new ArrayList<>();
ArrayList<String> player3 = new ArrayList<>();
ArrayList<String> dipoker = new ArrayList<>();
for (int i = 0; i < poker.size(); i++) {
String s=poker.get(i);
if(i>=poker.size()-3){
dipoker.add(s);
}else if(i%3==0){
player1.add(s);
} else if (i%3==1) {
player2.add(s);
}else {
player3.add(s);
}
}
//名牌
show("小白",player1);
show("小娥",player2);
show("小梅",player3);
show("底牌",dipoker);
}
public static void show(String name,ArrayList<String> arrayList){
System.out.print(name+"的牌:");
for (String s:arrayList){
System.out.print(s+" ");
}
System.out.println();
}
}
升级版斗地主源码实现
public class Test {
public static void main(String[] args) {
//创建HashMap集合 键:序号 值:牌
HashMap<Integer, String> poker = new HashMap<Integer, String>();
//创建ArrayList存放HashMap中的键
ArrayList<Integer> arrayList = new ArrayList<Integer>();
//创建花色 牌的字符串数组
String[] colors={"♦","♠","♥","♣"};
String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//将牌放入HashMap中 ---增强型嵌套for循环
int index=0;//通过一个索引 存放序号[0~51]
//注意:存的时候也有个细节,要先遍历数字,在遍历花色,这样才能保证数字的升序
for(String col:numbers){
for (String num:colors){
poker.put(index,col+num);
arrayList.add(index);
index++;
}
}
//不要忘记还有 🦁 🐱
poker.put(index,"🐱");
arrayList.add(index);
index++;
poker.put(index,"🦁");
arrayList.add(index);
//洗牌:打乱arrayList中索引的顺序
Collections.shuffle(arrayList);
//发牌[这个阶段已经做好了排序的实现了TreeSet的特点]
//用TreeSet接受,存储的时候可以自动排序
TreeSet<Integer> player1 = new TreeSet<>();
TreeSet<Integer> player2 = new TreeSet<>();
TreeSet<Integer> player3 = new TreeSet<>();
TreeSet<Integer> dipoker = new TreeSet<>();
for (int i = 0; i < arrayList.size(); i++) {
Integer x=arrayList.get(i);
if(i>=arrayList.size()-3){
dipoker.add(x);
} else if (i%3==0) {
player1.add(x);
} else if (i%3==1) {
player2.add(x);
}else {
player3.add(x);
}
}
//名牌
show("张三",player1,poker);
show("李四",player2,poker);
show("王五",player3,poker);
show("底牌",dipoker,poker);
}
public static void show(String name,TreeSet<Integer>treeSet,HashMap<Integer,String>hm){
System.out.print(name+"的牌是 :");
for (Integer i:treeSet){
String s=hm.get(i);
System.out.print(s+" ");
}
System.out.println();
}
}
结果演示
小结
- 我通过自己实现这个小游戏之后,对于集合的相关操作以及对每个集合特性的了解更加的深入了