示例#1
0
        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);
        }
示例#3
0
 /// <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;
             }
         }
     }
 }
示例#4
0
        /// <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);
        }
示例#7
0
        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);
        }