用集合寫一個簡單的鬥地主(嘿嘿)

本文介绍了如何用Java编写斗地主游戏的代码,包括准备牌、洗牌、发牌、玩家手牌处理和看牌功能。通过Map和List数据结构,展示了如何实现基本的牌类管理及游戏流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我們得知道鬥地主的規則,這裏小編就不介紹規則了,説下如何寫代碼的思路吧

一.準備牌

  1. 定义Map集合用来存储 牌索引  扑克牌
     
     //定义Map集合用来存储 牌索引  扑克牌
            Map<Integer,String> map =new HashMap<>();

  2. 定义list集合用来存储  牌索引
     
    //定义list集合用来存储  牌索引
            List<Integer> list=new ArrayList<>();

  3. 定义花色数组,定义数字数组
     
             //定义花色数组
            String[] huas="♥-♠-♣-♦".split("-");
             //定义数字数组
            String[] nums="2-A-K-Q-J-10-9-8-7-6-5-4-3".split("-");

  4. 循环拼接扑克牌 将牌索引和扑克牌放入到map集合中
     
     int index=2;
            for (String num:nums){
                for (String hua:huas){
                   String poker=hua+num;
                    map.put(index, poker);
                    index++;
      }
    }

  5. 将牌索引放入到list集合中
     
     //将牌索引放入到list集合中
          for (int i = 0; i < 54; i++) {
              list.add(i);
      }

  6. 单独添加大王和小王(用的笑臉表示)
    //单独添加大王和小王
            map.put(0,"大😊");
            map.put(1,"小😊");

二、洗牌(這裏直接使用Collections中的shuffle()方法) 

//將list集合中的數據打亂順序,相當於洗牌
Collections.shuffle(list);
Collections.shuffle(list);

三、發牌 

  1. 三个玩家 三个集合 底牌一个集合
     
            //三个玩家 三个集合 底牌一个集合
            List<Integer> player1  =new ArrayList<>();
            List<Integer> player2  =new ArrayList<>();
            List<Integer> player3  =new ArrayList<>();
            List<Integer> diPai  =new ArrayList<>();

  2. 遍历list集合 判断索引 发 牌索引
     
    //遍历list集合 判断索引 发 牌索引
            for (int i = 0; i < list.size(); i++) {
                //  >=51 為底牌添加元素
                if (i >=51){
                    diPai.add(list.get(i));
                //為玩家1添加牌
                }else if(i %3 ==0){
                    player1.add(list.get(i));
                //為玩家2添加牌
                }else if(i %3 ==1){
                    player2.add(list.get(i));
                //為玩家3添加牌
                }else{
                    player3.add(list.get(i));
                }
            }

四、 整理玩家手牌(直接使用Collections中的sort()方法)

// 排序    对玩家集合排序
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);

五、 看牌

        這裏寫了個看牌的方法,直接展示玩家的手牌,直接調用方法,可以減少重複代碼,提高代碼的可用性.

        //看牌
        show("小羅",map,player1);
        show("小韓",map,player2);
        show("小飛",map,player3);
        show("底牌:",map,diPai);
        看牌的show方法 
public static void show(String name,Map<Integer,String> map,List<Integer> player){
    StringBuilder sb =new StringBuilder(name+"[");
        //遍历玩家集合
            for (int i = 0; i < player.size(); i++) {
        //依次获取到每个牌索引 就map集合的键
            Integer key = player.get(i);
        //调用map集合键找值的方法 显示扑克牌
            sb.append(map.get(key));
        //判斷是不是數組最後一個元素,是添加"]",不是添加","
        if (i == player.size()-1){
            sb.append("]");
        }else{
            sb.append(", ");
        }
    }
        //打印下sb
        System.out.println(sb.toString());
}

六、運行結果 

 

 打印的結果根據鬥地主的規則展示出來,感興趣的小夥伴可以自己敲著玩玩.

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CY是个工具人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值