Ejemplo n.º 1
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;
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 刷新棋盘
 /// </summary>
 public void Frush()
 {
     GameControl.img = Image.FromFile(@"pic\棋盘.png");
     GameControl.DrawAllChess();
     pbChessboard.Image = GameControl.img;
 }