多个类混合使用,实现扑克牌随机创建和展示

简介:

只要是同一个namespace,就可以当作是在一个文件中一样!

Suit.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo
{
    public enum Suit
    {
        梅花,
        黑桃,
        红桃,
        方片
    }
}

Rank.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo
{
    public enum Rank
    {
        Ace = 1,
        Deuce,
        Three,
        Four,
        Five,
        Six,
        Seven,
        Eight,
        Nine,
        Ten,
        Jack,
        Queen,
        King,
    }
}

Card.cs基础

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo
{
    public class Card
    {
        public readonly Suit suit;
        public readonly Rank rank;

        public Card(Suit newSuit,Rank newRank)
        {
            suit = newSuit;
            rank = newRank;
        }


        private Card()
        {

        }

        public override string ToString()
        {
            return "The " + rank + " of " + suit;
        }
    }
}

Deck.cs核心

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo
{
    public class Deck
    {
        private Card[] cards;
        public Deck()
        {
            cards = new Card[52];
            for (int suitVal = 0;suitVal < 4;suitVal ++)
            {
                for (int rankVal = 1;rankVal < 14;rankVal ++)
                {
                    cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal,(Rank)rankVal);
                }
            }
        }

        // 获取牌
        public Card GetCard(int cardNum)
        {
            if (cardNum >=0 && cardNum <= 51) // 共52张牌,不包含大小王
            {
                return cards[cardNum];
            }
            else
            {
                throw (new System.ArgumentOutOfRangeException("cardNum",cardNum, "cardNum必须是0到51的数字"));
            }
        }

        // 随机发牌
        public void Shuffle()
        {
            Card[] newDeck = new Card[52];
            bool[] assigned = new bool[52];
            Random sourceGen = new Random();
            for (int i=0;i<52;i++)
            {
                int destCard = 0;
                bool foundCard = false;
                while(foundCard == false)
                {
                    destCard = sourceGen.Next(52); //返回一个小于所指定最大值的非负随机数
                    if (assigned[destCard] == false) // 如果这个数字没有复制就跳出循环,给这个数字赋值
                    {
                        foundCard = true;
                    }
                }
                assigned[destCard] = true;
                newDeck[destCard] = cards[i];
            }
            newDeck.CopyTo(cards,0);
        }
    }
}

Program.cs主执行

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Deck myDeck = new Deck();
            myDeck.Shuffle(); // 随机创建52张牌
            for (int i=0;i<52;i++)
            {
                Card tempCard = myDeck.GetCard(i);
                Console.WriteLine(tempCard.ToString());
            }
            Console.ReadKey();
        }
    }
}
本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6775498.html,如需转载请自行联系原作者

相关文章
|
数据可视化
R绘图 | 包含/比例关系环图
R绘图 | 包含/比例关系环图
179 0
|
移动开发 文字识别 算法
论文推荐|[PR 2019]SegLink++:基于实例感知与组件组合的任意形状密集场景文本检测方法
本文简要介绍Pattern Recognition 2019论文“SegLink++: Detecting Dense and Arbitrary-shaped Scene Text by Instance-aware Component Grouping”的主要工作。该论文提出一种对文字实例敏感的自下而上的文字检测方法,解决了自然场景中密集文本和不规则文本的检测问题。
1956 0
论文推荐|[PR 2019]SegLink++:基于实例感知与组件组合的任意形状密集场景文本检测方法
文本---视频网站好的构思,应该有类别构思,一个类别能够将它呈现出列表集合,以列表排序,如何完成类别构建,使之展现同一类,是一个好的视频写法
文本---视频网站好的构思,应该有类别构思,一个类别能够将它呈现出列表集合,以列表排序,如何完成类别构建,使之展现同一类,是一个好的视频写法
|
7月前
|
存储 数据库
【随手记】顺序I/O和随机I/O的定义和区别
【随手记】顺序I/O和随机I/O的定义和区别
227 1
|
传感器 编解码 计算机视觉
使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)
使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)
158 0
使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)
|
Python
用Python语言对任意图像进行m*n的均匀分块(思路非常清晰,步骤简单)
用Python语言对任意图像进行m*n的均匀分块(思路非常清晰,步骤简单)
227 0
|
算法 C++
<<算法很美>>——(四)——深入递归<二>——“逐步生成结果“类问题之非数值型
<<算法很美>>——(四)——深入递归<二>——“逐步生成结果“类问题之非数值型
<<算法很美>>——(四)——深入递归<二>——“逐步生成结果“类问题之非数值型
|
JSON 定位技术 数据格式
基于GEE的制作全球任意地方时间序列数据动画的方法
基于GEE的制作全球任意地方时间序列数据动画的方法
205 0
|
uml
(设计题)造一个凳子(stool)是由三个圆柱体组成,分别表示它的 顶部,中部和底部。计算凳子的体积和表面积(忽略重叠的部分)。 请设计UML图(包括类以及类的关系,可以省略方法和属性),并完成代码。
(设计题)造一个凳子(stool)是由三个圆柱体组成,分别表示它的 顶部,中部和底部。计算凳子的体积和表面积(忽略重叠的部分)。 请设计UML图(包括类以及类的关系,可以省略方法和属性),并完成代码。
174 0
(设计题)造一个凳子(stool)是由三个圆柱体组成,分别表示它的 顶部,中部和底部。计算凳子的体积和表面积(忽略重叠的部分)。 请设计UML图(包括类以及类的关系,可以省略方法和属性),并完成代码。