斗地主——有序实现


前言

斗地主——Map集合和List集合组合实现有序排序

用到了HashMap集合和ArrayList集合

一、ArrayList集合

实现不是同步的–>多线程:效率高,速度快

java.util.ArrayList,集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

注意:许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。

二、HashMap集合

Map集合的特点及HashMap集合的特性

1.创建类

文件夹(示例):
在这里插入图片描述

2.读入数据

创建类Prepare类,代码如下(示例):

package landlords2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

/**
 * 功能描述:准备牌
 *
 * @Author: wang
 * @Date: 2022/4/23 21:59
 */

public class Prepare {

    private static String[] colors = {"♥", "♣", "♦", "♠"};
    private static String[] nums = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};
    //牌的Map集合
    private HashMap<Integer, String> poker = new HashMap<>();
    //Map集合的键的List集合
    private ArrayList<Integer> keys = new ArrayList<>();
    
    public HashMap<Integer, String> getPoker() {
        return poker;
    }

    public ArrayList<Integer> getKey() {
        return keys;
    }

    public void toPrepare() {

        int count = 0;
        poker.put(count, "大王");
        keys.add(count);
        count++;
        poker.put(count, "小王");
        keys.add(count);
        count++;
        
        for (String num : nums) {
            for (String color : colors) {
                poker.put(count, color + num);
                keys.add(count);
                count++;
            }
        }
        //随机打乱排序
        Collections.shuffle(keys);
    }
}

创建Distribution类,代码如下(示例):

package landlords2;

import java.util.*;

/**
 * 功能描述:分牌
 *
 * @Author: wang
 * @Date: 2022/4/23 22:06
 */
public class Distribution {
    ArrayList<Integer> list1 = new ArrayList<>();
    ArrayList<Integer> list3 = new ArrayList<>();
    ArrayList<Integer> list2 = new ArrayList<>();
    ArrayList<Integer> list4 = new ArrayList<>();

    public ArrayList<Integer> getList1() {
        return list1;
    }

    public ArrayList<Integer> getList2() {
        return list2;
    }

    public ArrayList<Integer> getList3() {
        return list3;
    }

    public ArrayList<Integer> getList4() {
        return list4;
    }

    public void doDistribution(ArrayList<Integer> keys) {

        for (int i = 0; i < keys.size() ; i++) {
            if(i>=51){
                Integer key = keys.get(i);
                list4.add(key);
            }else if(i%3==0){
                Integer key = keys.get(i);
                list1.add(key);
            }else if(i%3==1){
                Integer key = keys.get(i);
                list2.add(key);
            }else if(i%3==2){
                Integer key = keys.get(i);
                list3.add(key);
            }
        }
    }
}

创建Show类,代码如下(示例):

package landlords2;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;

/**
 * 功能描述:展示牌
 *
 * @Author: wang
 * @Date: 2022/4/26 13:05
 */
public class Show {

    public void doShow(String name,ArrayList<Integer> list,HashMap<Integer, String> poker){

        list.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        });
        
        System.out.print(name+":");
        for (Integer k : list) {
            String s = poker.get(k);
            System.out.print(s+"\t");
        }
        System.out.println();
    }
}

创建Poker类,代码如下(示例):

package landlords2;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * 功能描述:斗地主洗牌发牌
 *
 * @Author: wang
 * @Date: 2022/4/23 21:19
 */
public class Poker {
    public static void main(String[] args) {
        //准备牌+洗牌。
        Prepare prepare = new Prepare();
        prepare.toPrepare();
        HashMap<Integer, String> poker = prepare.getPoker();
        System.out.println(poker);
        ArrayList<Integer> keys = prepare.getKey();
        System.out.println("共"+keys.size()+"张牌");
        System.out.println("随机排序后的索引:"+keys);
        //分牌
        Distribution distribution = new Distribution();
        distribution.doDistribution(keys);
        //展示牌
        Show show = new Show();
        show.doShow("玩家1",distribution.getList1(),poker);
        show.doShow("玩家2",distribution.getList2(),poker);
        show.doShow("玩家3",distribution.getList3(),poker);
        show.doShow("底 牌",distribution.getList4(),poker);
    }
}

总结

四步——准备牌,洗牌,分牌,展示牌

  • 将牌的数字和花色组合起来,再加一个0-53的键值,写入HashMap集合中,同时把0-53的键值写进一个ArrayList集合中。
  • 调用Collections集合工具类里的shuffle方法将键值集合随机排序。
  • 通过遍历新的键值集合将将牌分为四份分别是玩家一、玩家二、玩家三和底牌(三张),分别存进四个新的ArrayList集合中。
  • 最后展示,通过遍历键值集合,通过获得的每一个键值去获取HashMap集合中对应的value的值进行打印。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值