C#入门教程(Beginning in C#)第10章习题5
来源:互联网 发布:matlab求矩阵的行列式 编辑:程序博客网 时间:2024/06/10 19:18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ch10CardLib;
namespace Execise05
{
class Program
{
static void Main(string[] args)
{
Deck playDeck = new Deck();
playDeck.Shuffle();
bool isFlush = false;
int flushHandIndex = 0;
for (int hand = 0; hand < 10;hand++ )
{
isFlush = true;
Suit flushSuit = playDeck.GetCard(hand * 5).suit;//第一张牌,第6张,第13张牌……45张
for (int card = 1; card < 5;card++ )//抽取5张牌
{
//hand*5=+card=0*5+1=1,从第二张牌开始抽取,看是否与第一次抽取的牌,flushSuit,花色是否相同
if (playDeck.GetCard(hand*5+card).suit!=flushSuit)
{
isFlush = false;
break;
}
}
if (isFlush)
{
flushHandIndex = hand * 5;
break;
}
}
if (isFlush)
{
Console.WriteLine("同花色!");
for (int card = 0; card < 5;card++)
{
Console.WriteLine(playDeck.GetCard(flushHandIndex + card));
}
}
else
{
Console.WriteLine("没有同花色!");
}
Console.ReadKey();
}
}
}
对参考答案的修改为此段:
因为是5张牌要连续抽取,且需要同花色,于是如果有一张不是同花色,就可以跳出此循环, 不然循环次数为36次,使用break后最多十几次循环。
CLassLib.dll中的类图:
关键类Deck:
对参考答案的修改为此段:
for (int card = 1; card < 5;card++ )//抽取5张牌
{
//hand*5=+card=0*5+1=1,从第二张牌开始抽取,看是否与第一次抽取的牌,flushSuit,花色是否相同
if (playDeck.GetCard(hand*5+card).suit!=flushSuit)
{
isFlush = false;
break;
}
} 因为是5张牌要连续抽取,且需要同花色,于是如果有一张不是同花色,就可以跳出此循环, 不然循环次数为36次,使用break后最多十几次循环。
CLassLib.dll中的类图:
关键类Deck:
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++ )
{
//举例:suitVal=0,rankVal=1;cards[0*13+1-1]=cards[0],new Card((Suit)0,(Rank)1).
//枚举默认值为0,所以Suit从0开始,Rank默认值设定为1
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, "值必须在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);
}
}
0 0
- C#入门教程(Beginning in C#)第10章习题5
- C Peimer 第10章编程习题
- C++Primer习题第10章
- Beginning ASP.NET in C#
- Java - Thinking in Java 第5章 习题
- C primer plus第10章(指针)习题
- C++Primer第10章关联容器习题
- Primer C 4th(第5章习题)
- 《C程序设计教程》第5章习题9
- 《C程序设计教程》第5章习题6
- c primer plus第14章习题
- C++primer第9章习题解答
- C语言程序设计第1章习题
- C++primer第14章习题解答
- C++primer第15章习题解答
- c++primer plus 第12章习题
- C Peimer第11章编程习题
- C Peimer 第12章编程习题
- java截取文件上传或下载的文件名及后缀
- Django中数据库的配置
- 迭代器的介绍及游戏商城的介绍
- PHP-超全局变量
- Unity3D学习之(照相机属性了解)
- C#入门教程(Beginning in C#)第10章习题5
- 博客开张了
- 题目1507:不用加减乘除做加法
- 正则表达式
- 自定义的打印宏
- LeetCode-Merge Sorted Array
- 图像仿射变换及图像扭曲(Image Warping)
- CEPH 命令随机整理~持续补充
- android如何让service不被杀死