黑马程序员_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();}}




       




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老公出轨了怎么办你会选择离婚吗 c盘和d盘换换了怎么办 晚上2点到3点醒怎么办 红米3s变砖了怎么办 6s锁屏密码忘了怎么办 怀孕9个月了胃疼怎么办 怀孕6个月了胃疼怎么办 孕妇胃疼怎么办4个月了 25岁欠了5万块钱怎么办 感冒嗓子疼怎么办最简单的方法 和老婆离婚了我的心好痛怎么办 4s店不给退定金怎么办 教你闪腰了后该怎么办 coolpad酷派手机开不了机怎么办 苹果5s黑屏开不了机怎么办 苹果4s的屏坏了怎么办 苹果6手机充电口接触不良怎么办 5s用久了卡顿怎么办 孕妇血糖高怎么办什么方法降最好 脚砸了肿了紫了怎么办 我想在淘宝上卖东西该怎么办 苹果手机4s开不了机怎么办 冒险岛s前出2条怎么办 狗狗又吐又拉血怎么办 小孩上网成瘾怎么办父母要怎么做 一只眼睛大一只眼睛小怎么办 带近视镜时间长了眼睛变形怎么办 联通卡2g换4g卡怎么办 上火牙疼怎么办教你立刻止疼 吃热的凉的牙疼怎么办 我买的股票退市了怎么办 如果起诉离婚另一方不出庭怎么办 10个月宝宝还没长牙怎么办 超敏c反应蛋白>5怎么办 怀孕才两个月肚子就大了怎么办 腰椎间盘突出腿疼厉害怎么办 打了促排卵针不排卵怎么办 孕34周隐血1十是怎么办 窦性心动过缓伴不齐怎么办 09年买的万科b怎么办 苹果5s手机打不开机怎么办