10_9_5为Ch10CardLib库编写一个控制台客户程序,从扰乱的Deck对象中一次取出5张牌.如果这5张牌都是相同的花色,客户程序就应在屏幕上显示这5张牌,以及文本"Flush",否则就显示50

//file name Suit.Cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ch10CardLib
{
    public enum Suit
    { 
        Club,   //梅花
        Diamond,    //方块
        Heart,      //红桃
        Spade   //黑桃.
    }
}

//file name Rank.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ch10CardLib
{
    public enum Rank    //牌的点数.
    { 
        Ace=1,
        Deuce,
        Three,
        Four,
        Five,
        Six,
        Seven,
        Eight,
        Nice,
        Ten,
        Jack,
        Queen,
        King
    }
}

//file name Cards.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ch10CardLib
{

    //Card 表示一张标准的扑克牌,包含4种花色,顺序是A-K
    public class Card
    {
        //修改为公开的字段.
        public readonly Suit suit;
        public readonly Rank rank;
        public Card()
        { 
            
        }

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

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

    }
}

//file name Deck.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ch10CardLib
{
    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)
            {
                return cards[cardNum];
            }
            else
            {
                throw (new System.ArgumentOutOfRangeException("cardNum",cardNum,
                    "Value must be between 0 and 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;
                }
                newDeck[destCard] = cards[i];
                assigned[destCard] = true;
            }

            newDeck.CopyTo(cards, 0);
        }
    }//end deck.

}

// CopyTo摘要:
//     将当前一维 System.Array 的所有元素复制到指定的一维 System.Array 中(从指定的目标 System.Array 索引开始)。索引指定为
//     32 位整数。
//
// 参数:
//   array:
//     一维 System.Array,它是从当前 System.Array 复制的元素的目标位置。
//
//   index:
//     一个 32 位整数,它表示 array 中复制开始处的索引。

//file name Ch10CardClient.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Ch10CardLib;

namespace Ch10CardClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Deck myDeck = new Deck();
            Card[] cards;
            int numSuit=0;
            int icount=0;



            cards = new Card[5];

     //       while (true)
      //      {
                myDeck.Shuffle();
                icount = 0;
                for (int i = 0; i < 5; i++)
                {
                    cards[i] = myDeck.GetCard(i);
                }

                for (int i = 0; i < 5; i++)
                {
                    if (cards[0].suit == cards[i].suit)
                    {
                        icount++;
                    }
                }
      //          if (icount == 5)
      //              break;
      //      }


            if (icount == 5)
            {
                Console.WriteLine("Flush .\n ");
                for (int i = 0; i < 5; i++)
                {
                   Console.WriteLine( cards[i].ToString());
                }
            }
            else
            {
                Console.WriteLine("No flush .\n");
                for (int i = 0; i < 50; i++)
                {
                    Console.WriteLine(myDeck.GetCard(i));
                }
            }


            //    Console.ReadKey();
        
         
        }
    }
}

 

 

Ps:可以修改程序,得出5张牌为同花顺要循环多少次.

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值