Java高级应用之斗地主游戏

网友投稿 209 2022-10-23


Java高级应用之斗地主游戏

斗地主综合案例,供大家参考,具体内容如下

运用Hashttp://hMap、ArrayList、List类实现斗地主综合案例,模拟斗地主游戏的随机发牌,并按照牌的大小和花色进行排列。

斗地主玩家每轮都有三个玩家,运用Collections类中的shuffle()方法打乱一整幅扑克牌,利用取余原理将凑乱的牌发放给三个玩家,整副牌发完后的最后三张永一个ArrayList存储作为底牌。具体代码实现如下:

import java.util.ArrayList;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;

/**

*斗地主综合案例:有序版本

*1.准备牌

*2.洗牌

*3.发牌

*4.排序

*5.看牌

**/

public class DouDizhu02 {

public static void main(String[] args) {

//1。准备牌

//创建一个Map集合,存储牌的索引和组装好的牌

HashMap poker = new HashMap<>();

//List集合,存储牌的索引

ArrayList pokerIndex = new ArrayList<>();

//定义两个集合,存储花色和序号

List colors = List.of("♥", "♦", "♠", "♣");

List numbers = List.of("2", http://"A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4","3");

//把大王和小王存储到集合中

int index = 0;

poker.put(index, "大王");

pokerIndex.add(index);

PhTSHyew index++;

poker.put(index, "小王");

pokerIndex.add(index);

index++;

//循环嵌套52张牌

for(String number: numbers){

for(String color : colors){

poker.put(index, color + number);

pokerIndex.add(index);

index++;

}

}

// System.out.println(poker);

// System.out.println(pokerIndex);

/*

2.洗牌

使用Collections中的方法shuffle(list)

*/

Collections.shuffle(pokerIndex);

/*

3.发牌

*/

//定义四个集合,存储玩家牌的索引,和底牌的索引

ArrayList player01 = new ArrayList<>();

ArrayList player02 = new ArrayList<>();

ArrayList player03 = new ArrayList<>();

ArrayList dipai = new ArrayList<>();

//遍历存储牌索引的list集合,获取每一个牌的索引

for (int i = 0; i < pokerIndex.size(); i++) {

Integer in = pokerIndex.get(i);

if(in >= 51){

dipai.add(in);

}else if(i % 3 == 0){

player01.add(in);

}else if(i % 3 == 1){

player02.add(in);

}else if(i % 3 == 2){

player03.add(in);

}

}

/*

4.排序

使用Collections中的方法sort(List)

*/

Collections.sort(player01);

Collections.sort(player02);

Collections.sort(player03);

Collections.sort(dipai);

/*

5.看牌

调用看牌的方法

*/

lookPoker("刘德华", poker, player01);

lookPoker("周星驰", poker, player02);

lookPoker("周润发", poker, player03);

lookPoker("底牌", poker, dipai);

}

/*

定义一个看牌的方法,提高代码的复用性

参数:

String name:玩家名称

HashMap poker:存储牌的poker集合

ArrayList list:存储玩家和底牌的list集合

查表法:

遍历玩家或者底牌集合,获取牌的索引

使用牌的索引,去Map集合中找到对应的牌

*/

public static void lookPoker(String name, HashMap poker, ArrayList list){

//输出玩家名称,不换行

System.out.print(name + " :");

for(int key : list){

String value = poker.get(key);

System.out.print(value + " ");

}

System.out.println();

}

}

运行结果如下

牌为随机打乱,每次运行结果都不一样。

刘德华 :♥2 ♦2 ♠A ♦K ♠Q ♣Q ♥9 ♣9 ♥8 ♣8 ♦7 ♠7 ♣7 ♦6 ♣6 ♥5 ♠5 ♥3

周星驰 :♠2 ♥A ♦A ♣K ♦Q ♥J ♦J ♣J ♥10 ♦10 ♠10 ♦9 ♠9 ♦8 ♥7 ♠4 ♣4

周润发 :大王 小王 ♣2 ♣A ♥K ♠K ♥Q ♠J ♣10 ♠8 ♥6 ♠6 ♦5 ♣5 ♥4 ♦4

底牌 :♦3 ♠3 ♣3


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何理解国标GB28181视频平台EasyGBS调用直播接口的serial参数?
下一篇:如何解决GB/T28181视频平台设备在线无法播放视频流?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~