📄 gameplace.cs
字号:
{
control=GetChildAtPoint(new Point(Convert.ToInt32((point.X+point.X+size.Width)/2),point.Y));
AddCard(control,objCard,cardList);
control=GetChildAtPoint(new Point(point.X+size.Width,Convert.ToInt32((point.Y+point.Y+size.Height)/2)));
AddCard(control,objCard,cardList);
control=GetChildAtPoint(new Point(Convert.ToInt32((point.X+point.X+size.Width)/2),point.Y+size.Height));
AddCard(control,objCard,cardList);
control=GetChildAtPoint(new Point(point.X,Convert.ToInt32((point.Y+point.Y+size.Height)/2)));
AddCard(control,objCard,cardList);
}
return cardList;
}
private void BaseCard_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button==MouseButtons.Right&&e.Clicks==1)
{
AutoDeal();
return;
}
if(sender is BackSenderAreaCard)
{
BackSenderAreaCard card=(BackSenderAreaCard)sender;
if(card.CanLoopSend)
{
if(e.Button==MouseButtons.Left&&e.Clicks==1)
{
backSenderItems.AddRange(faceSenderItems,0,faceSenderItems.Count,false);
}
}
}
}
private void OnCardMouseMove(object sender, MouseEventArgs e)
{
NormalCard card=(NormalCard)sender;
if(IsCardMouseDown)
{
card.Location=new Point(card.Left+e.X-CardMouseDownLocation.X,card.Top+e.Y-CardMouseDownLocation.Y);
}
}
private void OnCardMouseUp(object sender, MouseEventArgs e)
{
NormalCard card=(NormalCard)sender;
if(IsCardMouseDown)
{
IsCardMouseDown=false;
ArrayList cardlist=GetCardsByRec(card);
if(cardlist.Count>0)
{
foreach(Card c in cardlist)
{
if(c.CardsGroup.CanAcceptCard(card))
{
c.CardsGroup.AddRange(card.CardsGroup,card.Index,card.CardsGroup.Count-card.Index,true);
EndMag();
return;
}
}
}
NormalCard nc;
if(card.Index>0)
{
nc=(NormalCard)card.CardsGroup[card.Index-1];
if(nc.IsFace)
{
int n=Convert.ToInt32(card.Index/10)-Convert.ToInt32(nc.Index/10);
if(nc.CardsGroup is FaceSenderCollections)
{
if(!FaceCardMouseDownLocation.Equals(Point.Empty))
{
Point historyPoint=new Point(nc.Left+n*card.CardsGroup.BackOffsetPoint.X,nc.Top+n*card.CardsGroup.BackOffsetPoint.Y);
if(FaceCardMouseDownLocation.Equals(historyPoint))
{
card.Location=historyPoint;
}
else
{
card.Location=new Point(nc.Left+card.CardsGroup.AcceptOffsetPoint.X,nc.Top+card.CardsGroup.AcceptOffsetPoint.Y);
}
}
}
else
{
card.Location=new Point(nc.Left+card.CardsGroup.AcceptOffsetPoint.X,nc.Top+card.CardsGroup.AcceptOffsetPoint.Y);
}
FaceCardMouseDownLocation=Point.Empty;
}
else
{
card.Location=new Point(nc.Left+card.CardsGroup.BackOffsetPoint.X,nc.Top+card.CardsGroup.BackOffsetPoint.Y);
}
}
else
{
card.Location=card.CardsGroup.Location;
}
EndMag();
}
}
private void OnCardMove(object sender, EventArgs e)
{
if(sender is NormalCard)
{
NormalCard card=(NormalCard)sender;
if(card.CardsGroup!=null&&magCard!=null)
{
InitTimer();
}
}
}
private void InitTimer()
{
if(timer==null&&IsRecord)
{
timer=new System.Threading.Timer(new TimerCallback(OnTimer),DateTime.Now.TimeOfDay,1000,1000);
}
}
private void OnTimer(object obj)
{
delScoreCount++;
TimeSpan time=(TimeSpan)obj;
DateTime dtime=DateTime.Now.Subtract(time);
if(StateTrigger!=null)
{
if(IsScore)
{
if(delScoreCount==10)
{
Score+=(int)ScoreEnum.TimeScore;
if(Score<0)Score=(int)ScoreEnum.Null;
delScoreCount=0;
}
}
StateTrigger(dtime.ToString("HH:mm:ss"),Score);
}
}
private void AutoDeal()
{
while(true)
{
FindStart:
foreach(NormalCard card in cards)
{
if(!(card.CardsGroup is DealtCollections)&&card.IsFace&&card.Index==card.CardsGroup.Count-1)
{
foreach(DealtCollections dealts in dealtItemsArr)
{
if(dealts.CanAcceptCard(card))
{
dealts.Add(card);
goto FindStart;
}
}
}
}
return;
}
}
private void gamePanel_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button==MouseButtons.Right&&e.Clicks==1)
{
AutoDeal();
}
}
private void GamePlace_CardAdd(Card card, CardCollections cardsGroup)
{
if(IsScore)
{
if(card.CardsGroup is UnDealtCollections&&cardsGroup is FaceSenderCollections)
{
Score+=(int)ScoreEnum.TurnCard;
}
else if(card.CardsGroup is DealtCollections&&(cardsGroup is UnDealtCollections||cardsGroup is FaceSenderCollections))
{
Score+=(int)ScoreEnum.DealtCard;
}
else if(card.CardsGroup is FaceSenderCollections&&cardsGroup is UnDealtCollections)
{
Score+=(int)ScoreEnum.BackSender;
}
else
{
return;
}
if(StateTrigger!=null)StateTrigger(null,Score);
}
}
private void GamePlace_CardRemove(Card card)
{
if(IsScore)
{
if(card.CardsGroup is DealtCollections)
{
Score+=(int)ScoreEnum.UnDealtCard;
}
else
{
return;
}
if(StateTrigger!=null)StateTrigger(null,Score);
}
}
private void LocationChange(int hspace)
{
CardCollections.HSpace=hspace;
backSenderItems.Location=new Point(hspace,CardCollections.VSpace);
faceSenderItems.Location=new Point(2*hspace+Cards.CardImageSize.Width,CardCollections.VSpace);
for(int i=0;i<dealtItemsArr.Length;i++)
{
dealtItemsArr[i].Location=new Point(hspace+(i+3)*(hspace+Cards.CardImageSize.Width),CardCollections.VSpace);
}
for(int i=0;i<undealtItemsArr.Length;i++)
{
undealtItemsArr[i].Location=new Point(hspace+i*(hspace+Cards.CardImageSize.Width),2*CardCollections.VSpace+Cards.CardImageSize.Height);
}
}
private void gamePanel_SizeChanged(object sender, EventArgs e)
{
Size size=this.Size;
int minWidth=CardCollections.MinHSpace*8+Cards.CardImageSize.Width*7;
if(size.Width>minWidth)
{
LocationChange((size.Width-Cards.CardImageSize.Width*7)/8);
}
else
{
LocationChange(CardCollections.MinHSpace);
}
}
private void StartMag(Card card,MouseEventArgs e)
{
IsCardMouseDown=true;
CardMouseDownLocation=new Point(e.X,e.Y);
Controls.SetChildIndex(card,0);
magCard=card;
int aboveCount=card.CardsGroup.Count-1-card.Index;
Size size=new Size(card.Width,aboveCount*card.CardsGroup.AcceptOffsetPoint.Y+card.Height);
Bitmap img=new Bitmap(size.Width,size.Height);
Graphics g=Graphics.FromImage(img);
for(int i=0;i<=aboveCount;i++)
{
g.DrawImage(card.CardsGroup[i+card.Index].Image,new Rectangle(0,i*card.CardsGroup.AcceptOffsetPoint.Y,card.Width,card.Height),0,0,card.Width,card.Height,GraphicsUnit.Pixel);
if(i>0)card.CardsGroup[i+card.Index].Visible=false;
}
card.Region=Cards.GetCardRegion(size);
card.Image=img;
}
private void EndMag()
{
if(magCard!=null)
{
magCard.Region=Cards.GetCardRegion(Cards.CardImageSize);
magCard.ShowFace();
for(int i=magCard.Index+1;i<magCard.CardsGroup.Count;i++)
{
Controls.SetChildIndex(magCard.CardsGroup[i],0);
magCard.CardsGroup[i].Visible=true;
}
magCard=null;
}
}
private void DealtCollections_AllDealt(object sender, EventArgs e)
{
if(player!=null)player.Play();
}
#region IDisposable 成员
public new void Dispose()
{
backSenderItems.Clear();
faceSenderItems.Clear();
foreach(DealtCollections items in dealtItemsArr)
{
items.Clear();
}
foreach(UnDealtCollections items in undealtItemsArr)
{
items.Clear();
}
dealtItemsArr=null;
undealtItemsArr=null;
base.Dispose ();
}
#endregion
private void GameEnd()
{
Visible=false;
if(timer!=null)
{
timer.Dispose();
timer=null;
}
SizeChanged-=new EventHandler(gamePanel_SizeChanged);
CardCollections.StartUndo=false;
CardCollections.CanUndo=false;
backSenderItems.Clear();
faceSenderItems.Clear();
foreach(DealtCollections items in dealtItemsArr)
{
items.Clear();
}
foreach(UnDealtCollections items in undealtItemsArr)
{
items.Clear();
}
}
private void player_PlayComplete(object sender, EventArgs e)
{
GameEnd();
if(MessageBox.Show(FindForm(),"恭喜你顺利通关!\r\n重新发牌吗?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)==DialogResult.OK)
{
Shuffle();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -