📄 cards.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 + -