Exemplo n.º 1
0
        /// <summary>
        /// 移动方法
        /// </summary>
        public override bool Move(int destX, int destY)
        {
            //destX destY新位置
            //x y 原始位置

            //计算当前这个棋子在数组中的位置
            int x = (this.ChessPoint.X - 10) / 57;
            int y = (this.ChessPoint.Y - 10) / 57;

            //获取点击位置的棋子
            Chess chess = GameControl.chessArray[destY, destX];

            int count = -1;

            //横向移动
            if (destY == y && destX != x)
            {
                //向右
                if (destX > x)
                {
                    count = 0;
                    for (int i = x + 1; i < destX; i++)
                    {
                        if (GameControl.chessArray[y, i] != null)
                        {
                            count++;
                        }
                    }
                }
                //向左
                else
                {
                    count = 0;
                    for (int i = x - 1; i > destX; i--)
                    {
                        if (GameControl.chessArray[y, i] != null)
                        {
                            count++;
                        }
                    }
                }
            }
            //纵向移动
            if (destX == x && destY != y)
            {
                //向下
                if (destY > y)
                {
                    count = 0;
                    for (int i = y + 1; i < destY; i++)
                    {
                        if (GameControl.chessArray[i, x] != null)
                        {
                            count++;
                        }
                    }
                }
                //向上
                else
                {
                    count = 0;
                    for (int i = y - 1; i > destY; i--)
                    {
                        if (GameControl.chessArray[i, x] != null)
                        {
                            count++;
                        }
                    }
                }
            }

            //点击位置有棋子(吃子) 并且中间只隔了一个棋
            if (count == 1 && chess != null)
            {
                return(true);
            }
            //点击位置没有棋子(走棋)
            if (count == 0 && chess == null)
            {
                return(true);
            }

            return(false);
        }
Exemplo n.º 2
0
        //鼠标点击事件
        private void pbChessboard_MouseClick(object sender, MouseEventArgs e)
        {
            if (!isBegin)
            {
                return;
            }
            //取出点击位置的棋子

            //由坐标转换为下标
            int x = (e.X - 10) / GameControl.chessSize;
            int y = (e.Y - 10) / GameControl.chessSize;
            //MessageBox.Show("x:"+x+"y:"+y);
            Chess chess = GameControl.chessArray[y, x];

            //表示点击位置有棋子
            if (chess != null)
            {
                //没有篮框棋子
                if (currentChess == null)
                {
                    //选子
                    //如果该红方走 并且选的子就是红方
                    if (isTurn == 1 && chess.ChessCamp == Camp.红方)
                    {
                        //1、把点击这个棋子赋值给篮框棋子
                        currentChess = chess;
                        //2、画框
                        currentChess.Choice(GameControl.img);
                    }
                    //如果该黑方走 并且选的子就是黑方
                    else if (isTurn == 0 && chess.ChessCamp == Camp.黑方)
                    {
                        //1、把点击这个棋子赋值给篮框棋子
                        currentChess = chess;
                        //2、画框
                        currentChess.Choice(GameControl.img);
                    }
                    Music.play("选子");
                }
                //有篮框棋子
                else
                {
                    //换子  吃子
                    //篮框棋子阵营等于选择(点击)棋子阵营
                    if (currentChess.ChessCamp == chess.ChessCamp)
                    {
                        //选子
                        //1、先抹掉篮框的棋子 就是重新画阵营
                        Frush();
                        //2、在新位置重写画一个篮框
                        currentChess = chess;
                        currentChess.Choice(GameControl.img);
                        Music.play("换子");
                    }
                    else
                    {
                        //x y点击位置的下标
                        if (!currentChess.Move(x, y))
                        {
                            return;
                        }

                        //计算篮框棋子在原来数组中的下标位置
                        int xLan = (currentChess.ChessPoint.X - 10) / GameControl.chessSize;
                        int yLan = (currentChess.ChessPoint.Y - 10) / GameControl.chessSize;

                        //吃子
                        //1、改变篮框棋子的坐标位置
                        currentChess.ChessPoint = chess.ChessPoint;
                        //2、改变篮框棋子的数组中的位置也要改变
                        GameControl.chessArray[y, x] = currentChess;
                        //3、篮框棋子在数组中原来的位置恢复为null
                        GameControl.chessArray[yLan, xLan] = null;

                        //刷新
                        Frush();

                        //判断吃掉的棋子是不是boss
                        if (GameControl.IsWin(chess))
                        {
                            MessageBox.Show("游戏结束!");
                            isBegin = false;
                            GameControl.ClearArrays();
                            return;
                        }
                        else
                        {
                            //换人
                            TurnNext();
                        }
                        Music.play("吃子");
                    }
                }
            }
            //表示点击位置没有棋子 (走棋)
            else
            {
                if (currentChess == null)   //篮框棋子为空
                {
                    return;
                }
                else if (!currentChess.Move(x, y))
                {
                    return;
                }
                else
                {
                    //有篮框 又可以动

                    //计算篮框棋子在原来数组中的下标位置
                    int xLan = (currentChess.ChessPoint.X - 10) / GameControl.chessSize;
                    int yLan = (currentChess.ChessPoint.Y - 10) / GameControl.chessSize;

                    //移动
                    //1、让篮框棋子移动到指定的位置 该坐标
                    int xDianJi = 10 + x * 57;
                    int yDianJi = 10 + y * 57;
                    currentChess.ChessPoint = new Point(xDianJi, yDianJi);
                    //2、改变篮框棋子在数组中的位置
                    GameControl.chessArray[y, x] = currentChess;
                    //3、篮框棋子在数组中的原来位置改为null
                    GameControl.chessArray[yLan, xLan] = null;

                    //刷新
                    Frush();
                    //换人
                    TurnNext();

                    Music.play("移动");
                }
            }

            this.pbChessboard.Image = GameControl.img;
        }