黑马程序员_Java实现斗地主发牌
来源:互联网 发布:saas软件开发 编辑:程序博客网 时间:2024/05/21 22:21
-------Android培训、java培训 、期待与您交流!---------
斗地主是人们经常上网玩的游戏,玩这个游戏通常需要先给每个玩家发牌,并且要留下三张扑克牌作为底牌。那么程序是如何实现发牌的呢?
思想:
实现发牌的话首先需要定义两个数组,一个数组存储花色,一个数组存储牌的大小,一个HashMap集合对象用于存储所有的扑克牌;
HashMap<Integer,String> hm = new HashMap<Integer,String>(); //定义HashMap变量用于存储每张排的编号以及牌型 String[] colors = {"♤","♥","♣","♢"}; //定义数组存储排的花色 String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//定义数组存储牌值
其次是 扑克牌生成之后需要做的是再定义一个ArrayList集合对象,用于存储每张牌的编号并将编号与生成的牌装入到HashMap集合对象中,在发牌时实际上发的是编号,再通过编号获取对应的扑克牌;
ArrayList<Integer> array = new ArrayList<Integer>();//定义ArrayList变量存储排的编号 for(String number : numbers){ //遍历排值数组 for(String color : colors){ //遍历花色 hm.put(index, color.concat(number));//将花色与牌值拼接,并将编号与拼接后的结果存储到hm中 array.add(index); //将编号存储到array中 index++; } } /* * 将小王和大王存储到hm中 */ hm.put(index, "小王"); array.add(index); index++; hm.put(index, "大王"); array.add(index);
再次是定义四个TreeMap集合的对象存储三个玩家的牌以及底牌,使用TreeMap是因为TreeMap是实现了排序;
TreeSet<Integer> playerOne = new TreeSet<Integer>();TreeSet<Integer> PlayerTwo = new TreeSet<Integer>();TreeSet<Integer> playerThree = new TreeSet<Integer>(); TreeSet<Integer> dipai = new TreeSet<Integer>();
接着就是发牌,当存储好编号时,打乱ArrayList集合对象存储的编号,再遍历ArrayList集合获得,在遍历的时候,用编号的下标去除3取余,余数为0,就将牌发给玩家1,余数为1就发给玩家2,余数为3就将牌发给玩家3,当下标超过51的时候就将牌作为底牌;
Collections.shuffle(array); //调用Collections集合的shuffle()方法,将array中存储的编号进行随机的置换,即打乱顺序 //遍历编号的集合,实现发牌 for(int x = 0; x < array.size(); x++){ if(x >= array.size() - 3){ dipai.add(array.get(x)); }else if( x % 3 == 0){ playerOne.add(array.get(x)); }else if(x % 3 == 1){ PlayerTwo.add(array.get(x)); }else if(x % 3 == 2){ playerThree.add(array.get(x)); } }
最后就是看牌,遍历每个玩家的TreeMap对象集合以及底牌的集合。
定义一个看牌的方法,因为每个玩家都需要看牌,所以为了提高代码的复用性,所以单独定义一个看牌的方法
/** * 遍历每个玩家的牌以及底牌 * @param name * @param ts * @param hm */public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){System.out.print(name+":\t"); //打印玩家名称for(Integer key : ts){ //遍历玩家TreeSet集合,获得玩家的牌的编号String value = hm.get(key);//根据玩家牌编号获取具体的牌值System.out.print(value+" ");//打印}System.out.println();}}
以上就是分析的过程和主要代码的实现,这个发牌的代码主要就是利用了java中的集合去实现,HashMap是基于哈希表的,无序且唯一,TreeMap则是一种自平衡的红黑树,实现了排序的功能,而ArrayList是基于数组的,有序,可重复,效率高,线程不安全。另外就是利用了Collections类的方法。
完整代码:
package cn.itheima03;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.TreeSet;public class PokerDemo {public static void main(String[] args) {HashMap<Integer,String> hm = new HashMap<Integer,String>(); //定义HashMap变量用于存储每张排的编号以及牌型ArrayList<Integer> array = new ArrayList<Integer>();//定义ArrayList变量存储排的编号String[] colors = {"♤","♥","♣","♢"}; //定义数组存储排的花色String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//定义数组存储牌值int index = 0; //定义编号for(String number : numbers){ //遍历排值数组for(String color : colors){ //遍历花色hm.put(index, color.concat(number));//将花色与牌值拼接,并将编号与拼接后的结果存储到hm中array.add(index); //将编号存储到array中index++;}}/* * 将小王和大王存储到hm中 */hm.put(index, "小王"); array.add(index);index++;hm.put(index, "大王");array.add(index);Collections.shuffle(array); //调用Collections集合的shuffle()方法,将array中存储的编号进行随机的置换,即打乱顺序/* * 定义四个TreeSet集合的变量用于存储底牌编号以及三个玩家的牌的编号 * 采用TreeSet集合是因为TreeSet集合可以实现自然排序 */TreeSet<Integer> playerOne = new TreeSet<Integer>();TreeSet<Integer> PlayerTwo = new TreeSet<Integer>();TreeSet<Integer> playerThree = new TreeSet<Integer>(); TreeSet<Integer> dipai = new TreeSet<Integer>();//遍历编号的集合,实现发牌for(int x = 0; x < array.size(); x++){if(x >= array.size() - 3){dipai.add(array.get(x));}else if( x % 3 == 0){playerOne.add(array.get(x));}else if(x % 3 == 1){PlayerTwo.add(array.get(x));}else if(x % 3 == 2){playerThree.add(array.get(x));}}lookPoker("底牌",dipai,hm);lookPoker("huangshen",playerOne,hm);lookPoker("xiequn",PlayerTwo,hm);lookPoker("diannao",playerThree,hm);}/** * 遍历每个玩家的牌以及底牌 * @param name * @param ts * @param hm */public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){System.out.print(name+":\t"); //打印玩家名称for(Integer key : ts){ //遍历玩家TreeSet集合,获得玩家的牌的编号String value = hm.get(key);//根据玩家牌编号获取具体的牌值System.out.print(value+" ");//打印}System.out.println();}}
- 黑马程序员_Java实现斗地主发牌
- 实现斗地主发牌(java)
- 黑马程序员 斗地主洗牌代码实现
- python 贪心算法实现 斗地主发牌
- 黑马程序员——用java模拟斗地主洗牌和发牌
- 斗地主发牌算法
- 斗地主:洗牌发牌
- 斗地主发牌
- 1.cocos2d-x斗地主实现-发牌
- java版斗地主,一副牌实现发牌过程
- android网络斗地主如何实现给各个玩家发牌?
- Java实现--模拟斗地主的洗牌和发牌
- 模拟斗地主洗牌和发牌(集合实现)
- java用ArrayList集合来实现斗地主发牌案例
- 斗地主 发牌核心 代码
- 斗地主发牌小程序
- 斗地主洗牌+发牌+排序
- Java模拟斗地主发牌
- C语言函数设计的一般原则和技巧
- Windows Phone 8.1 开发实例 网络编程 天气预报
- 在windows下安装python包管理器pip及使用
- spring各个版本源码文档下载地址
- 最小公倍数
- 黑马程序员_Java实现斗地主发牌
- 没有养护就没有好的排名:记录今日的失落
- http协议之状态码
- Android应用测试与调试实战第8章:使用selenium测试HTML5浏览器应用
- Maven学习笔记(五)设置HTTP代理
- HTTP协议之应用
- Opencv-rng随机数生成的使用
- ORA-03113: end-of-file on communication channel 报错解决方法之一
- 文章标题