A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

a
  1. /**
  2. * 需求:模拟实现斗地主的分牌情形
  3. * 分析:        1 模拟牌盒,存储54张牌,0-53 每个数字分别对应一张牌,用Map存储
  4. *                         2 将0-53序号随机分发到三个人手中,欲实现序号的随机排序,考虑使用Collections.shuffle()
  5. *                         因此序号使用ArrayList存储
  6. *                         3 看牌,并且实现玩家手上的拍由小到大排序,所以考虑使用TreeSet存储
  7. */
  8. package fmi1;

  9. import java.util.ArrayList;
  10. import java.util.Collections;
  11. import java.util.HashMap;
  12. import java.util.TreeSet;

  13. public class PokerSimulate {

  14.         /**
  15.          * @param args
  16.          */
  17.         public static void main(String[] args) {
  18.                 //建立牌盒
  19.                 String[] color = {"♦","♣","♥","♠"};//花色
  20.                 String[] size ={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//大小
  21.                 //建立集合存牌
  22.                 HashMap<Integer, String> hm = new HashMap<Integer,String>();
  23.                 //循环组牌并存至集合
  24.                 int key = 0;
  25.                 for(String s1:size){
  26.                         for(String s2:color){
  27.                                 String value = s2 + s1;
  28.                                 hm.put(key, value);
  29.                                 key++;
  30.                         }
  31.                 }
  32.                 hm.put(key++, "LKing");
  33.                 hm.put(key, "BKing");
  34.                 //输出牌
  35.                 printPoke(hm);
  36.                 //建立ArrayList实现牌的序号的随机分布
  37.                 ArrayList<Integer> al = new ArrayList<Integer>();
  38.                 //存序号
  39.                 for(int i = 0;i < 54;i++){
  40.                         al.add(i);
  41.                 }
  42.                 //洗牌
  43.                 Collections.shuffle(al);
  44.                 //新建3个玩家和一个底牌,即TreeSet集合
  45.                 TreeSet<Integer> gamer1 = new TreeSet<Integer>();
  46.                 TreeSet<Integer> gamer2 = new TreeSet<Integer>();
  47.                 TreeSet<Integer> gamer3 = new TreeSet<Integer>();
  48.                 TreeSet<Integer> dipai = new TreeSet<Integer>();
  49.                 //发牌
  50.                 for(int i = 0;i<al.size();i++){
  51.                         if(i >= al.size()-3)
  52.                                 dipai.add(al.get(i));
  53.                         else if(i%3==0)
  54.                                 gamer1.add(al.get(i));
  55.                         else if(i%3==1)
  56.                                 gamer2.add(al.get(i));
  57.                         else
  58.                                 gamer3.add(al.get(i));
  59.                 }
  60. //                System.out.println(gamer1);
  61. //                System.out.println(gamer2);
  62. //                System.out.println(gamer3);
  63. //                System.out.println(dipai);
  64.                 //看牌
  65.                 System.out.println("玩家1:");
  66.                 checkPoker(gamer1,hm);
  67.                 System.out.println("玩家2:");
  68.                 checkPoker(gamer2,hm);
  69.                 System.out.println("玩家3:");
  70.                 checkPoker(gamer3,hm);
  71.                 System.out.println("底牌:");
  72.                 checkPoker(dipai,hm);
  73.         }

  74.         private static void checkPoker(TreeSet<Integer> gamer,
  75.                         HashMap<Integer, String> hm) {
  76.                 for(int key:gamer){
  77. //                        System.out.print(key+" ");
  78.                         System.out.print(hm.get(key)+" ");
  79.                 }
  80.                 System.out.println();
  81.                
  82.         }

  83.         private static void printPoke(HashMap<Integer, String> hm) {
  84.                 System.out.print("扑克牌:");
  85.                 for (int i = 0; i < hm.size(); i++) {
  86.                         if (i % 4 == 0)
  87.                                 System.out.println();
  88.                         System.out.print(hm.get(i) + "\t");
  89.                 }
  90.                 System.out.println();
  91.         }

  92. }
复制代码


30 个回复

正序浏览
抓紧努力中
回复 使用道具 举报
♥♣♦♠
回复 使用道具 举报
fjb0902 发表于 2015-9-9 20:41
好帖好帖好帖,重要的说了三遍

谢谢 谢谢 谢谢
回复 使用道具 举报
fjb0902 来自手机 中级黑马 2015-9-9 20:41:53
28#
好帖好帖好帖,重要的说了三遍
回复 使用道具 举报
我来了 发表于 2015-9-9 20:03
还没学到,顿时感觉亚历山大

哈 学到了  你就会发现其实没那么难  就是把几部分的内容合一块
回复 使用道具 举报
李振在黑马 发表于 2015-9-9 17:06
哇哦!看来就业班很充实啊。提前准备把。

(⊙o⊙)…这是基础班的内容
回复 使用道具 举报
还没学到,顿时感觉亚历山大
回复 使用道具 举报
不错啊!!
回复 使用道具 举报
哇哦!看来就业班很充实啊。提前准备把。
回复 使用道具 举报
学习了········
回复 使用道具 举报
fmi110 发表于 2015-9-7 21:47
你就业班上到第几天了?是北京校区?

还有两个月,北京
回复 使用道具 举报
cemabenteng 发表于 2015-9-7 21:45
进度非常快,特别快,每天敲不完的代码,好好珍惜基础班轻松的时间吧

话说 你还有时间逛论坛啊
回复 使用道具 举报
cemabenteng 发表于 2015-9-7 21:45
进度非常快,特别快,每天敲不完的代码,好好珍惜基础班轻松的时间吧

你就业班上到第几天了?是北京校区?
回复 使用道具 举报
fmi110 发表于 2015-9-7 21:41
你已在就业班??感觉怎么样啊?

进度非常快,特别快,每天敲不完的代码,好好珍惜基础班轻松的时间吧
回复 使用道具 举报

你已在就业班??感觉怎么样啊?
回复 使用道具 举报

加油吧!!!
回复 使用道具 举报
好吧 还没学到
回复 使用道具 举报
枕草虫 发表于 2015-9-6 15:30
多谢楼主,学习了,来交作业

写的很好  都封装进函数了
回复 使用道具 举报
本帖最后由 枕草虫 于 2015-9-6 15:32 编辑
  1. package Test;
  2. import java.util.*;
  3. /**
  4. * 思路:
  5. * 1、        建立54张牌,然后存放到List集合当中打乱
  6. * 2、        将54张牌遍历致51号,分别存入3个TreeSet集合当中,将剩下的存入令一个集合当中
  7. * 3、        遍历3个集合,与底牌集
  8. * 然而输出的时候,顺序不对
  9. *
  10. * 那么想到楼主的思路,先建立一个从小到大顺序的集合,然后将打乱的脚标 分给三个玩家
  11. *
  12. *思路:
  13. *1、建立牌堆:建立ArrayList集合,将数字+花色 作为一个元素 按照从3-K-A-2,还有小王,大王的顺序存储到集合当中
  14. *2、发牌:建立一个脚标集合,利用Collections.shuffle(list)方法,然后将打乱的脚标分给三个玩家,然后拿着分好的脚标去牌堆中找元素
  15. *3、因为最后输出还是要排序,所以玩家使用TreeSet集合
  16. * */
  17. public class PockeDemo {

  18.         public static void main(String[] args) {
  19.                 // TODO Auto-generated method stub
  20.                 //建立牌堆
  21.                 List<String> li = creatPoker();
  22.                
  23.                 //建立脚标集合
  24.                 ArrayList<Integer> al = new ArrayList<Integer>();
  25.                 for(int i = 0 ;i < 54; i++)
  26.                         al.add(i);
  27.                 //打乱脚标集合的顺序
  28.                 Collections.shuffle(al);
  29.                
  30.                 //将脚标分给三个玩家
  31.                 TreeSet<Integer> gamer1 = new TreeSet<Integer>();
  32.                 TreeSet<Integer> gamer2 = new TreeSet<Integer>();
  33.                 TreeSet<Integer> gamer3 = new TreeSet<Integer>();
  34.                 TreeSet<Integer> dipai = new TreeSet<Integer>();
  35.                
  36.                 fenPeiIndex(al,gamer1,gamer2,gamer3,dipai);
  37.                
  38.                
  39.                 //遍历每个玩家的脚标,并到洗好的牌中去找
  40.                 System.out.println("玩家1:");
  41.                 zhuaPai(li,gamer1);
  42.                 System.out.println();
  43.                
  44.                 System.out.println("玩家2:");
  45.                 zhuaPai(li,gamer2);
  46.                 System.out.println();
  47.                
  48.                 System.out.println("玩家3:");
  49.                 zhuaPai(li,gamer3);
  50.                 System.out.println();
  51.                
  52.                 System.out.println("底牌:");
  53.                 zhuaPai(li,dipai);
  54.                
  55.         }
  56.        
  57.        
  58.         //建立顺序的牌
  59.         public static List<String> creatPoker(){
  60.                 ArrayList<String> al = new ArrayList<String>();
  61.                
  62.                 String[] color = {"♦","♣","♥","♠"};
  63.                 String[] num = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
  64.                
  65.                 for(String s1 : num)
  66.                         for(String s2 : color)
  67.                                 al.add(s1+s2);
  68.                
  69.                 al.add("小王");
  70.                 al.add("大王");
  71.                
  72.                 return al;
  73.         }
  74.         //分配脚标给玩家
  75.         public static void fenPeiIndex(ArrayList<Integer> al,
  76.                                                         TreeSet<Integer> gamer1,
  77.                                                         TreeSet<Integer> gamer2,
  78.                                                         TreeSet<Integer> gamer3,
  79.                                                         TreeSet<Integer> dipai){
  80.                
  81.                 int count = 0;
  82.                 for(int i : al){
  83.                         if(count<51){
  84.                                 if(count%3 == 0)
  85.                                         gamer1.add(i);
  86.                                 else if(count%3 == 1)
  87.                                         gamer2.add(i);
  88.                                 else
  89.                                         gamer3.add(i);
  90.                         }
  91.                         else
  92.                                 dipai.add(i);
  93.                         count++;
  94.                 }
  95.                
  96.         }
  97.         //抓牌
  98.         public static void zhuaPai(List<String> li,TreeSet<Integer> gamer){
  99.                 for(int i : gamer){
  100.                         System.out.print(li.get(i)+"\t");
  101.                 }
  102.         }
  103. }
复制代码

多谢楼主,学习了,来交作业
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马