⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cards.cs

📁 C#纸牌游戏,做的还是比较精致的.值得学习.
💻 CS
字号:
using System;
using System.Resources;
using System.Collections;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Reflection;

namespace CardGame
{
	/// <summary>
	/// 创建牌的图像资源。
	/// </summary>
	public class Cards
	{
		private static Image[] cardImages;

		/// <summary>
		/// 牌的尺寸
		/// </summary>
		public static readonly Size CardImageSize=new Size(71,96);

		/// <summary>
		/// 牌的图像列表
		/// </summary>
		internal static Image[] CardImages
		{
			get
			{
				return cardImages;
			}
		}

		/// <summary>
		/// 创建图像列表
		/// </summary>
		public static void CreateCardsImages()
		{
			ResourceManager resmanager=new ResourceManager("CardGame.CardsResources",Assembly.GetExecutingAssembly());
			cardImages=new Image[69];
			
			for(int i=0;i<69;i++)
			{
				cardImages[i]=(resmanager.GetObject(i+"") as Image);
			}
		}

		/// <summary>
		/// 获得牌的显示区域
		/// </summary>
		/// <param name="size">牌的尺寸</param>
		/// <returns>牌的显示区域</returns>
		public static Region GetCardRegion(Size size)
		{
			GraphicsPath gp = new GraphicsPath();
			gp.AddPolygon(new Point[]{
										 new Point(0,2),

										 new Point(2,0),
										 new Point(size.Width-2,0),

										 new Point(size.Width,2),
										 new Point(size.Width,size.Height-2),

										 new Point(size.Width-2,size.Height),
										 new Point(2,size.Height),

										 new Point(0,size.Height-2),
										 new Point(0,2)
									 });
			return new Region(gp);
		}
	}

	/// <summary>
	/// 牌的基类
	/// </summary>
	public abstract class Card:PicBox
	{
		protected int cardFaceImageIndex;
		protected int cardBackImageIndex;
		protected bool isFace=true;
		protected int index=0;
		private CardCollections cardsGroup;
		
		protected Card():base()
		{
			base.BackColor=Color.Transparent;
			base.Size=Cards.CardImageSize;
			base.Region=Cards.GetCardRegion(base.Size);
			base.Location=new Point(-1,-1);
		}

		/// <summary>
		/// 所属的牌列表
		/// </summary>
		public CardCollections CardsGroup
		{
			get
			{
				return cardsGroup;
			}
			set
			{
				cardsGroup=value;
			}
		}

		/// <summary>
		/// 所在牌列表的索引
		/// </summary>
		public int Index
		{
			get
			{
				return index;
			}
			set
			{
				index=value;
			}
		}

		/// <summary>
		/// 是否显示的是牌的正面
		/// </summary>
		public bool IsFace
		{
			get
			{
				return isFace;
			}
		}
		
		/// <summary>
		/// 牌正面的图像列表索引
		/// </summary>
		public int CardFaceImageIndex
		{
			get
			{
				return cardFaceImageIndex;
			}
		}

		/// <summary>
		/// 牌背面的图像列表索引
		/// </summary>
		public int CardBackImageIndex
		{
			get
			{
				return cardBackImageIndex;
			}
			set
			{
				cardBackImageIndex=value;
			}
		}

		public Card(int cardFaceImageIndex):this(cardFaceImageIndex,-1)
		{

		}

		public Card(int cardFaceImageIndex,int cardBackImageIndex):this()
		{
			this.cardFaceImageIndex=cardFaceImageIndex;
			this.cardBackImageIndex=cardBackImageIndex;
		}

		/// <summary>
		/// 显示正面
		/// </summary>
		public void ShowFace()
		{
			if(cardFaceImageIndex>=0&&cardFaceImageIndex<Cards.CardImages.Length)
			{
				base.Image=Cards.CardImages[cardFaceImageIndex];
			}
			else
			{
				base.Image=null;
			}
			isFace=true;
		}

		/// <summary>
		/// 显示背面
		/// </summary>
		public void ShowBack()
		{
			if(cardBackImageIndex>=0&&cardBackImageIndex<Cards.CardImages.Length)
			{
				base.Image=Cards.CardImages[cardBackImageIndex];
			}
			else
			{
				base.Image=null;
			}
			isFace=false;
		}
	}


	/// <summary>
	/// 普通牌
	/// </summary>
	public class NormalCard:Card
	{
		public static int[] CardBackImageIndexSection;
		private int faceNum;
		private NormalCardFaceType faceType;

		/// <summary>
		/// 牌面数字
		/// </summary>
		public int FaceNum
		{
			get{return faceNum;}
		}

		/// <summary>
		/// 牌面类型,如:红黑梅方
		/// </summary>
		public NormalCardFaceType FaceType
		{
			get{return faceType;}
		}

		static NormalCard()
		{
			CardBackImageIndexSection=new int[12];
			for(int i=54;i<=65;i++)
			{
				CardBackImageIndexSection[i-54]=i;
			}
		}
		
		public NormalCard(int cardFaceImageIndex,int cardBackImageIndex):base(cardFaceImageIndex,cardBackImageIndex)
		{
			if(base.cardFaceImageIndex<0||base.cardFaceImageIndex>51)base.cardFaceImageIndex=0;
			if(base.cardBackImageIndex<54||base.cardBackImageIndex>65)base.cardBackImageIndex=54;
			this.faceType=(NormalCardFaceType)(cardFaceImageIndex%4);
			this.faceNum=(int)(cardFaceImageIndex-(int)this.faceType)/4+1;
			ShowBack();
		}
		public NormalCard(int faceNum,NormalCardFaceType faceType,int cardBackImageIndex):this((faceNum-1)*4+(int)faceType,cardBackImageIndex)
		{
		}
		
		/// <summary>
		/// 改变背面图像
		/// </summary>
		/// <param name="cardBackImageIndex">背面索引</param>
		public void ChangeBack(int cardBackImageIndex)
		{
			base.cardBackImageIndex=cardBackImageIndex;
			if(!isFace)ShowBack();
		}

		/// <summary>
		/// Hearts 红心,Clubs 梅花,Diamonds 方块,Spade=黑桃
		/// </summary>
		public enum NormalCardFaceType:int
		{
			Clubs=0,
			Diamonds=1,
			Hearts=2,
			Spade=3
		}
	}

	public class BackSenderAreaCard:Card
	{
		private bool canLoopSend=true;
		public BackSenderAreaCard():base(66,67)
		{
			CanLoopSend=true;
		}

		public bool CanLoopSend
		{
			get
			{
				return canLoopSend;
			}
			set
			{
				if(value)
				{
					ShowBack();
				}
				else
				{
					ShowFace();
				}
				canLoopSend=value;
			}
		}
	}

	public class DealtAreaCard:Card
	{
		public DealtAreaCard():base(68)
		{
			ShowFace();
		}
	}

	public class UnDealtAreaCard:Card
	{
		public UnDealtAreaCard():base()
		{
			
		}
	}

	public class FackSenderAreaCard:Card
	{
		public FackSenderAreaCard():base()
		{
			
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -