/// <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); }
//鼠标点击事件 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; }