-
前言
一、知识点
二、使用步骤
2.完整代码
感谢您的阅读,不足之处欢迎指正
前言
Java实现模拟斗地主洗牌发牌 *** 作,留下三张底牌,对发到手的纸牌排序。
一、知识点主要使用HashMap 集合和ArrayList集合及相关方法
二、使用步骤1)封装一副牌:使用Map集合,以数字(0~53)为键,纸牌牌面数字(大王、小王、2、A、K、Q、J、10、9...)为值,存储到Map集合中。存储完毕后,数字由小到大的顺序对应的也就是纸牌从大到小的排序。
Mappoker = new HashMap<>();
2)提取键作为编号,存储到ArrayList集合中。
ArrayListindexList = new ArrayList<>(poker.keySet());
3)洗牌:打乱编号顺序。
Collections.shuffle(indexList);
4)使用ArrayList集合定义三位玩家和底牌。
Listp1 = new ArrayList<>(); List p2 = new ArrayList<>(); List p3 = new ArrayList<>(); List dipai = new ArrayList<>();
5)发牌:发编号,将打乱顺序的编号发到三位玩家手中,留三张底牌。
for (int i = 0; i < indexList.size(); i++) { int n = indexList.get(i); //处理底牌 if (i >= indexList.size() - 3) { dipai.add(n); } else { if (i % 3 == 0) { p1.add(n); } else if (i % 3 == 1) { p2.add(n); } else if (i % 3 == 2) { p3.add(n); } } }
6)对发到手的纸牌编号排序。
Collections.sort(p1); Collections.sort(p2); Collections.sort(p3); Collections.sort(dipai);
7)看牌:通过排序好的编号作为键,去查找对应的值,拼接到字符串中,这就是玩家手中最终排序好的牌。
2.完整代码public static String getPoker(Listlist, Map map) { StringBuilder bld = new StringBuilder("["); for (int i = 0; i < list.size(); i++) { //取出编号 Integer n = list.get(i); //用编号做键,到map中取值(牌面) String poker = map.get(n); //将牌面封装到StringBuilder bld.append(poker); if (i < list.size() - 1) { bld.append(", "); } else { bld.append("]"); } } return bld.toString(); }
代码如下
public class Poker {
public static void main(String[] args) {
//1.封装一副牌,以Integer为键,String为值,并存储到Map中
String[] colors = {"♥", "♠", "♦", "♣"};
String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
//定义map集合
Map poker = new HashMap<>();
int index = 0;
//存储大小王到集合中
poker.put(index++, "大王");
poker.put(index++, "小王");
//存储纸牌到集合中(除大小王)
//使用增强for(嵌套),外层纸牌点数,内层纸牌花色
for (String n : numbers) {//"2"
for (String c : colors) {//"♥", "♠", "♦", "♣"
poker.put(index++, c + n);
}
}
//2.提取编号,并转为List集合
ArrayList indexList = new ArrayList<>(poker.keySet());
//3.洗牌(洗编号:key)
Collections.shuffle(indexList);
//定义三名玩家和底牌 集合
List p1 = new ArrayList<>();
List p2 = new ArrayList<>();
List p3 = new ArrayList<>();
List dipai = new ArrayList<>();
//4.发牌(发编号:key)
for (int i = 0; i < indexList.size(); i++) {
int n = indexList.get(i);
//处理底牌
if (i >= indexList.size() - 3) {
dipai.add(n);
} else {
if (i % 3 == 0) {
p1.add(n);
} else if (i % 3 == 1) {
p2.add(n);
} else if (i % 3 == 2) {
p3.add(n);
}
}
}
//对发到手的纸牌排序(根据key排序)
Collections.sort(p1);
Collections.sort(p2);
Collections.sort(p3);
Collections.sort(dipai);
//5.看牌
System.out.println("刘备:" + getPoker(p1, poker));
System.out.println("关羽:" + getPoker(p2, poker));
System.out.println("张飞:" + getPoker(p3, poker));
System.out.println("底牌:" + getPoker(dipai, poker));
}
//定义一个看牌方法,通过排序好的编号作为键,去查找对应的值,拼接到字符串中并返回
public static String getPoker(List list, Map map) {
StringBuilder bld = new StringBuilder("[");
for (int i = 0; i < list.size(); i++) {
//取出编号
Integer n = list.get(i);
//用编号做键,到map中取值(牌面)
String poker = map.get(n);
//将牌面封装到StringBuilder
bld.append(poker);
if (i < list.size() - 1) {
bld.append(", ");
} else {
bld.append("]");
}
}
return bld.toString();
}
}
感谢您的阅读,不足之处欢迎指正
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)