using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HW5
{
class CardDeck
{
public PokerCard[] Deck = new PokerCard[52];
public void CreateDeck()
{
for (int i = 0; i < 52; i++)
{
Deck[i] = new PokerCard(i / 13, i % 13 + 1);
}
}
public void ResetDeck()
{
for (int i = 0; i < 52; i++)
{
Deck[i].Suit = i / 13;
Deck[i].Rank = i % 13 + 1;
}
}
public void Shuffle()
{
//亂數產生器
Random rand = new Random();
PokerCard temp;
int RandNum;
for (int i = 0; i < 52; i++)
{
RandNum = rand.Next(52);
temp = Deck[i];
Deck[i] = Deck[RandNum];
Deck[RandNum] = temp;
}
}
}
}
===================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HW5
{
class HandCard
{
public PokerCard[] Hand = new PokerCard[5];
private static string[] Type = { "Zilch", "One Pair", "Two Pairs", "Three of a kind", "Straight", "Flush", "Fullhouse", "Four of a Kind", "Straight Flush" };
int TopIndex = 0;
private bool isSort = true;
public void Draw(CardDeck D)
{
for (int i = 0; i < 5; i++)
{
if (TopIndex >= 50)
{
D.ResetDeck();
D.Shuffle();
TopIndex = 0;
}
Hand[i] = D.Deck[TopIndex];
TopIndex++;
}
}
public void Draw(CardDeck D,int Limit)
{
int Lnum = 0;
while (Lnum<Limit)
{
for (int i = 0; i < 5; i++)
{
if (TopIndex >= 50)
{
D.ResetDeck();
D.Shuffle();
TopIndex = 0;
}
Hand[i] = D.Deck[TopIndex];
TopIndex++;
}
Lnum++;
}
TopIndex += 5;
}
public void Sort()
{
PokerCard temp;
for (int i = 0; i < 5; i++)
{
for (int j = 1; j < 5; j++)
{
if (Hand[j - 1].Rank > Hand[j].Rank)
{
temp = Hand[j - 1];
Hand[j - 1] = Hand[j];
Hand[j] = temp;
}
}
}
}
public int CardsTypeNum()
{
if (!isSort)
Sort();
int Num = 0;
//判斷對子數目
int TypeNum = 0;
for (int i = 0; i < 5; i++)
{
for (int j = i + 1; j < 5; j++)
{
if (Hand[i].Rank == Hand[j].Rank)
TypeNum++;
}
}
switch (TypeNum)
{
case 0:
Num = 0;
break;
case 1:
Num = 1;
break;
case 2:
Num = 2;
break;
case 3:
Num = 3;
break;
case 4:
Num = 6;
break;
case 6:
Num = 7;
break;
}
//判斷同花
int FlushNum = 0;
for (int i = 1; i < 5; i++)
{
if (Hand[0].Suit == Hand[i].Suit)
FlushNum++;
}
if (FlushNum == 4)
Num = 5;
//判斷順子
int StraightNum = 0;
for (int i = 1; i < 5; i++)
{
if (Hand[i - 1].Rank + 1 == Hand[i].Rank)
{
StraightNum++;
if (Hand[i - 1].Rank == 13 && Hand[i].Rank == 1)
StraightNum++;
}
}
if (StraightNum == 4)
Num = 4;
//判斷同花順
if (FlushNum == 4 && StraightNum == 4)
Num = 8;
return Num;
}
public string TypeNumToStr()
{
return Type[CardsTypeNum()];
}
public string TypeProbability(CardDeck D,int Order)
{
double ZilchNum = 0;
double OnePairNum = 0;
double TwoPairsNum = 0;
double ThreeOfaKindNum = 0;
double StraightNum = 0;
double FlushNum = 0;
double FullHouseNum = 0;
double FourOfaKindNum = 0;
double StraightFlushNum = 0;
int N = 50000000;
for (int i = 0; i <= N; i++)
{
Draw(D);
Sort();
CardsTypeNum();
switch (CardsTypeNum())
{
case 0:
ZilchNum++;
break;
case 1:
OnePairNum++;
break;
case 2:
TwoPairsNum++;
break;
case 3:
ThreeOfaKindNum++;
break;
case 4:
StraightNum++;
break;
case 5:
FlushNum++;
break;
case 6:
FullHouseNum++;
break;
case 7:
FourOfaKindNum++;
break;
case 8:
StraightFlushNum++;
break;
default:
break;
}
}
switch (Order)
{
case 0:
return (ZilchNum / N).ToString();
case 1:
return (OnePairNum / N).ToString();
case 2:
return (TwoPairsNum / N).ToString();
case 3:
return (ThreeOfaKindNum / N).ToString();
case 4:
return (StraightNum / N).ToString();
case 5:
return (FlushNum / N).ToString();
case 6:
return (FullHouseNum / N).ToString();
case 7:
return (FourOfaKindNum / N).ToString();
case 8:
return (StraightFlushNum / N).ToString();
default:
return "Error!!";
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HW5
{
class PokerCard
{
//Fields
private int suit;
private int rank;
private static string[] StrUni = { "\u2665", "\u2666", "\u2663", "\u2660" };
//Constructors
public PokerCard(int suit, int rank)
{
this.suit = suit;
this.rank = rank;
}
//Attributes
public int Suit
{
get { return suit; }
set
{
if (value >= 0 && value < 4)
suit = value;
}
}
public int Rank
{
get { return rank; }
set
{
if (value > 0 && value <= 13)
rank = value;
}
}
/// <summary>
/// method
/// </summary>
/// <returns></returns>
public string SuitToUni()
{
return StrUni[Suit];
}
public string RankToStr()
{
string rankStr="";
switch (Rank)
{
case 1:
rankStr = "A";
return rankStr;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
rankStr = rank.ToString();
return rankStr;
case 11:
rankStr = "J";
return rankStr;
case 12:
rankStr = "Q";
return rankStr;
case 13:
rankStr = "K";
return rankStr;
default:
return "Error!!";
}
}
}
}
沒有留言:
張貼留言