黑马程序员技术交流社区

标题: Java之通过集合模拟斗地主游戏【随机奖励黑马币】 [打印本页]

作者: 万合天宜    时间: 2015-2-8 19:35
标题: Java之通过集合模拟斗地主游戏【随机奖励黑马币】
  1. import java.util.HashMap;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.TreeSet;

  5. /*
  6. * 需求:模拟斗地主游戏
  7. *
  8. * 思路:
  9. *         用 HashMap 来存储牌:定义一个对应的索引,以键为索引,值为牌的对应关系存入 hashMap 集合
  10. *  用 ArrayList 来存储索引,看牌的时候,通过索引来拿对应的牌。同时,发牌为了保证牌的顺序,所以用 TreeSet 来接收牌。
  11. */
  12. public class PokerDemo {
  13.         public static void main(String[] args) {

  14.                 // 分析:

  15.                 // 1、创建一副牌(集合)
  16.                 // 创建 HashMap 集合,用于存储索引和牌
  17.                 HashMap<Integer, String> hm = new HashMap<Integer, String>();
  18.                 // 创建 ArrayList 存储索引
  19.                 ArrayList<Integer> array = new ArrayList<Integer>();

  20.                 // 创建牌的花色数组
  21.                 String[] colors = { "♠", "♦", "♥", "♣" };
  22.                 // 创建牌的数字数组
  23.                 String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
  24.                                 "K", "A", "2" };

  25.                 // 定义一个索引
  26.                 int index = 0;
  27.                 // 把牌的颜色和数字组合在一块儿
  28.                 // 通过双重 for 循环,得到每一个牌的颜色和数字
  29.                 for (String number : numbers) {
  30.                         for (String color : colors) {
  31.                                 // 获取到每一张牌
  32.                                 String poker = color.concat(number);
  33.                                 // 把牌和索引添加进 HashMap 集合
  34.                                 hm.put(index, poker);
  35.                                 // 把索引添加进 ArrayList 集合
  36.                                 array.add(index);
  37.                                 // 索引自增
  38.                                 index++;
  39.                         }
  40.                 }
  41.                 // 创建大小王
  42.                 hm.put(index, "小王");
  43.                 array.add(index);
  44.                 index++;
  45.                 hm.put(index, "大王");
  46.                 array.add(index);

  47.                 // 2、洗牌
  48.                 // 调用 Collections 的 shuffle 方法:随机置换功能
  49.                 Collections.shuffle(array);

  50.                 // 3、发牌
  51.                 // 创建玩家和底牌 TreeMap 集合
  52.                 TreeSet<Integer> wanPing = new TreeSet<Integer>();
  53.                 TreeSet<Integer> maoXuePing = new TreeSet<Integer>();
  54.                 TreeSet<Integer> yangXiao = new TreeSet<Integer>();
  55.                 TreeSet<Integer> diPai = new TreeSet<Integer>();

  56.                 // 用取模的方式,进行发牌
  57.                 for (int x = 0; x < array.size(); x++) {
  58.                         // 剩余的3张底牌
  59.                         if (x >= array.size() - 3) {
  60.                                 diPai.add(array.get(x));
  61.                         } else if (x % 3 == 1) {
  62.                                 wanPing.add(array.get(x));
  63.                         } else if (x % 3 == 2) {
  64.                                 maoXuePing.add(array.get(x));
  65.                         } else if (x % 3 == 0) {
  66.                                 yangXiao.add(array.get(x));
  67.                         }
  68.                 }

  69.                 // 4、看牌
  70.                 // 调用看牌功能即可
  71.                 lookPoker("万平", wanPing, hm);
  72.                 lookPoker("毛雪平", maoXuePing, hm);
  73.                 lookPoker("杨晓", yangXiao, hm);
  74.                 lookPoker("底牌", diPai, hm);
  75.         }

  76.         // 由于有三个人看牌,所以定义看牌功能
  77.         public static void lookPoker(String name, TreeSet<Integer> ts,
  78.                         HashMap<Integer, String> hm) {
  79.                 System.out.println(name + "的牌是:");
  80.                 // 遍历 TreeSet 集合,获得索引
  81.                 for (Integer key : ts) {
  82.                         // 通过索引获取值
  83.                         String value = hm.get(key);
  84.                         System.out.print(value + " ");
  85.                 }
  86.                 System.out.println();
  87.         }
  88. }
复制代码



作者: guiqi225    时间: 2015-2-8 20:44
最喜欢这种贴了,尽管你的代码我还是看不太懂~~~
作者: jojo    时间: 2015-2-8 20:58
来看看,O(∩_∩)O
作者: janstk    时间: 2015-2-8 21:04
真的送吗?LZ土豪不解释。。
作者: 张_磊    时间: 2015-2-8 22:53
不明觉厉!
作者: coolmiao13    时间: 2015-2-8 23:07
运行了一下,貌似是发牌的游戏,回去好好看看。
作者: 些许    时间: 2015-2-8 23:22
路过  打个酱油!!!
作者: 张思语    时间: 2015-2-8 23:25
我只能说你的照片和昵称为你的代码加分了?要是送技术分,那我旧就是最爱的!
作者: 俺做android开发    时间: 2015-2-9 13:26
真有黑马币吗
作者: Oo不弃    时间: 2015-2-9 14:35
原来是发牌程序。
作者: 书生灬流年    时间: 2015-2-9 14:45
支持一下 回去研究研究
作者: xiaoyi    时间: 2015-2-9 18:28
先复制一下再看看
作者: 时间都去哪了    时间: 2015-2-9 19:41
有奖励的贴子我最喜欢了
作者: qiuyuhuaihua    时间: 2015-2-9 20:40
楼主真是有心了,感谢技术分享!
作者: 小丑    时间: 2015-2-9 21:27
大爱这种贴!! 新手可以好好看看~学习学习~
作者: huangchunwei    时间: 2015-2-9 23:08
楼主棒棒哒!!!但是代码看不懂。。。
作者: 浮夸    时间: 2015-2-11 09:52
{:3_53:}感觉很吊的样子
作者: a410709560    时间: 2015-2-21 18:07
感谢分享!!!
作者: Aily    时间: 2015-2-21 23:21
我只会做出来发牌。。
作者: linuxpara910829    时间: 2015-2-22 02:18
好贴  技术的整合    研究研究
作者: ZZGFF    时间: 2015-2-22 04:09
酱油来。
作者: 书生灬流年    时间: 2015-2-22 06:59
厉害!!!
作者: franksight    时间: 2015-2-22 07:45
来看看。。。不错
作者: qwe2820435o2    时间: 2015-2-22 09:59
好吧,还没学到~不明觉厉:)
作者: H马凯    时间: 2015-2-23 22:48
好厉害!!!
作者: xyf19881010    时间: 2015-2-23 22:56
楼主好样的
作者: 鲍阳    时间: 2015-2-25 15:28
还有黑马币奖励吗
作者: 正在输入...    时间: 2015-2-25 16:13
斗地主发牌程序。
作者: yang4414    时间: 2015-11-24 02:09
打打酱油!!!!!!!!!!!!!
作者: woxinfeixiang    时间: 2015-11-25 21:50
好牛逼!
作者: serge    时间: 2015-11-26 13:56
最喜欢这种贴了,尽管你的代码我还是看不太懂~~
作者: 清风徐来_1    时间: 2015-11-27 19:06
好厉害666
作者: 吴志超    时间: 2015-12-5 23:08
有奖励的贴子我最喜欢了
作者: liuxingyu    时间: 2015-12-6 20:06
喜欢这种贴了,尽管你的代码我还是看不太懂~~~
作者: 雪山飞熊    时间: 2015-12-7 10:43
来看看,O(∩_∩)O
作者: 尼玛大叔    时间: 2015-12-7 20:36
大神求带啊
作者: hmgui7219    时间: 2015-12-10 21:33
大神的东西
作者: zfx435199612    时间: 2015-12-16 00:09
加油,努力,相信自己!
作者: yyt199108    时间: 2015-12-16 18:47
来看看,呵呵
作者: 木头小丸子    时间: 2015-12-27 13:07
我也是,尽管看不懂,但还是可以膜拜
作者: 湘陵依点    时间: 2015-12-27 23:03
已阅,飘过
作者: 信徒的前行    时间: 2016-1-5 04:19
厉害!用到的东西挺多的!
作者: jinxiaodong    时间: 2016-1-7 16:59
先保存下,等通过考试了,好好研究下
作者: 1210871468    时间: 2016-1-7 21:38
66666666666666
作者: 李佳儒    时间: 2016-1-9 21:51
楼主,楼主俺是小白,来顶你
作者: 湘陵依点    时间: 2016-1-9 23:16
来看看,O(∩_∩)O
作者: 执笔写毛头    时间: 2016-1-15 23:42
写的不错 这个代码很有用 赞一个
作者: ZhuHuaLei0903    时间: 2016-1-15 23:54
我是才上了五天课的小白 这个帖子自己发现好多自己没有学到过的东西,不过我还是看完了 ! 其实也有很多是我们已经接触过的了! 希望等我学完了之后弄个更好的出来 ~哈哈! 不过在那之前还是先求大神的 黑马币吧!
作者: xule86    时间: 2016-1-16 12:23
这一看就是大神才能写出来的东西,让我等膜拜
作者: 老朱    时间: 2016-1-17 23:13
哥们  可以  加油 加油
作者: 18817602013    时间: 2016-1-29 15:49
新人报道!(我是为黑马币来的)
作者: lizi432522    时间: 2016-3-4 11:01
谢谢版主,非常好的技术贴
作者: kelin410    时间: 2016-3-4 18:51
支持!!!!!!
作者: 执剑人    时间: 2016-3-7 14:28
赞一个!
作者: 艾斯空气    时间: 2016-3-9 18:44
少侠好身手!
作者: 蔡恒    时间: 2016-3-17 19:14
是不是真的有黑马币?
作者: 玉堂散人    时间: 2016-4-5 23:28
呵呵,原来斗地主也不过如此!
作者: 沒亊→偸著樂    时间: 2016-4-16 14:35
好像很牛的样子啊
作者: Jason.wang    时间: 2016-4-28 20:19
好,顶,赞,,
作者: xiaowanghua    时间: 2016-4-30 23:12
感谢版主,马上要点招了,黑马币能抛抛吗,顶贴了
作者: Midicy    时间: 2016-5-2 21:24
花色是怎么选的?特殊符号?
作者: 小小M    时间: 2016-5-3 22:38
膜拜大神,菜鸟过来学习学习希望能赐点黑马币啦
作者: 卢起    时间: 2016-5-6 23:25
这个都敲了好几遍了
作者: 陈军舰    时间: 2016-5-7 20:53
好厉害的样子




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