【详解】斗地主随机发牌项目

news2024/9/23 19:25:15

目录

前言:

1.初始化牌

 2.洗牌

3.揭牌

总代码:

Card类:

CardGame类:

Main类:

结语:


前言:

斗地主是全国范围内的一种桌面游戏,本节我们来实现一下斗地主中的简单初始化牌、发牌和看牌功能。按照斗地主的规则,完成洗牌发牌的动作。具体规则为使用 52 张牌(不含大小王)打乱顺序,3 个玩家参与游戏,3 人交替摸牌,每人 5(可以自己修改) 张牌。

实现思路步骤:

1.初始化牌

2.洗牌

3.揭牌

4.剩余牌

效果展示:

实现如下:

1.初始化牌

牌有数字和花色,故我们要自己创建一个类来进行操作。toString方法要记得重写不然后面println不能直接输出。

public class Card{
    public String suit;//花色
    public int num;
    public Card(String suit,int num){
        this.suit = suit;
        this.num = num;
    }
    @Override
    public String toString(){
        return suit+" "+num;
    }
}

用suits来存储花色。List<Card>可以看成是一个存储Card的一维数组。利用java自带的ArrayLIst的add函数实现尾插。 

public static final String[] suits = {"♥","♣","♦","♠"};
    //初始化牌
    public List<Card> buyCard(){
        List<Card> cardList = new ArrayList<>();
        for(int i = 0;i < 4;i++){
            for(int j = 1;j <= 13;j++){
                String suit = suits[i];
                Card card = new Card(suit,j);
                cardList.add(card);
            }
        }
        return cardList;
    }

 效果如下:

 2.洗牌

利用random来生成随机数,这里有个小细节i是从最后一个数来进行遍历的利用rand来生成i之前的随机数进行交换这样就能保证每个牌都有被洗到。

//洗牌
    public void shuffle(List<Card> cardList){
        Random random = new Random();
        for(int i = cardList.size()-1;i > 0;i--){
            swap(cardList,i,random.nextInt(i));
        }
    }
    public void swap(List<Card> cardList,int i,int j){
        Card temp = cardList.get(i);
        cardList.set(i,cardList.get(j));
        cardList.set(j,temp);
    }

效果如下:

3.揭牌

这里解释一下List<List<Card>>,可以看成一个二维数组如图,List<Card>是一个泛型,最外面的List里面存储了一个List<Card>。

//揭牌
    public List<List<Card>> getCard(List<Card> cardList){
        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();
        List<List<Card>> hand = new ArrayList<>();
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);
        for(int i = 0;i < 5;i++){
            for(int j = 0;j < 3;j++){
                Card card = cardList.remove(0);
                hand.get(j).add(card);
            }
        }
        return hand;
    }

总代码:

Card类:

public class Card{
    public String suit;//花色
    public int num;
    public Card(String suit,int num){
        this.suit = suit;
        this.num = num;
    }
    @Override
    public String toString(){
        return suit+" "+num;
    }
}

CardGame类:

import java.util.List;
import java.util.ArrayList;
import java.util.Random;
public class CardGame{
    public static final String[] suits = {"♥","♣","♦","♠"};
    //初始化牌
    public List<Card> buyCard(){
        List<Card> cardList = new ArrayList<>();
        for(int i = 0;i < 4;i++){
            for(int j = 1;j <= 13;j++){
                String suit = suits[i];
                Card card = new Card(suit,j);
                cardList.add(card);
            }
        }
        return cardList;
    }
    //洗牌
    public void shuffle(List<Card> cardList){
        Random random = new Random();
        for(int i = cardList.size()-1;i > 0;i--){
            swap(cardList,i,random.nextInt(i));
        }
    }
    public void swap(List<Card> cardList,int i,int j){
        Card temp = cardList.get(i);
        cardList.set(i,cardList.get(j));
        cardList.set(j,temp);
    }
    //揭牌
    public List<List<Card>> getCard(List<Card> cardList){
        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();
        List<List<Card>> hand = new ArrayList<>();
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);
        for(int i = 0;i < 5;i++){
            for(int j = 0;j < 3;j++){
                Card card = cardList.remove(0);
                hand.get(j).add(card);
            }
        }
        return hand;
    }
}

Main类:

import java.util.List;
public class Main {
    public static void main(String[] args){
        CardGame cardgame = new CardGame();
        List<Card> ret = cardgame.buyCard();
        System.out.println("初始化牌");
        System.out.println(ret.subList(0,13));
        System.out.println(ret.subList(13,26));
        System.out.println(ret.subList(26,39));
        System.out.println(ret.subList(39,52));
        System.out.println("洗牌");
        cardgame.shuffle(ret);
        System.out.println(ret.subList(0,13));
        System.out.println(ret.subList(13,26));
        System.out.println(ret.subList(26,39));
        System.out.println(ret.subList(39,52));
        System.out.println("揭牌");
        List<List<Card>> hand = cardgame.getCard(ret);
        for(int i = 0;i < 3;i++){
            System.out.println("第 "+(i+1)+"个人的牌:"+hand.get(i));
        }
        System.out.println("剩下的牌:");
        System.out.println(ret);
    }
}

结语:

其实写博客不仅仅是为了教大家,同时这也有利于我巩固自己的知识点,和一个学习的总结,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进,如果大家有所收获的话还请不要吝啬你们的点赞收藏和关注,这可以激励我写出更加优秀的文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1436466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20240202在WIN10下部署faster-whisper

20240202在WIN10下部署faster-whisper 2024/2/2 12:15 前提条件&#xff0c;可以通过技术手段上外网&#xff01;^_ 首先你要有一张NVIDIA的显卡&#xff0c;比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡&#xff01;】800&#xffe5; 2、请正确安装好NVIDIA最…

BEV感知算法学习

BEV感知算法学习 3D目标检测系列 Mono3D(Monocular 3D Object Detection for Autonomous Driving) 流程&#xff1a; 通过在地平面上假设先验&#xff0c;在3D空间中对具有典型物理尺寸的候选边界框进行采样&#xff1b;然后我们将这些方框投影到图像平面上&#xff0c;从而避…

【Vitis】HLS高层次综合的优势

高层次综合 (HLS) 是自动设计进程&#xff0c; 利用数字系统的抽的象行为规范来生成寄存器传输级结构&#xff0c; 以实现给定行为。 使用 HLS 的典型流程包含下列步骤&#xff1a; 1. 围绕给定架构在高抽象层次使用 C/C 编写算法 2. 在行为级别验证功能 3. 使用 HLS 工具为…

(十二)springboot实战——SSE服务推送事件案例实现

前言 SSE&#xff08;Server-Sent Events&#xff0c;服务器推送事件&#xff09;是一种基于HTTP协议的服务器推送技术。它允许服务器向客户端发送异步的、无限长的数据流&#xff0c;而无需客户端不断地轮询或发起请求。这种技术可以用来实现实时通信、在线聊天、即时更新等功…

LeetCode、790. 多米诺和托米诺平铺【中等,二维DP,可转一维】

文章目录 前言LeetCode、790. 多米诺和托米诺平铺【中等&#xff0c;二维DP&#xff0c;可转一维】题目与分类思路二维解法二维转一维 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质…

【VSTO开发-WPS】下调试

重点2步&#xff1a; 1、注册表添加 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\kingsoft\Office\WPP\AddinsWL] "项目名称"""2、visual studio 运行后&#xff0c;要选中附加到调试&#xff0c;并指定启动项目。 如PPT输入WPP搜…

在 CentOS 7上使用 Apache 和 mod_wsgi 部署 Django 应用的方法

简介 Django 是一个强大的 Web 框架&#xff0c;可以帮助您快速启动 Python 应用程序或网站。Django 包括一个简化的开发服务器&#xff0c;用于在本地测试代码&#xff0c;但对于任何与生产相关的事情&#xff0c;都需要一个更安全和功能强大的 Web 服务器。 在本指南中&…

Python学习路线 - Python高阶技巧 - 拓展

Python学习路线 - Python高阶技巧 - 拓展 闭包闭包注意事项 装饰器装饰器的一般写法(闭包写法)装饰器的语法糖写法 设计模式单例模式工厂模式 多线程进程、线程并行执行多线程编程threading模块 网络编程Socket客户端和服务端Socket服务端编程实现服务端并结合客户端进行测试 S…

毅速集团2023年度总结暨表彰大会圆满举行

2024年2月2日&#xff0c;毅速集团2023年度总结暨表彰大会在上海总部举行&#xff0c;本次年会以“加速世界向增材制造的转变”为主题&#xff0c;全面总结了毅速集团2023年取得的成绩&#xff0c;明确了2024年的发展战略&#xff0c;并对过去一年中表现突出的个人进行了隆重表…

Redis学习及总结

Redis 快速入门 Redis属于非关系型数据库 SQL应用场景 数据结构固定相关业务对数据安全性一致性要求高 NoSQL应用场景 数据结构不固定对一致性&#xff0c;安全性要求不高性能要求高 &#x1f3af;需要使用Xftp 传输压缩包到虚拟机上 安装好Redis后&#xff0c; 执行命令…

第七届西湖论剑·中国杭州网络安全技能大赛 AI 回声海螺 WP

第七届西湖论剑中国杭州网络安全技能大赛-AI-回声海螺 开题&#xff0c;提示输入密码给FLAG。 这个回声海螺应该是个AI&#xff0c;就是复读机&#xff0c;应该是想办法从中骗出密码。 感觉这题不像是AI&#xff0c;也没用啥模型&#xff0c;应该是WEB。或者是说类似于AI的提示…

GLSL ES 1.0

GLSL ES 概述 写在前面 程序是大小写敏感的每一个语句都应该以英文分号结束一个shader必须包含一个main函数&#xff0c;该函数不接受任何参数&#xff0c;并且返回voidvoid main() { }数据值类型 GLSL支持三种数据类型&#xff1a; 整型浮点型&#xff1a;必须包含小数点&…

posix_memalign 与 malloc 对比

1. 原因原理 编程中的类型对齐问题主要是处于性能考虑&#xff0c;如果不做对齐&#xff0c;那么单个数据元素的访问很容易跨在多个时钟周期上&#xff0c;从而导致性能下降。 内建数据类型的对齐&#xff0c;是由编译器和C语言库的API实现中自动完成的&#xff0c;这对于用户是…

LeetCode-第876题-链表的中间结点

1.题目描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。如果有两个中间结点&#xff0c;则返回第二个中间结点。 2.样例描述 3.思路描述 创建两个快慢指针 slow , fast &#xff0c;起始共同指向头节点&#xff0c;slow 每次走一步&#xff0c;fas…

LabVIEW双光子荧光显微成像系统开发

双光子显微成像是一种高级荧光显微技术&#xff0c;广泛用于生物学和医学研究&#xff0c;尤其是用于活体组织的深层成像。在双光子成像过程中&#xff0c;振镜&#xff08;Galvo镜&#xff09;扮演了非常关键的角色&#xff0c;它负责精确控制激光束在样本上的扫描路径。以下是…

leetcode9. 回文数|详细深入讲解算法

前往题目有 反转一半数字 思路 映入脑海的第一个想法是将数字转换为字符串&#xff0c;并检查字符串是否为回文。但是&#xff0c;这需要额外的非常量空间来创建问题描述中所不允许的字符串。 第二个想法是将数字本身反转&#xff0c;然后将反转后的数字与原始数字进行比较&…

总结:图像生成网络

1、最新的几款图像生成网络 eCNN 文献&#xff1a;Bahrami A, Karimian A, Fatemizadeh E, et al. A new deep convolutional neural network design with efficient learning capability: Application to CT image synthesis from MRI[J]. Medical physics, 2020, 47(10): 515…

EasyX图形库学习(一、窗口创建函数initgraph、背景颜色设置setbkcolor、图形绘制函数)

目录 一、easyX图形库基本介绍 1、easyX的原理 2、easyX的安装 3、easyX的颜色&#xff08;RGB颜色模型&#xff09; 颜色模型相关函数: 4、easyX的坐标 二、相关函数介绍: 绘图设备相关函数&#xff1a; 图形颜色及样式设置相关函数: 图形绘制相关函数: 文字输出相关…

ManageEngine推出云原生身份平台以解决劳动力IAM挑战

ManageEngine推出云原生身份平台以解决企业员工身份与访问管理&#xff08;IAM&#xff09;面临的挑战。该公司还为其本地身份治理和管理&#xff08;IGA&#xff09;解决方案添加了先进的安全功能。 IAM 内置通用目录可在企业应用程序之间集中管理用户身份&#xff0c;使用身…

如何使用Docker部署Nginx容器实现无公网ip远程访问本地服务

文章目录 1. 安装Docker2. 使用Docker拉取Nginx镜像3. 创建并启动Nginx容器4. 本地连接测试5. 公网远程访问本地Nginx5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 在开发人员的工作中&#xff0c;公网远程访问内网是其必备的技术需求之一。对于…