【Java 数据结构】如何写一副扑克牌 (附:全部码源) !!!

🔥 博客主页🔥 :【 坊钰_CSDN博客

欢迎各位点赞👍 评论**✍收藏⭐**

目录

[1. 牌面的创建](#1. 牌面的创建)

[2. 牌面的设计](#2. 牌面的设计)

[2.1 创建一副牌](#2.1 创建一副牌)

[2.2 洗牌](#2.2 洗牌)

[2.3 发牌](#2.3 发牌)

[3. 全部码源](#3. 全部码源)

[3.1 MyCard.java](#3.1 MyCard.java)

[3.2 MyCardGame.java](#3.2 MyCardGame.java)

[3.3 PlayCard.java](#3.3 PlayCard.java)

[3.4 运行图片](#3.4 运行图片)

[4. 小结](#4. 小结)


1. 牌面的创建

可以先创建一个类来表示牌面的花色和面值

java 复制代码
public class MyCard {
    //扑克牌牌面数值
    public int value;
    //扑克牌花色
    public String design;

    @Override
    public String toString() {
        return "[ "+design+" "+value+" ]";
    }
}

2. 牌面的设计

牌面创建好了之后,需要进行许多加工

2.1 创建一副牌

java 复制代码
/*
* 创建一副牌
* */
public List<MyCard> createCard() {
    List<MyCard> list = new ArrayList<>(51);
    for (int i = 1; i <= 13; i++) {
        for (int j = 0; j < SUIT.length; j++) {
            MyCard myCard = new MyCard();
            myCard.design = SUIT[j];
            myCard.value = i;
            list.add(myCard);
        }
    }
    return list;
}

2.2 洗牌

java 复制代码
/*
* 洗牌
* */
public void shuffleCard(List<MyCard> list) {
    Random random = new Random();
    for (int i = list.size() - 1; i >= 0; i--) {
        int ranCount = random.nextInt(52);
        swap(list,i,ranCount);
    }
}

/*
* 交换
* */
private void swap(List<MyCard> list,int i,int ranCount) {
    MyCard ret = list.get(i);
    list.set(i,list.get(ranCount));
    list.set(ranCount,ret);
}

2.3 发牌

java 复制代码
/*
* 现有 5 个人,每人抽 6 张牌比大小
* */
List<List<MyCard>> peoples = new ArrayList<>();
peoples.add(new ArrayList<>());
peoples.add(new ArrayList<>());
peoples.add(new ArrayList<>());
peoples.add(new ArrayList<>());
peoples.add(new ArrayList<>());
peoples.add(new ArrayList<>());

for (int i = 0; i < 5; i++) {  // 5人
    for (int j = 0; j < 6; j++) {  //抽 6 张牌
        peoples.get(i).add(list.remove(0));
    }
}

System.out.println("第一个人的牌:");
System.out.println(peoples.get(0));
System.out.println("第二个人的牌:");
System.out.println(peoples.get(1));
System.out.println("第三个人的牌:");
System.out.println(peoples.get(2));
System.out.println("第四个人的牌:");
System.out.println(peoples.get(3));
System.out.println("第五个人的牌:");
System.out.println(peoples.get(4));

3. 全部码源

3.1 MyCard.java

java 复制代码
package deom1;

public class MyCard {
    //扑克牌牌面数值
    public int value;
    //扑克牌花色
    public String design;

    @Override
    public String toString() {
        return "[ "+design+" "+value+" ]";
    }
}

3.2 MyCardGame.java

java 复制代码
package deom1;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class MyCardGame {
    /*
    * 定义花色的种类
    * */
    public String[] SUIT = {"♥","♣","♦","♠"};

    /*
    * 创建一副牌
    * */
    public List<MyCard> createCard() {
        List<MyCard> list = new ArrayList<>(51);
        for (int i = 1; i <= 13; i++) {
            for (int j = 0; j < SUIT.length; j++) {
                MyCard myCard = new MyCard();
                myCard.design = SUIT[j];
                myCard.value = i;
                list.add(myCard);
            }
        }
        return list;
    }

    /*
    * 洗牌
    * */
    public void shuffleCard(List<MyCard> list) {
        Random random = new Random();
        for (int i = list.size() - 1; i >= 0; i--) {
            int ranCount = random.nextInt(52);
            swap(list,i,ranCount);
        }
    }

    /*
    * 交换
    * */
    public void swap(List<MyCard> list,int i,int ranCount) {
        MyCard ret = list.get(i);
        list.set(i,list.get(ranCount));
        list.set(ranCount,ret);
    }

}

3.3 PlayCard.java

java 复制代码
package deom1;

import java.util.ArrayList;
import java.util.List;

public class PlayCard {
    public static void main(String[] args) {
        MyCardGame myCardGame = new MyCardGame();
        System.out.println("新的扑克牌:");
        List<MyCard> list = myCardGame.createCard();
        System.out.println(list);

        System.out.println("洗牌:");
        myCardGame.shuffleCard(list);
        System.out.println(list);

        /*
        * 现有 5 个人,每人抽 6 张牌比大小
        * */
        List<List<MyCard>> peoples = new ArrayList<>();
        peoples.add(new ArrayList<>());
        peoples.add(new ArrayList<>());
        peoples.add(new ArrayList<>());
        peoples.add(new ArrayList<>());
        peoples.add(new ArrayList<>());
        peoples.add(new ArrayList<>());
    
        for (int i = 0; i < 5; i++) {  // 5人
            for (int j = 0; j < 6; j++) {  //抽 6 张牌
                peoples.get(i).add(list.remove(0));
            }
        }
    
        System.out.println("第一个人的牌:");
        System.out.println(peoples.get(0));
        System.out.println("第二个人的牌:");
        System.out.println(peoples.get(1));
        System.out.println("第三个人的牌:");
        System.out.println(peoples.get(2));
        System.out.println("第四个人的牌:");
        System.out.println(peoples.get(3));
        System.out.println("第五个人的牌:");
        System.out.println(peoples.get(4));

    }
}

3.4 运行图片

4. 小结

以上就是对 该算法 的了解,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持

相关推荐
刺客xs19 小时前
Qt----事件简述
开发语言·qt
程序员-King.19 小时前
【Qt开源项目】— ModbusScope-进度规划
开发语言·qt
@淡 定19 小时前
Spring中@Autowired注解的实现原理
java·后端·spring
前端一小卒19 小时前
一个看似“送分”的需求为何翻车?——前端状态机实战指南
前端·javascript·面试
syt_101319 小时前
Object.defineProperty和Proxy实现拦截的区别
开发语言·前端·javascript
liu****19 小时前
Python 基础语法(二):程序流程控制
开发语言·python·python基础
charlie11451419119 小时前
如何快速在 VS2026 上使用 C++ 模块 — 完整上手指南
开发语言·c++·笔记·学习·现代c++
遝靑19 小时前
Flutter 跨端开发进阶:可复用自定义组件封装与多端适配实战(移动端 + Web + 桌面端)
前端·flutter
时空无限19 小时前
Java Buildpack Reference
java·开发语言
cypking19 小时前
Web前端移动端开发常见问题及解决方案(完整版)
前端