C#扑克洗牌,发牌

本文介绍了一个使用C#编写的扑克牌模拟程序,详细解释了如何通过枚举、结构体和类来实现一副标准扑克牌的创建、洗牌和发牌功能。程序涵盖了花色和面值的定义,以及牌的显示输出方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CardEmulation
{
    class Program
    {
        static void Main(string[] args)
        {
            Card card=new Card();
            card.Deal();
            card.Shuffle();
            card.Deal();
        }
    }
    /// <summary>
    /// 枚举一副牌的4个花色
    /// </summary>
    enum CardSuit
    {//Club:♣;Diamond:♦;Heart:♥;Spade
        Club,Diamond,Heart,Spade
    }
    /// <summary>
    /// 枚举每个花色13个面值
    /// </summary>
    enum CardFace
    {
        Ace=1,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King
    }
    /// <summary>
    /// 一张牌的结构
    /// </summary>
    struct CNode{
        public CardSuit cardSuit;
        public CardFace cardFace;
        /// <summary>
        /// 显示输出
        /// </summary>
        /// <returns></returns> 
        public override string ToString()
        {
            //return base.ToString();
            var s = string.Empty;
            switch ((int)cardSuit)
            {
                case 0:
                    s += "梅花";
                    break;
                case 1:
                    s += "方块";
                    break;
                case 2:
                    s += "红心";
                    break;
                case 3:
                    s += "黑桃";
                    break;
            }
            switch ((int)cardFace)
            {
                case 1:
                    s += "A";
                    break;
                case 11:
                    s += "J";
                    break;
                case 12:
                    s += "Q";
                    break;
                case 13:
                    s += "K";
                    break;
                default:
                    s += ((int)cardFace).ToString();
                    break;
            }
            return s;

        }
    }
    class Card
    {
        private const int CARDNUMBER = 52;
        private const int FACENUMBER = 13;
        private CNode[] deck=new CNode[CARDNUMBER];
        /// <summary>
        /// 构造方法
        /// </summary>
        public Card(){
                        //初始化一副新牌,52张牌按顺序放置
            for(int i=0;i<deck.Length;i++){
                deck[i].cardFace=(CardFace)(i%FACENUMBER+1);
                deck[i].cardSuit=(CardSuit)(i/FACENUMBER);
            }
        }
        /// <summary>
        /// 发牌
        /// </summary>
        public void Deal(){
            Console.WriteLine("===========52张牌的发牌次序============");
            Console.WriteLine("东  \t\t 西 \t \t南 \t\t北");
            for(int i=0;i<CARDNUMBER;i++){
                Console.Write("第{0,2}张{1}\t",i+1,deck[i]);
                if((i+1)%4==0){
                    Console.WriteLine();
                }
            }    
            Console.WriteLine();
        }
         /// <summary>
        /// 洗牌,任意交换2张牌的位置
        /// </summary>
        public void Shuffle(){
            var r=new Random();
            for(int i=0;i<CARDNUMBER;i++){
                var j=r.Next(0,CARDNUMBER);
                var temp=deck[i];
                deck[i]=deck[j];
                deck[j]=temp;
            }
        }
    }
}

红桃bai(heart).对应圣杯,象征爱情及各种情感du、感性思维。圣杯在塔罗中代zhi表情感,因此相对应的红桃dao被设计为心形,暗示爱情。

梅花(club).对应权杖,象征权力与热情。梅花的英文club意为“棍,杖”,正好对应塔罗中的权杖。由此可以看出,梅花与三叶草没有任何关系。此前流行的“梅花形如三叶草代表幸运”的说法更是无稽之谈。

方块(diamond).对应钱币(又称星币、星星),象征财富。方块的英文diamond意为“钻石”,代表财富,恰好对应塔罗中的钱币。同时方块的形状也与塔罗图案中的星币极其相似。

黑桃(spade).对应宝剑,象征正义、战争与灾难。spade是铲子,也是武器。象征战争。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值