JAVA模拟斗地主发牌

package cn.itcast.Demo10;(包类名)

import java.util.ArrayList;(导包方法名,以下四个同上)
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SendPokerTest {
    public static void main(String[] args) {  // main 方法
        // 定义一个双键集合,建;表示排的编号,值:表示具体的牌 ,
        Map<Integer ,String> pokers = new HashMap<>();
        //定义一个单键
        List<Integer> list = new ArrayList<>();
        //具体的牌
    String []colors = {"♠","♥","♣","♦"};
    String []numbers = {"3","4","5","6","7","8","9","10","J","Q","K",
            "A","2"};
    int num = 1 ;
        for (String number : numbers) {  //定义点数
            for (String color : colors) {  //定义花色
               String poker = color+number;
              pokers.put(num,poker);
              list.add(num);
              num++;
            }
        }
        //添加大小王
    pokers.put(num ,"小王");
    list.add(num++);
    pokers.put(num,"大王");
    list.add(num);
   ***//第一次的运行结果,看是否够个数正确***
    System.out.println("所有的牌:"+pokers);
    System.out.println("牌的编号:"+list);
**// 洗牌**
    Collections.shuffle(list);
    System.out.println("洗好牌后,编号为:"+list);
**// 发牌**
    List <Integer> ligang = new ArrayList<>();
    List <Integer> xioafeng = new ArrayList<>();
    List<Integer>  liliheng  = new ArrayList<>( );
    List<Integer> dipai = new ArrayList<>();
  **//具体的发牌动作,将索引和3 去摸,决定发牌给那个人**
    for (int i = 0; i <list.size() ; i++) {
        Integer pokerNum = list.get(i);
    if (i >=list.size() - 3 ){
        dipai.add(pokerNum);
    }
    else  if (i %3 ==1 ){
        ligang.add(pokerNum);
    }
    else  if (i%3 ==2 ){
        xioafeng.add(pokerNum);
    }
    else  if (i%3 == 0 ){
        liliheng.add(pokerNum);
    }
    }

  /*  System.out.println("港的牌:"+ligang);
    System.out.println("晓峰的牌:"+xioafeng);
    System.out.println("立衡的牌:"+liliheng);
    System.out.println("底牌 :"+dipai);*/    (这几行无用可以删掉)
    **//看牌**
    System.out.println("-----------------------------------");

    System.out.println("港的牌:"+printPoker(ligang,pokers));
    System.out.println("峰的牌:"+printPoker(xioafeng,pokers));
    System.out.println("立衡的牌:"+printPoker(liliheng,pokers));
    System.out.println("底牌 :"+printPoker(dipai,pokers));

}
public  static  String printPoker (List<Integer> nums,
        Map<Integer,String> pokers){   **// 定义一个方法
    // 对牌进行升序**
    Collections.sort(nums);
    **//遍历牌的编号集合,获取每一个编号**
    StringBuilder sb = new StringBuilder();
    for (Integer num : nums) {
        **// num要查找的具体牌的编号**
        String poker = pokers.get(num);
        sb.append(poker+" ");

    }
    String str = sb.toString();
    return  str.trim();
}
}

运行结果如下:
所有的牌:{1=♠3, 2=♥3, 3=♣3, 4=♦3, 5=♠4, 6=♥4, 7=♣4, 8=♦4, 9=♠5, 10=♥5, 11=♣5, 12=♦5, 13=♠6, 14=♥6, 15=♣6, 16=♦6, 17=♠7, 18=♥7, 19=♣7, 20=♦7, 21=♠8, 22=♥8, 23=♣8, 24=♦8, 25=♠9, 26=♥9, 27=♣9, 28=♦9, 29=♠10, 30=♥10, 31=♣10, 32=♦10, 33=♠J, 34=♥J, 35=♣J, 36=♦J, 37=♠Q, 38=♥Q, 39=♣Q, 40=♦Q, 41=♠K, 42=♥K, 43=♣K, 44=♦K, 45=♠A, 46=♥A, 47=♣A, 48=♦A, 49=♠2, 50=♥2, 51=♣2, 52=♦2, 53=小王, 54=大王}
牌的编号:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54]
洗好牌后,编号为:[45, 36, 37, 5, 38, 1, 9, 20, 12, 16, 33, 50, 18, 19, 52, 24, 21, 14, 48, 54, 30, 53, 31, 7, 13, 23, 25, 44, 35, 2, 46, 47, 43, 29, 39, 40, 28, 3, 51, 49, 11, 34, 15, 6, 10, 26, 41, 32, 8, 42, 22, 4, 27, 17]

最终的结果
李港的牌:♣3 ♥4 ♣5 ♣7 ♦7 ♠8 ♣8 ♣10 ♠J ♣J ♦J ♥Q ♣Q ♠K ♥K ♣A 大王
晓峰的牌:♠3 ♥3 ♣4 ♥5 ♦5 ♥6 ♥8 ♠9 ♥10 ♦10 ♥J ♠Q ♦Q ♣K ♥2 ♣2 ♦2
李立衡的牌:♠4 ♦4 ♠5 ♠6 ♣6 ♦6 ♥7 ♦8 ♥9 ♦9 ♠10 ♦K ♠A ♥A ♦A ♠2 小王
底牌 :♦3 ♠7 ♣9
注:每运行一次结果不同

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值