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 个回复

倒序浏览
运行结果
  1. 扑克牌:
  2. ♦3        ♣3        ♥3        ♠3       
  3. ♦4        ♣4        ♥4        ♠4       
  4. ♦5        ♣5        ♥5        ♠5       
  5. ♦6        ♣6        ♥6        ♠6       
  6. ♦7        ♣7        ♥7        ♠7       
  7. ♦8        ♣8        ♥8        ♠8       
  8. ♦9        ♣9        ♥9        ♠9       
  9. ♦10        ♣10        ♥10        ♠10       
  10. ♦J        ♣J        ♥J        ♠J       
  11. ♦Q        ♣Q        ♥Q        ♠Q       
  12. ♦K        ♣K        ♥K        ♠K       
  13. ♦A        ♣A        ♥A        ♠A       
  14. ♦2        ♣2        ♥2        ♠2       
  15. LKing        BKing       
  16. 玩家1:
  17. ♣3 ♦4 ♠5 ♦6 ♣7 ♥7 ♠7 ♦9 ♣10 ♠J ♣Q ♥Q ♦K ♦A ♦2 ♠2 LKing
  18. 玩家2:
  19. ♦3 ♥3 ♠4 ♦5 ♣6 ♦8 ♣9 ♥9 ♥10 ♦J ♣J ♥J ♠Q ♣K ♣A ♥A ♣2
  20. 玩家3:
  21. ♠3 ♣4 ♥4 ♣5 ♥5 ♥6 ♦7 ♥8 ♠8 ♠9 ♦10 ♦Q ♥K ♠K ♠A ♥2 BKing
  22. 底牌:
  23. ♠6 ♣8 ♠10
复制代码
回复 使用道具 举报
基础班的内容
回复 使用道具 举报
刚开始学  来看看
回复 使用道具 举报
学习了。。。。。。
回复 使用道具 举报

对头
回复 使用道具 举报
学习了      
回复 使用道具 举报
               好吧还没学到     
回复 使用道具 举报
一看,你就是看的是刘意老师的基础课程喽
回复 使用道具 举报
thriver2010 来自手机 中级黑马 2015-9-6 13:08:14
10#
全是自己敲的吗?学习了
回复 使用道具 举报
thriver2010 发表于 2015-9-6 13:08
全是自己敲的吗?学习了

看完视频后  自己默写的
回复 使用道具 举报
Woo 中级黑马 2015-9-6 15:23:30
12#
感觉很实用
回复 使用道具 举报
本帖最后由 枕草虫 于 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. }
复制代码

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

写的很好  都封装进函数了
回复 使用道具 举报
好吧 还没学到
回复 使用道具 举报

加油吧!!!
回复 使用道具 举报

你已在就业班??感觉怎么样啊?
回复 使用道具 举报
fmi110 发表于 2015-9-7 21:41
你已在就业班??感觉怎么样啊?

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

你就业班上到第几天了?是北京校区?
回复 使用道具 举报
cemabenteng 发表于 2015-9-7 21:45
进度非常快,特别快,每天敲不完的代码,好好珍惜基础班轻松的时间吧

话说 你还有时间逛论坛啊
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马