一个扑克游戏的诞生---扑克牌及相关类代码兼谈异常(中)
发表于:2007-06-30来源:作者:点击数:
标签:
关于扑克牌及相关的几个类其他就没有什么可说的了,大家看代码就可以了。 file : card.cs using System; using System.Diagnostics ; namespace Bigeagle.Games.Cards { #region 枚举 /// summary /// 花色的枚举 /// /summary public enum CardColors { ///
关于扑克牌及相关的几个类其他就没有什么可说的了,大家看代码就可以了。
file : card.cs
using System;
using System.Diagnostics ;
namespace Bigeagle.Games.Cards
{
#region 枚举
/// <summary>
/// 花色的枚举
/// </summary>
public enum CardColors
{
/// <summary>
/// 草花
/// </summary>
Club = 0 ,
/// <summary>
/// 方块
/// </summary>
Diamond ,
/// <summary>
/// 红心
/// </summary>
Heart ,
/// <summary>
/// 黑桃
/// </summary>
Spade ,
/// <summary>
/// 没有花色,对应joker
/// </summary>
None
}
/// <summary>
/// 牌大小的枚举
/// </summary>
public enum CardNumbers
{
//Zero = 0 ,
Two = 2 ,
Three ,
Four ,
Five ,
Six ,
Seven ,
Eight ,
Nine ,
Ten ,
Jack ,
Queen ,
King ,
Ace ,
ViceJoker ,
Joker
}
#endregion
/// <summary>
/// 扑克牌类
/// <br>author: bigeagle</br>
/// <br>date: 2002/4/19</br>
/// <br>History: 2002/4/19</br>
///
/// </summary>
/// <remarks>继承iComparable接口,用于比较</remarks>
public class Card : System.IComparable
{
#region 成员变量
/// <summary>
/// 花色
/// </summary>
protected CardColors m_enumColors ;
/// <summary>
/// 数字
/// </summary>
protected CardNumbers m_enumNumber ;
#endregion
#region 属性
/// <summary>
/// 存取花色的属性
/// </summary>
public CardColors Colors
{
get
{
return this.m_enumColors ;
}
set
{
if(value == CardColors.None)
{
throw(new InvalidOperationException
("CardColors.None不能用于Card对象")) ;
}
// if(value != CardColors.None)
// {
// this.m_enumColors = value ;
// }
this.m_enumColors = value ;
}
}
/// <summary>
/// 存取大小的属性
/// </summary>
public CardNumbers Number
{
get
{
return this.m_enumNumber ;
}
set
{
if(value == CardNumbers.Joker
|| value == CardNumbers.ViceJoker)
{
throw(new InvalidOperationException
("Zero,Joker和ViceJoker不能用于Card对象")) ;
}
// if(value != CardNumbers.Joker
// && value != CardNumbers.ViceJoker )
// this.m_enumNumber = value ;
this.m_enumNumber = value ;
}
}
#endregion
#region 构造函数
/// <summary>
/// 构造函数
/// </summary>
public Card()
{
this.m_enumColors = CardColors.Club ;
this.m_enumNumber = CardNumbers.Ace ;
}//end method
/// <summary>
/// 重载构造函数
/// </summary>
/// <param name="a_enumColors">花色</param>
/// <param name="a_enumNumber">大小</param>
public Card(CardColors a_enumColors , CardNumbers a_enumNumber)
{
if(a_enumColors == CardColors.None
|| a_enumNumber == CardNumbers.Joker
|| a_enumNumber == CardNumbers.ViceJoker)
{
throw(new InvalidOperationException
("CardColors.None、CardNumbers.Joker和ViceJoker不能用于Card对象")) ;
}
else
{
this.m_enumColors = a_enumColors ;
this.m_enumNumber = a_enumNumber ;
}
}
#endregion
#region 改写父类方法
/// <summary>
/// 改写ToString方法
/// </summary>
/// <returns></returns>
public override string ToString()
{
return this.m_enumColors.ToString() + " " + this.m_enumNumber.ToString() ;
}
/// <summary>
/// 重写取得哈希值
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return (int)(System.Math.Pow(100 , (double)this.m_enumColors + 1)
+ (double)this.m_enumNumber) ;
}
/// <summary>
/// 重写equals方法
/// </summary>
/// <param name="obj">要判断的对象</param>
/// <returns></returns>
public override bool Equals(object obj)
{
//断言
De
bug.Assert(obj != null , "要比较的对象不能为空") ;
return obj.GetHashCode() == this.GetHashCode() ;
}
/// <summary>
/// 改写父接口方法
/// </summary>
/// <param name="obj">要比较的对象</param>
/// <returns>
/// 小于零 此实例小于 obj。
/// 零 此实例等于 obj。
/// 大于零 此实例大于 obj。
/// </returns>
public int CompareTo(object obj)
{
if(this.GetHashCode() > obj.GetHashCode())
{
return 1 ;
}
else if(this.GetHashCode() < obj.GetHashCode())
{
return -1 ;
}
else
{
return 0 ;
}
}
#endregion
}//end class
}//end namespace
file: Joker.cs
using System;
namespace Bigeagle.Games.Cards
{
/// <summary>
/// Joker
/// <br>author: bigeagle</br>
/// <br>date: 2002/4/20</br>
/// <br>History: 2002/4/20</br>
/// </summary>
/// <remarks>继承card类</remarks>
public sealed class Joker : Bigeagle.Games.Cards.Card
{
public Joker()
{
this.m_enumColors = CardColors.None ;
this.m_enumNumber = CardNumbers.Joker ;
}
/// <summary>
/// 改写ToString方法
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "Joker" ;
}
}//end method
}//end namespace
file: ViceJoker.cs
using System;
namespace Bigeagle.Games.Cards
{
/// <summary>
/// vice joker
/// <br>author: bigeagle</br>
/// <br>date: 2002/4/19</br>
/// <br>History: 2002/4/19</br>
/// </summary>
public sealed class ViceJoker : Bigeagle.Games.Cards.Card
{
public ViceJoker()
{
this.m_enumColors = CardColors.None ;
this.m_enumNumber = CardNumbers.ViceJoker ;
}
/// <summary>
/// 改写ToString方法
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "ViceJoker" ;
}
}//end class
}//end namespace
原文转自:http://www.ltesting.net