您的位置:首页 > 编程语言 > Java开发

Java模拟实现斗地主功能

2019-07-22 22:33 633 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/MAX_YanBangbang/article/details/96905012

需要完成的功能

这里只完成创建扑克,发牌,看牌的功能,最终的实现斗地主功能还需进一步完善。

创建扑克

发牌的前提是有牌可发,所以我们要先创建一副牌,这里我们用的是HashMap集合来装扑克的花色以及点数;这样,我们就可以完成扑克的创建步骤。

String[] colos = {"♥", "♠", "♦", "♣"};
String[] nums = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K","A","2"};
HashMap<Integer, String> hashMappokerBox = new HashMap<>();
int index=0;
for (String num : nums) {
for (String colo : colos) {
String concat = colo.concat(num);
hashMappokerBox.put(index, concat);
index++;
}
}
//手动添加大小王
hashMappokerBox.put(index,"☽");
index++;
hashMappokerBox.put(index,"☀");

洗牌

为了完成洗牌这一步骤,我们需要将HashMap中的键放在一个ArrayList集合中,这样通过洗键就将扑克洗好了

ArrayList<Integer> pokerBox = new ArrayList<>();
Set<Map.Entry<Integer, String>> entries = hashMappokerBox.entrySet();
for (Map.Entry<Integer, String> entry : entries) {
Integer key = entry.getKey();
pokerBox.add(key);
}
//洗牌(3遍)
Collections.shuffle(pokerBox);//使用默认随机源对指定列表进行置换,打乱顺序
Collections.shuffle(pokerBox);
Collections.shuffle(pokerBox);

发牌

发到手中的扑克,我们希望是有序的,所以我们再将键集传给TreeSet集合中,利用TreeSet自动排序功能得到有序的扑克。

TreeSet<Integer> pokerPlayer1Index = new TreeSet<>();
TreeSet<Integer> pokerPlayer2Index = new TreeSet<>();
TreeSet<Integer> pokerPlayer3Index = new TreeSet<>();
TreeSet<Integer> lastPokerIndex = new TreeSet<>();

for (int i = 0; i < pokerBox.size(); i++) {
if(pokerBox.size()-i<=3){  //底牌对应的键
lastPokerIndex.add(pokerBox.get(i));
}else if (i % 3 == 0) {    //玩家一的牌对应的键
pokerPlayer1Index.add(pokerBox.get(i));
} else if (i % 3 == 1) {   //玩家二的牌对应的键
pokerPlayer2Index.add(pokerBox.get(i));
} else {                   //玩家二的牌对应的键
pokerPlayer3Index.add(pokerBox.get(i));
}
}

看牌

通过TreeSet中的值,也就是HashMap中的键集,可以得到对应的值

//看牌
{
lookpoker(hashMappokerBox, pokerPlayer1Index,"洪世贤");
lookpoker(hashMappokerBox, pokerPlayer2Index,"艾丽");
lookpoker(hashMappokerBox, pokerPlayer3Index,"品如");
lookpoker(hashMappokerBox, lastPokerIndex,"地主多");
}

private static void lookpoker(HashMap<Integer, String> hashMappokerBox, TreeSet<Integer> pokerPlayer1Index, String play1) {
System.out.println(play1+"的牌");
for (Integer index : pokerPlayer1Index) {
String s = hashMappokerBox.get(index);
System.out.print(s+"\t");
}
System.out.println();
}

玩家到手的扑克

洪世贤的牌
♠3	♥6	♣6	♥7	♠7	♦8	♠9	♦9	♣9	♥10	♦J	♠Q	♦Q	♦K	♥A	♦A	♣2
艾丽的牌
♦3	♥4	♦4	♠5	♦5	♦7	♠8	♥9	♠10	♣10	♥J	♣J	♥Q	♥K	♣A	♥2	☽
品如的牌
♥3	♣3	♠4	♣4	♣5	♠6	♦6	♣7	♣8	♦10	♠J	♣Q	♠K	♣K	♠A	♦2	☀
地主多的牌
♥5	♥8	♠2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: