private void cib_Click(object sender, EventArgs e) { IChessItem ic = (IChessItem)sender; IChessItem icold = GetCheckedChild(Enums.GetOtherType(ic.type)); bool ischeck = true; if (icold != null) { if (icold.type != Flag.Turns) { ic.IsChecked = false; return; } if (icold.MoveItem(ic.GridX, ic.GridY)) { ChangeFlag(icold.type); ic.Remove(); icold.IsChecked = false; ischeck = false; } } UncheckChild(); if (ischeck && ic.type == Flag.Turns) { ic.IsChecked = true; } }
public override bool MoveItem(int ChessX, int ChessY) { if (!LimitPoint(ChessX, ChessY)) { return(false); } Form form = (Form)this.Parent; int count = 0; IChessItem ici = null; if (GridX == ChessX && GridY > ChessY) { ici = GetChildOnPoint(form, ChessX, ChessY, GridX, GridY, out count); } else if (GridX == ChessX && GridY < ChessY) { ici = GetChildOnPoint(form, GridX, GridY, ChessX, ChessY, out count); } else if (GridX > ChessX && GridY == ChessY) { ici = GetChildOnPoint(form, ChessX, ChessY, GridX, GridY, out count); } else if (GridX < ChessX && GridY == ChessY) { ici = GetChildOnPoint(form, GridX, GridY, ChessX, ChessY, out count); } if (((ChessX == GridX) && (GetInt32(ChessY - GridY) <= StepY)) || ((GetInt32(ChessX - GridX) <= StepX) && (ChessY == GridY))) { if (HasChessItemOnPoint(ChessX, ChessY)) { if (count == 1) { if (ici != null) { return(MoveItem(ChessX, ChessY, ici)); } } } else { if (count > 0) { return(false); } this.Location = new Point(ChessX * 50, ChessY * 50); GridX = ChessX; GridY = ChessY; return(true); } } return(false); }
/// <summary> /// Çå³ýËùÓÐÑ¡ÖÐ /// </summary> private void UncheckChild() { for (int i = 0; i < this.Controls.Count; i++) { if (this.Controls[i] is IChessItem) { IChessItem ic = (IChessItem)this.Controls[i]; if (ic.IsChecked) { ic.IsChecked = false; } } } }
/// <summary> /// »ñÈ¡Ö¸¶¨·½±»Ñ¡ÖÖµÄÆå×Ó /// </summary> /// <param name="type">À¶·½»¹ÊǺ췽</param> /// <returns>Ñ¡ÖÖµÄÆå×Ó</returns> private IChessItem GetCheckedChild(Enums.ChessType type) { for (int i = 0; i < this.Controls.Count; i++) { if (this.Controls[i] is IChessItem) { IChessItem ic = (IChessItem)this.Controls[i]; if (ic.type == type && ic.IsChecked) { return(ic); } } } return(null); }
public bool MoveItem(int ChessX, int ChessY, IChessItem ic) { if (!LimitPoint(ChessX, ChessY)) { return(false); } if (((ChessX == GridX) && (GetInt32(ChessY - GridY) <= StepY) && ChessX == ic.GridX) || ((GetInt32(ChessX - GridX) <= StepX) && (ChessY == GridY) && ChessY == ic.GridY)) { this.Location = new Point(ChessX * 50, ChessY * 50); GridX = ChessX; GridY = ChessY; return(true); } return(false); }
protected bool HasChessItemOnPoint(int ChessX, int ChessY) { Form form = (Form)this.Parent; for (int i = 0; i < form.Controls.Count; i++) { if (form.Controls[i] is IChessItem) { IChessItem ic = (IChessItem)form.Controls[i]; if (ic.GridX == ChessX && ic.GridY == ChessY) { return(true); } } } return(false); }
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { IChessItem ic = GetCheckedChild(); if (ic != null) { if (ic.type != Flag.Turns) { return; } int gridX = GetGird(e.X); int gridY = GetGird(e.Y); if (ic.MoveItem(gridX, gridY)) { ChangeFlag(ic.type); ic.IsChecked = false; } } }
/// <summary> /// 获取处于开始结束点之间的棋子,如果含有多个棋子则不返回,输出从开始到结束位置共有多少个棋子 /// </summary> /// <param name="form">棋盘</param> /// <param name="startX">开始X</param> /// <param name="startY">开始Y</param> /// <param name="endX">结束X</param> /// <param name="endY">结束Y</param> /// <param name="count">返回在此条线上有多少个棋子</param> /// <returns></returns> protected IChessItem GetChildOnPoint(Form form, int startX, int startY, int endX, int endY, out int count) { count = 0; if ((startX != endX) && (startY != endY)) { return(null); } ArrayList al = new ArrayList(); for (int i = 0; i < form.Controls.Count; i++) { if (form.Controls[i] is IChessItem) { IChessItem ic = (IChessItem)form.Controls[i]; if (startX == endX && startX == ic.GridX) { if (ic.GridY > startY && ic.GridY < endY) { al.Add(ic); } } else if (startY == endY && startY == ic.GridY) { if (ic.GridX > startX && ic.GridX < endX) { al.Add(ic); } } } } count = al.Count; if (al.Count == 1) { return((IChessItem)al[0]); } return(null); }