----------------------
ASP.Net+Unity开发、
.Net培训、期待与您交流! ----------------------
C#入门经典里的扑克牌客户端程序
1 首先是卡牌的定义 Card.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13CardLib
{
public class Card : ICloneable
{
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";
}
public object Clone()
{
return MemberwiseClone();
}
//花色是否影响大小的标志, 如果useTrumps = true ,则花色大小优于点数大小
public static bool useTrumps = false;
//如果花色影响大小, 那么定义最大的花色
public static Suit Trump = Suit.Club;
//Ace是否大于king的标志, 若isAceHigh = true , 则Ace大于king
public static bool isAceHigh = true;
//给Card类添加运算符重载(和推荐的重写代码)
public static bool operator ==(Card card1, Card card2)
{
return (card1.suit == card2.suit) && (card1.rank == card2.rank);
}
public static bool operator !=(Card card1, Card card2)
{
return !(card1 == card2);
}
public override bool Equals(object card)
{
return this == (Card)card;
}
public override int GetHashCode()
{
return 13 * (int)suit + (int)rank;
}
public static bool operator >(Card card1, Card card2)
{
if (card1.suit == card2.suit)
{
if (isAceHigh)
{
if (card1.rank == Rank.Ace)
{
if (card2.rank == Rank.Ace)
return false;
else
return true;
}
else
if (card2.rank == Rank.Ace)
return false;
else
return (card1.rank > card2.rank);
}
else
{
return (card1.rank > card2.rank);
}
}
else
{
if (useTrumps && (card2.suit == Card.Trump))
return false;
else
return true;
}
}
public static bool operator <(Card card1, Card card2)
{
return !(card1 >= card2);
}
public static bool operator >=(Card card1, Card card2)
{
if (card1.suit == card2.suit)
{
if (isAceHigh)
{
if (card1.rank == Rank.Ace)
{
return true;
}
else
{
if (card2.rank == Rank.Ace)
return false;
else
return (card1.rank >= card2.rank);
}
}
else
{
return (card1.rank >= card2.rank);
}
}
else
{
if (Card.useTrumps && (card2.suit == Card.Trump))
{
return false;
}
else
{
return true;
}
}
}
public static bool operator <=(Card card1, Card card2)
{
return !(card1 >= card2);
}
}
}
包含两个只读属性(Property)
public Rank rank;
public Suit suit;
类型定义如下
Rank
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13CardLib
{
public enum Rank
{
Ace = 1,
Deuce,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
Queen,
King,
}
}
<
这个程序涉及了比较多的基础知识, 因此加了很多注释
1 首先是卡牌的定义 Card.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13CardLib
{
public class Card : ICloneable
{
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";
}
public object Clone()
{
return MemberwiseClone();
}
//花色是否影响大小的标志, 如果useTrumps = true ,则花色大小优于点数大小
public static bool useTrumps = false;
//如果花色影响大小, 那么定义最大的花色
public static Suit Trump = Suit.Club;
//Ace是否大于king的标志, 若isAceHigh = true , 则Ace大于king
public static bool isAceHigh = true;
//给Card类添加运算符重载(和推荐的重写代码)
public static bool operator ==(Card card1, Card card2)
{
return (card1.suit == card2.suit) && (card1.rank == card2.rank);
}
public static bool operator !=(Card card1, Card card2)
{
return !(card1 == card2);
}
public override bool Equals(object card)
{
return this == (Card)card;
}
public override int GetHashCode()
{
return 13 * (int)suit + (int)rank;
}
public static bool operator >(Card card1, Card card2)
{
if (card1.suit == card2.suit)
{
if (isAceHigh)
{
if (card1.rank == Rank.Ace)
{
if (card2.rank == Rank.Ace)
return false;
else
return true;
}
else
if (card2.rank == Rank.Ace)
return false;
else
return (card1.rank > card2.rank);
}
else
{
return (card1.rank > card2.rank);
}
}
else
{
if (useTrumps && (card2.suit == Card.Trump))
return false;
else
return true;
}
}
public static bool operator <(Card card1, Card card2)
{
return !(card1 >= card2);
}
public static bool operator >=(Card card1, Card card2)
{
if (card1.suit == card2.suit)
{
if (isAceHigh)
{
if (card1.rank == Rank.Ace)
{
return true;
}
else
{
if (card2.rank == Rank.Ace)
return false;
else
return (card1.rank >= card2.rank);
}
}
else
{
return (card1.rank >= card2.rank);
}
}
else
{
if (Card.useTrumps && (card2.suit == Card.Trump))
{
return false;
}
else
{
return true;
}
}
}
public static bool operator <=(Card card1, Card card2)
{
return !(card1 >= card2);
}
}
}
包含两个只读属性(Property)
public Rank rank;
public Suit suit;
类型定义如下
Rank
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch13CardLib
{
public enum Rank
{
Ace = 1,
Deuce,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
Queen,
King,
}
}
<