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

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

相关推荐
江城开朗的豌豆3 分钟前
Webpack配置魔法书:从入门到高手的通关秘籍
前端·javascript·微信小程序
AnalogElectronic7 分钟前
vue3 实现记事本手机版01
开发语言·javascript·ecmascript
江城开朗的豌豆8 分钟前
玩转小程序生命周期:从入门到上瘾
前端·javascript·微信小程序
Cx330❀8 分钟前
《C++ 继承》三大面向对象编程——继承:派生类构造、多继承、菱形虚拟继承概要
开发语言·c++
晨陌y11 分钟前
从 “不会” 到 “会写”:Rust 入门基础实战,用一个小项目串完所有核心基础
开发语言·后端·rust
筱砚.11 分钟前
【STL——set与multiset容器】
开发语言·c++·stl
Fanfffff72012 分钟前
从TSX到JS:深入解析npm run build背后的完整构建流程
开发语言·javascript·npm
im_AMBER14 分钟前
React 10
前端·javascript·笔记·学习·react.js·前端框架
Elias不吃糖16 分钟前
C++ 中的浅拷贝与深拷贝:概念、规则、示例与最佳实践(笔记)
开发语言·c++·浅拷贝·深拷贝
LEEBELOVED16 分钟前
R语言高效数据处理-3个自定义函数笔记
开发语言·笔记·r语言