【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. 小结

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

相关推荐
旦沐已成舟1 小时前
K8S-Pod的环境变量,重启策略,数据持久化,资源限制
java·docker·kubernetes
S-X-S1 小时前
项目集成ELK
java·开发语言·elk
飞的肖1 小时前
日志(elk stack)基础语法学习,零基础学习
学习·elk
Ting-yu1 小时前
项目实战--网页五子棋(游戏大厅)(3)
java·java-ee·maven·intellij-idea
dal118网工任子仪2 小时前
61,【1】BUUCTF WEB BUU XSS COURSE 11
前端·数据库·xss
Johaden2 小时前
EXCEL+Python搞定数据处理(第一部分:Python入门-第2章:开发环境)
开发语言·vscode·python·conda·excel
dal118网工任子仪3 小时前
66,【6】buuctf web [HarekazeCTF2019]Avatar Uploader 1
笔记·学习
02苏_3 小时前
2025/1/21 学习Vue的第四天
学习
羊小猪~~3 小时前
MYSQL学习笔记(四):多表关系、多表查询(交叉连接、内连接、外连接、自连接)、七种JSONS、集合
数据库·笔记·后端·sql·学习·mysql·考研
约定Da于配置3 小时前
uniapp封装websocket
前端·javascript·vue.js·websocket·网络协议·学习·uni-app