C#棋牌游戏(如斗地主)

C#棋牌游戏

  • 需求
  • 代码块
    • 定义枚举
    • 定义Card类
    • 定义CardLibrary类
    • *定义Player类
    • Main函数中实现
    • 结果展示

需求

  • 需要定义Card类,该类包含特征:
    每张牌的名字;
    花色:红心、方块、梅花、黑桃;
    牌号:1- 10、J、Q、K、小王、大王
  • 定义牌库CardLibrary类,该类包含类成员:
    容器存储所有牌;
    所有牌的总数量;
    索引器(通过int类型下标取出容器对应的牌);
    初始化牌库方法;
    发牌方法;
    洗牌方法

在Main方法测试以上逻辑

代码块

定义枚举

  • 根据需求定义花色和牌号两个枚举
enum CardColors{None,//这里考虑到小王大王所以需要定义一个空花色Heart,Block,PlumBlossom,Spade}enum CardNums{Three,//根据牌的大小顺序定义,默认Three的int值为0Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King,One,Two,SmallJoker,BigJoker}

定义Card类

class Card{//卡牌的名字(字段和属性)private string cardName;public string CardName{get { return cardName; }}//卡牌的花色(字段和属性)private CardColors cardColor;public CardColors CardColor{get { return cardColor; }}//卡牌的牌号(字段和属性)private CardNums cardNum;public CardNums CardNum{get { return cardNum; }}//Card类的构造函数 这里需要定义卡牌的花色和牌号public Card(CardColors cardColor, CardNums cardNum){this.cardColor = cardColor;this.cardNum = cardNum;CardNameInit();//卡牌名通过构造函数进行初始化}//卡牌名初始化函数private void CardNameInit(){cardName = cardColor.ToString() + cardNum.ToString();}}

定义CardLibrary类

class CardLibrary{//单例模块 方便在Main函数中直接调用private static CardLibrary instance;public static CardLibrary Instance{get{if (instance == null)instance = new CardLibrary();return instance;}}private Random random;//私有的随机数//私有的牌库private List<Card> cards;//卡牌数量属性public int CardCount{get { return cards.Count; }}//索引器public Card this[int index]{get { return cards[index]; }}//构造函数 这里对字段属性进行初始化public CardLibrary(){cards = new List<Card>();CardsInit();random = new Random();}//牌库初始化public void CardsInit(){for (int i = 1; i <= 4; i++)//四个花色{for (int j = 0; j <= 12; j++)//十二个牌号(这里不包括大小王){cards.Add(new Card((CardColors)i, (CardNums)j));//这里对i,j进行显示转换}}cards.Add(new Card(CardColors.None, CardNums.SmallJoker));cards.Add(new Card(CardColors.None, CardNums.BigJoker));//单独将大小王加进去}//发牌(单个的)public Card HandOutCard(){Card card = cards[CardCount - 1];cards.Remove(card);return card;}//这里做了一个针对斗地主的发牌,将卡牌均分到每个玩家的手中public void HandOutCard(Player[] players){int cardsNum = CardCount;foreach (Player player in players){for (int i = 0; i < cardsNum / players.Length; i++){player.Cards.Add(HandOutCard());}}}//洗牌方法public void ReShuffleCard(){for (int i = 0; i < CardCount; i++)//每次都和最末尾的牌进行交换{int num = random.Next(0, CardCount - i);//每交换一次,随机数范围减少1Card temp = cards[num];cards[num] = cards[CardCount - i - 1];cards[CardCount - i - 1] = temp;}}//展示牌库中所有牌public void ShowCards(){foreach (Card card in cards){Console.Write(card.CardName + " ");}}}

*定义Player类

class Player{public List<Card> Cards { get; set; }public string PlayerName { get; set; }public Player(string playerName){PlayerName = playerName;Cards = new List<Card>();}public void ShowCards(){Console.WriteLine("{0}卡牌", PlayerName);foreach (Card card in Cards){Console.Write(card.CardName + " ");}}}

Main函数中实现

    class Program{static void Main(string[] args){//初始化Player[] players = new Player[] { new Player("玩家1"),new Player("玩家2"),new Player("玩家3"),new Player("玩家4") };Console.WriteLine("洗牌前");CardLibrary.Instance.ShowCards();Console.WriteLine();CardLibrary.Instance.ReShuffleCard();Console.WriteLine("\r\n洗牌后");CardLibrary.Instance.ShowCards();Console.WriteLine();//发牌CardLibrary.Instance.HandOutCard(players);//展示玩家卡牌foreach (Player player in players){Console.WriteLine();player.ShowCards();Console.WriteLine();}}}

结果展示

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

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

相关文章

自助棋牌室

1项目模块:商家模块(店铺展示、包厢展示、订单、订单搜索、店铺搜索) 用户模块(登录、注册、预约、充值、更换头像、续单、退单) 2项目技术:前端:js、jquery、vue2、vue3、后端:jdbc、java、servlet、mybatis 3功能实现: I 登录功能实现: 主要通过前后端交互实现,前后端实现流…

算法通过村第四关-栈白银笔记|手写栈操作

文章目录 前言1. 栈的基础概要1.1 栈的特征1.2 栈的操作1.3 Java中的栈 2. 栈的实现&#xff08;手写栈&#xff09;2.1 基于数组实现2.2 基于链表实现2.3 基于LinkedList实现 总结 前言 提示&#xff1a;我自己一个人的感觉很好 我并不想要拥有你 除非你比我的独处更加宜人 --…

【问题解决】无法加载文件 C:\Users\PJW\AppData\Roaming\npm\hpm.ps1,因为在此系统上禁止运行脚本

问题&#xff1a; PS Y:\BearPi-HM_Nano> hpm dist hpm : 无法加载文件 C:\Users\PJW\AppData\Roaming\npm\hpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policie…

intellj 无法运行程序

RT 在写作业的时候&#xff0c;导入老师项目&#xff0c;但是无法执行文件。 在这里插入图片描述 在项目模块中&#xff0c;添加内容根。添加目标源文件夹&#xff0c;解决问题。

【报错】nrm : 无法加载文件 …路径… ,因为在此系统上禁止运行脚本。

原因&#xff1a;核心是power shell的安全策略&#xff0c;将 nrm 命令视为了不安全脚本&#xff0c;不允许执行。只需要放开权限就行。 解决&#xff1a;通过管理员权限运行power shell&#xff0c;然后输入命令 set-ExecutionPolicy RemoteSigned 示例&#xff1a; 选择“是”…

com.android.phone已停止运行怎么解决方法,com.android.phone进程意外停止/已停止运行的原因及解决方法...

com.android.phone已停止怎么解决?小编带来了com.android.phone进程意外停止解决方法&#xff0c;有机友表示当手机刷机或root后就会出现“进程com.android.phone已停止”提示&#xff0c;不妨试一试下文的解决方法哦~ --原因 出现这种情况表明你的手机运行环境出现了比较大的…

在运行Android程序出现“×××已停止运行”

在运行Android程序时出现“已停止运行”的情况&#xff0c;点击“重新打开应用”后又提示“屡次停止运行”&#xff0c; 发现在Logcat中有这么一行提示&#xff1a;“Caused by: java.lang.NullPointerException: Attempt to invoke virtual method android.view.View android.…

无法加载文件 ,因为在此系统上禁止运行脚本

1 问题 在打开cmd命令行文件或者某个shell时&#xff0c;运行某个文件失败&#xff0c;并且显示无法加载文件 &#xff0c;因为在此系统上禁止运行脚本。可能是因为你当前的shell窗口权限不够导致&#xff0c;可以先打开管理员权限的shell之后&#xff0c;修改脚本运行的策略即…

因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; npm安装包后无法使用&#xff0c; 例如&#xff1a;npm install -g json-server 安装成功后 使用json-server命令 报错&#xff0c;如果没有安装过此包&#xff0c;一般会提示不是内部或者外部命令 问…

windows 已停止這個裝置,因為它發生了問題。

您的電腦在接入外接式裝置時出現" Windows 已停止這個裝置&#xff0c;因為它發生了問題。 (代碼 43)"&#xff0c;如何解決&#xff1f; 一般情況下&#xff0c;是由於裝置非正常接入所引起的裝置驅動程式出現故障的錯誤&#xff0c;此時多插拔幾次即可解決。但如果…

Windows启动和停止jar包命令

一、windows启动jar包命令 命令放到 bat文件中 1、普通启动 title XXX chcp 65001 java -Dfile.encodingutf-8 -jar XXX.jar加上-Dfile.encodingutf-8后&#xff0c;不乱码 加上chcp 65001后&#xff0c;日志的中文不乱码 注&#xff1a;这种方式启动后&#xff0c;窗口不能…

因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?Link ID=135170 中的 about_Execution_Policies

出现的问题描述 在 Pycharm 的虚拟环境中&#xff0c;打开终端&#xff0c;有红字提示 重点关注的就是在此系统上禁止运行脚本 这是因为PowerShell的执行策略不允许运行脚本 有两种方法可以解决 解决办法 方法一&#xff1a;修改PowerShell的执行策略 以管理员方式运行Powe…

无法加载文件,因为在此系统上禁止运行脚本。

1.vscode报错,nodemon :因为在此系统上禁止运行脚本。 注意:不仅仅适用于nodemon报错,报在此系统上禁止运行脚本的错都可以用以下方法解决 2.报错原因分析:windows 为了安全,默认的执行策略为 Restricted,因此需要将执行策略设置为 RemoteSigned 即可 3.解决方法 步骤: 1.…

四种方式解决idea中出现 运行配置停止之前未连接应用程序服务器原因:无法在 localhost:1099 处 ping 服务器

出现这种问题的原因很多 第一种&#xff1a;项目结构那里没有选JDK 第二种&#xff1a;Tomcat版本和JDK版本不兼容&#xff0c;这就要我们手动更改Tomcat或者JDK版本了 我们先查看自己的Tomcat版本&#xff0c;首先点开黄色那个圈&#xff0c;照着图片依次进行 这里一定要点进…

IE浏览器卡死提示是否停止运行此脚本的解决办法

IE浏览器经常卡死&#xff0c;报是否停止运行此脚本&#xff0c;严重影响使用体验&#xff0c;下面小编教大家怎么解决这个问题&#xff0c;供大家参考&#xff01; 1、启动IE浏览器&#xff0c;点击上方菜单栏位的工具&#xff0c;如下图所示 2、在工具栏位选择internet选项&a…

2023 江苏省研究生数学建模 A 题思路

2023年江苏省研究生数学建模科研创新实践大赛A题新型抗癌药物研究模型探索靶向治疗是治疗肿瘤疾病的一种重要方法&#xff0c;它具有针对性强、疗效显著等特点。现有的靶向药物通常针对特定的基因突变靶点&#xff0c;容易出现耐药性。目前&#xff0c;一种由癌症诱发的血管新生…

磁盘区号 linux,DOS下确定活动主分区和最后分区的区号和盘符的工具

Ghost自动备份时&#xff0c;活动主分区、最后分区号与盘符的确定思路和批处理 使用了第三方软件minitow(for win)/minito(for dos)&#xff0c;软件下载及使用可去dos联盟。 一、windows下解决方案 (一)思路 1&#xff0c;用minitow获得硬盘信息。实例如下&#xff1a; &#…

(转)Windows7轻松备份--“Windows7一键恢复”简明教程

http://gghost.cn/help/win7gghost/ Windows7轻松备份--“Windows7一键恢复”简明教程1. Windows7一键恢复简介Windows7一键恢复是基于ghost(v11.02)和grub4dos的系统备份和还原工具&#xff0c;具有良好的兼容性和易用性。专为Windows 7量身打造&#xff0c;支持32位及64位系…

安装系统之六 U盘装GHOST WIN7教程

第一步 将准备好的u启动u盘启动盘插在电脑usb接口上&#xff0c;然后重启电脑&#xff0c;在出现开机画面时通过u盘启动快捷键进入到u启动主菜单界面&#xff0c;选择【02】U启动Win8PE标准版&#xff08;新机器&#xff09;选项&#xff1a; 第二步&#xff1a; 进入pe系统u…

目标检测算法——YOLOv5/YOLOv7改进结合轻量型Ghost模块

>>>深度学习Tricks&#xff0c;第一时间送达<<< 论文题目&#xff1a;《GhostNet&#xff1a;More Features from Cheap Operations》论文地址&#xff1a; https://arxiv.org/pdf/1911.11907v1.pdf 由于内存和计算资源有限&#xff0c;在嵌入式设备上部署…