1.库

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace CardLib
{
public enum Suit
{
Club,
Diamond,
Heart,
Spade
}
}

Suit

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace CardLib
{
public enum Rank
{ Ace=,
Deuce,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
Queen,
King
}
}

Rank

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace CardLib
{
public class Card
{
public readonly Rank rank;
public readonly Suit suit; private Card()
{ }
public Card(Suit newSuit, Rank newRank)
{
suit = newSuit;
rank = newRank;
} public override string ToString()
{
return "The " + rank + " of " + suit + "s\n";
}
}
}

Card

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CardLib {
public class Deck
{
private Card[] cards; public Deck()
{
cards = new Card[];
for(int suitVal=;suitVal<;suitVal++)
{
for(int rankVal=;rankVal<;rankVal++)
{
cards[suitVal * + rankVal - ] = new Card((Suit)suitVal, (Rank)rankVal);
}
}
} public Card GetCard(int cardNum)
{
if (cardNum >= && cardNum <= )
return cards[cardNum];
else
throw (new System.ArgumentOutOfRangeException("cardNum", cardNum, "Value must be between 0 and 51."));
} public void Shuffle()
{
Card[] newDeck = new Card[];
bool[] assigned = new bool[];
Random sourceGen = new Random();
for (int i = ;i < ;i++)
{
int destCard = ;
bool foundCard = false;
while(foundCard==false)
{
destCard = sourceGen.Next();
if (assigned[destCard] == false)
foundCard = true;
}
assigned[destCard] = true;
newDeck[destCard] = cards[i];
} newDeck.CopyTo(cards, );
} }
}

Deck

2.输出卡牌

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CardLib; namespace CardClient
{
class Program
{
static void Main(string[] args)
{
Deck myDeck = new Deck();
myDeck.Shuffle();
for(int i=;i<;++i)
{
Card tempCard = myDeck.GetCard(i);
Console.Write(tempCard.ToString());
//if (i != 51)
// Console.Write(",");
//else
// Console.WriteLine();
}
Console.ReadKey(); }
}
}

Program

3.练习

为 Ch10CardLib 库编写一个控制台客户程序,从洗牌后的 Deck 对象中一次取出 5 张牌。如果这 5 张牌都是相同花色,客户程序就应在屏幕上显示这 5 张牌,以及文本 "Flush!",否则在取出 50 张牌以后就输出文本 “No flush”,并退出。

 /* 为 CardLib 库编写一个控制台客户程序,从洗牌后的 Deck 对象中一次取出 5 张牌。如果这 5 张牌都是相同花色,
客户程序就应在屏幕上显示这 5 张牌,以及文本 "Flush!",否则在取出 50 张牌以后就输出文本 “No flush”,并退出。*/ //改成了随机抽取五张牌 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; //ArrayList类
using CardLib; namespace ConsoleApp1
{
class Exercise
{
static void Main(string[] args)
{ Random randomCard = new Random(); //随机卡号
Card[] handCard=new Card[]; // 五张手牌
Deck myDeck = new Deck();
bool isFlush = true; List<int> remainCard = new List<int>(); //创建List存放52张卡号 for (int i = ; i < ; ++i)
{
remainCard.Add(i);
} //输出洗牌后的结果
Console.WriteLine("The Result after shuffle : ");
myDeck.Shuffle();
for(int i=;i<;++i)
{
Console.WriteLine((i+) + " : "+ myDeck.GetCard(i).ToString());
} //循环抽卡,每次五张,童叟无欺
for (int j = ; j < ; j++)
{
Console.WriteLine("Round : " + (j+) + " Draw! "); for (int i = ; i < ; ++i)
{
int num = randomCard.Next(, - i - j * );
handCard[i] = myDeck.GetCard(remainCard[num]);
remainCard.RemoveAt(num); //RemoveAt()方法是按照index移除
Console.WriteLine("card " + (i+) + " " + handCard[i]); //判断花色
if (handCard[i].suit != handCard[].suit)
{
isFlush = false;
}
} //判断是否Flush
if(isFlush)
{
Console.WriteLine("Flush !");
break; }
else
{
Console.WriteLine("No Flush");
}
}
Console.ReadKey();
}
}
}

Exercise

在这里大致说下Remove()和RemoveAt()的区别

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections; namespace ConsoleApp28
{
class Program
{
static void Main(string[] args)
{ //Remove()是按照内容移除
List<int> listRemove = new List<int>(); //添加两个数据5和15
listRemove.Add();
listRemove.Add();
listRemove.Remove(); //没实际效果,因为listRemove中没有0
Console.WriteLine("listRemove[0] = " + listRemove[]);
Console.WriteLine("listRemove[1] = " + listRemove[]);
listRemove.Remove();
Console.WriteLine("listRemove.Remove(5)后,listRemove[0] = " + listRemove[]); //RemoveAt()是按照index移除
List<int> listRemoveAt = new List<int>(); //添加两个数据5和15
listRemoveAt.Add();
listRemoveAt.Add();
//listRemoveAt.RemoveAt(2); // 报错,因为超出范围
Console.WriteLine("listRemoveAt[0] = " + listRemoveAt[]);
Console.WriteLine("listRemoveAt[1] = " + listRemoveAt[]);
listRemoveAt.RemoveAt();
Console.WriteLine("listRemove.RemoveAt(0)后,listRemoveAt[0] = " + listRemoveAt[]); Console.ReadKey();
}
}
}

remove & removeAt

此外这篇博文里写的很详细,在使用后要注意长度和内容会改变

https://blog.csdn.net/weixin_39800144/article/details/77915981

拙见如图:

可以理解为把这个小方格直接biu掉(误|||),全都往前移

C#入门经典第十章例题 - - 卡牌的更多相关文章

  1. C#入门经典第十章接口的实现

  2. C#入门经典第十章类的成员-1

    类成员的访问级别 public   成员可以由任何代码访问,公共的. private 私有的,成员只能有类中的代码访问.(默认的关键字) internal 内部的,成员只能有定义它的程序集(项目)内部 ...

  3. C链表-C语言入门经典例题

    struct student { long num; float score; struct student *next; }; 注意:只是定义了一个struct student类型,并未实际分配存储 ...

  4. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  5. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  6. 使用UIKit制作卡牌游戏(三)ios游戏篇

    译者: Lao Jiang | 原文作者: Matthijs Hollemans写于2012/07/13 转自朋友Tommy 的翻译,自己只翻译了这第三篇教程. 原文地址: http://www.ra ...

  7. 强烈推荐visual c++ 2012入门经典适合初学者入门

    强烈推荐visual c++ 2012入门经典适合初学者入门 此书循序渐进,用其独特.易于理解的教程风格来介绍各个主题,无论是编程新手,还是经验丰富的编程人员,都很容易理解. 此书的目录基本覆盖了Wi ...

  8. 在WebGL场景中管理多个卡牌对象的实验

    这篇文章讨论如何在基于Babylon.js的WebGL场景中,实现多个简单卡牌类对象的显示.选择.分组.排序,同时建立一套实用的3D场景代码框架.由于作者美工能力有限,所以示例场景视觉效果可能欠佳,本 ...

  9. python实例:解决经典扑克牌游戏 -- 四张牌凑24点 (一)

    Hey! Hope you had a great day so far! 今天想和大家讨论的是一道我从这学期cs的期末考试得到灵感的题:Get 24 Poker Game.说到 Get 24 Pok ...

随机推荐

  1. Android 4.4系统获取root权限的方法

    1. 准备工作: 准备一台ubuntu机器,将boot.img复制到该机器上,下载必要的工具sudo apt-get install abootimggit clone https://github. ...

  2. 【Step By Step】将Dotnet Core部署到Docker下

    一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core—使用.Net Core + Entity FrameWor ...

  3. JAVA类加载和初始化

    JAVA类的加载和初始化 一.类的加载和初始化过程 JVM将类的加载分为3个步骤: 1.加载(Load):class文件创建Class对象. 2.链接(Link) 3.初始化(Initialize) ...

  4. Java中的集合框架-Collections和Arrays

    上一篇<Java中的集合框架-Map>把集合框架中的键值对容器Map中常用的知识记录了一下,本节记录一下集合框架的两个工具类Collections和Arrays 一,Collections ...

  5. source .bashrc 报错:virtualenvwrapper.sh: There was a problem running the initialization hooks.

    在Ubuntu下安装完virtualenv.virtualenvwrapper,然后设置环境文件 .bashrc 接着 source .bashrc,产生错误信息 首先确认了 libpam-mount ...

  6. CentOS6安装各种大数据软件 第九章:Hue大数据可视化工具安装和配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  7. MySQL数据库的隔离级别之可重复读为什么能够有效防止幻读现象的出现

    可重复读隔离级别,不允许存在幻读,该隔离级别之所以能够有效防止幻读现象的出现,是因为可重复读这个隔离级别有用到GAP锁(间隙锁).下面我们以解析SQL语句为切入点,来解释个中原因. 前提条件:①数据库 ...

  8. HAProxy负载均衡策略

    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理.HAProxy是支持虚拟主机的,HAProxy的优点能够补充Nginx的一些 ...

  9. PHP Ajax跨域问题解决办法

    在项目开发中,经常会遇到跨域访问资源,上传图片等,那么这些都怎么解决呢,下面简单介绍一下ajax请求时,解决跨域问题. 原文地址:小时刻个人博客 > http://small.aiweimeng ...

  10. django中的auth详解

     Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等 ...