Java 斗地主自动发牌器

规则:

1.从3名玩家中随机选一名地主(20张牌=17张+3张底牌)

2.剩余2名玩家为农民(17张牌)

代码:

/** 
 * 斗地主自动发牌器(54张牌)
 */  
public class AutoDeal {
    /* 点数 */
    private static final JSONObject CARD_COUNT = JSONObject.parseObject("{\"1\":\"A\",\"11\":\"J\",\"12\":\"Q\",\"13\":\"K\",\"14\":\"小王\",\"15\":\"大王\"}", Feature.OrderedField);
    /* 花色 */
    private static final JSONObject CARD_COLOR = JSONObject.parseObject("{\"0\": \"方片\",\"1\": \"梅花\",\"2\": \"红桃\",\"3\": \"黑桃\"}", Feature.OrderedField);
    /* 玩家人数 */
    private static final int PLAYER_COUNT = 3;
   

public static void showPlayerCard(  Map<String,String> player, Map<String,Object> playerCard ) {
    for (int i = 1; i <= PLAYER_COUNT; i++) {
          List<String> playerCardList = (List<String>) playerCard.get(i+"");
          System.out.println("玩家"+i+"("+player.get(i+"")+")已拥有"+playerCardList.size()+"张牌:"+playerCardList);
    }
}


public static void main(String[] args) {
  List<String> cardList = new ArrayList<String>();
  Map<String,Object> playerCard = new HashMap<String,Object>();
  Map<String,String> player = new HashMap<String,String>();
  
  System.out.println("抢地主");
  Random random = new Random();
  int landowner = random.nextInt(PLAYER_COUNT)+1;//随机数:1-3
  for (int i = 1; i <= PLAYER_COUNT; i++) {
      List<String> playerCardList = new ArrayList<String>();
      playerCard.put(i+"", playerCardList);
      if( i == landowner ) {
          player.put(i+"", "地主");
      } else {
          player.put(i+"", "农民");
      }
      System.out.println("玩家"+i+":"+player.get(i+""));
  }
  
  int playerIndex = 0;
  while( cardList.size() <= 54 ) {
   int count = random.nextInt(15)+1;//随机数:1-15
   int color = random.nextInt(4);//随机数:0-3
   //生成牌
   String card = count >= 14 ? 
                 CARD_COUNT.getString(count+"") :
                 ( CARD_COLOR.getString(color+"") + (1<count&&count<=10 ? count+"" : CARD_COUNT.getString(count+"")) );
   if( !cardList.contains(card) ) {
       cardList.add(card);
       if( cardList.size() <= 51 ) {
           List<String> playerCardList = (List<String>) playerCard.get((playerIndex+1)+"");
           playerCardList.add(card);
           playerCard.put((playerIndex+1)+"", playerCardList);
           playerIndex = (playerIndex+1)%PLAYER_COUNT;
           System.out.println("\n当前发牌:"+card);
           System.out.println("当前已发牌数:"+cardList.size()+",当前已发牌:"+cardList);
       } else if( cardList.size() > 51 ) {//3张底牌
           System.out.println("\n底牌:"+card);
           List<String> landownerCardList = (List<String>) playerCard.get(landowner+"");
           landownerCardList.add(card);
           playerCard.put(landowner+"", landownerCardList);
       }
       showPlayerCard(player, playerCard);
   }
   if( cardList.size() == 54 ) {
       break;
   }
  }
 }
 
}

测试结果:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值