黑马程序员技术交流社区

标题: 斗地主 模拟 [打印本页]

作者: 雨来    时间: 2015-12-27 18:37
标题: 斗地主 模拟

  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.TreeSet;

  7. public class Poker2 {

  8.         /**
  9.          * 分析: 模拟用户发扑克
  10.          *
  11.          * 1、 要有一副扑克
  12.          * 2、分扑克之前要洗一下排
  13.          * 3、每个人手中的排会自动排顺序
  14.          * 4、三个人  考虑底牌问题(斗地主)
  15.          */
  16.         public static void main(String[] args) {
  17.                 //创建一副扑克
  18.                 String [] color={"红桃","黑桃","梅花","方块",};
  19.                 String [] pk ={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
  20.                 //拼pk  四色花  以 pK 为主拼
  21.                 //for(int i = 0 ;i <pk.length; i ++)
  22.                 //用增强for
  23.                 //初使化计数器用 来当做 扑克的索引
  24.                 int index = 0;
  25.                 //创建一个有序集合 来存储  索引
  26.                 ArrayList<Integer> alist = new ArrayList<>();
  27.                 //创建一个HashMap来存储 poker
  28.                 HashMap<Integer,String> hm = new HashMap<>();
  29.                 for(String s1:pk) {
  30.                         
  31.                         for(String s2: color) {  
  32.                                 
  33.                                 hm.put(index, s2.concat(s1)+"\t"); // 为扑克的格式良好  我们加下Table 转义符"\t"
  34.                                 alist.add(index);//这里的index 自动装箱
  35.                                 index++;
  36.                         }
  37.                         
  38.                 }//出了大for则扑克已经拼结完成  但还差 大王和小王
  39.                 //测试一下拼了多少张扑克
  40.                 //System.out.println(alist.size()); // 52张排
  41.                 //测试一下index 出了for 是多少
  42.                 //System.out.println(index);  // 52  但我们是  从0  开始的  也就是说角标52 代表第三第排
  43.                 //那么我们添加大王
  44.                 hm.put(index, "大王"+"\t");
  45.                 alist.add(index);
  46.                
  47.                 //添加小王
  48.                 index++;
  49.                 hm.put(index, "小王"+"\t");
  50.                 alist.add(index);
  51.                
  52.                 //洗牌
  53.                 Collections.shuffle(alist);//打索引洗乱
  54.                
  55.                 //创建3个人  这个三个要获取集合中的角标 而其还要有自然排序的功能 那么选TreeSet集合
  56.                 TreeSet<Integer> zhangzhen = new TreeSet<>();
  57.                 TreeSet<Integer> huwenpeng = new TreeSet<>();
  58.                 TreeSet<Integer> limingdao = new TreeSet<>();
  59.                 TreeSet<Integer> dipai = new TreeSet<>(); //把它们封装成一个集合
  60.                 //TreeSet<TreeSet<Integer>> tsset = new TreeSet<>(); //封装人的集合
  61.                 //Iterator<TreeSet<Integer>> it = tsset.iterator(); //获取人集合的迭代器
  62.                         //用for 循环
  63.         /*        //添加人
  64.                 tsset.add(zhangzhen);
  65.                 tsset.add(huwenpeng);
  66.                 tsset.add(limingdao);
  67.                 tsset.add(dipai);
  68.                
  69.                 */
  70.          
  71.                
  72.                 //发排
  73.                 for(int i = 0; i<alist.size(); i++) {
  74.                         
  75.                         //参把底牌軣出来
  76.                         /*if(i>=alist.size()-3) { //如果i>=3了说明还剩下3张扑克
  77.                                 
  78.                                 dipai.add(i);
  79.                         }
  80.                         else if(i%3==0) {
  81.                                 
  82.                                 zhangzhen.add(i);
  83.                         }
  84.                         else if(i%3==1) {
  85.                                 
  86.                                 huwenpeng.add(i);
  87.                         }
  88.                         else {
  89.                                 
  90.                                 limingdao.add(i);
  91.                         }
  92.                         */
  93.                         //错误 分析:  i 是ArrayList的角标  通过角标才能获取出 ArrayList集合中的元素 这里的元素
  94.                         //HashMap 里的Key一一对应  如上面的 则会只输出张珍一个人的。
  95.                         if(i>=alist.size()-3) { //如果i>=3了说明还剩下3张扑克
  96.                                 
  97.                                 dipai.add(alist.get(i));
  98.                         }
  99.                         else if(i%3==0) {
  100.                                 
  101.                                 zhangzhen.add(alist.get(i));
  102.                         }
  103.                         else if(i%3==1) {
  104.                                 
  105.                                 huwenpeng.add(alist.get(i));
  106.                         }
  107.                         else {
  108.                                 
  109.                                 limingdao.add(alist.get(i));
  110.                         }
  111.                         
  112.                 }
  113.                 seepoker("张珍",zhangzhen,hm);//tsset
  114.                 seepoker("胡文鹏",huwenpeng,hm);
  115.                 seepoker("李明道",limingdao,hm);
  116.                 seepoker("底牌",dipai,hm);
  117.         }
  118.         //封装一个方法 在显示器输出每个人排
  119.         //分析:我们只要显示功能 则无需要返回值  那么 参数列表是  一  要有人  TreeSet  二  要有排  HashMap 三 还要有姓名
  120.         
  121.         //
  122.         public static void seepoker(String name, TreeSet<TreeSet<Integer>> ts, HashMap<Integer,String> hs) {
  123.                
  124.                 for(TreeSet<Integer> tsm:ts) { //把 3个人封装集合  集合的
  125.                         
  126.                         System.out.println(name+"排是:");
  127.                         for(Integer key:tsm) { //参数不加泛型下面会报错切记切记
  128.                                 
  129.                                 System.out.print(hs.get(key)); //这里不要换行
  130.                                 
  131.                         }
  132.                         //加一个换行
  133.                         System.out.println();
  134.                         
  135.                 }
  136.                
  137.                
  138.         }

  139. }


复制代码

作者: 谢光智    时间: 2015-12-27 19:42
6666666666666
作者: 隔壁老猫    时间: 2015-12-27 20:46
最近都爱玩斗地主
作者: 蛋炒饭    时间: 2015-12-27 20:58
不错不错  可以可以
作者: 逃不掉    时间: 2015-12-27 21:38
好牛的样子吗!
作者: NUMONE    时间: 2015-12-27 22:11
学习了,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2