public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid) { if (newPos.Equals(currPos)) { return(MoveState.Cannot); } if (newPos.X == currPos.X + 1 && newPos.Y == currPos.Y + 2 || newPos.X == currPos.X + 1 && newPos.Y == currPos.Y - 2 || newPos.X == currPos.X - 1 && newPos.Y == currPos.Y + 2 || newPos.X == currPos.X - 1 && newPos.Y == currPos.Y - 2 || newPos.X == currPos.X + 2 && newPos.Y == currPos.Y + 1 || newPos.X == currPos.X + 2 && newPos.Y == currPos.Y - 1 || newPos.X == currPos.X - 2 && newPos.Y == currPos.Y + 1 || newPos.X == currPos.X - 2 && newPos.Y == currPos.Y - 1) { Figure fig = deskGrid[newPos.X, newPos.Y]; if (fig == null) { return(MoveState.Can); } if (fig.Color != this.Color) { return(MoveState.Fight); } } return(MoveState.Cannot); }
public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid) { if (newPos.Equals(currPos)) { return(MoveState.Cannot); } if (newPos.X == currPos.X + 1 && newPos.Y == currPos.Y || newPos.X == currPos.X + 1 && newPos.Y == currPos.Y + 1 || newPos.X == currPos.X + 1 && newPos.Y == currPos.Y - 1 || newPos.X == currPos.X - 1 && newPos.Y == currPos.Y || newPos.X == currPos.X - 1 && newPos.Y == currPos.Y + 1 || newPos.X == currPos.X - 1 && newPos.Y == currPos.Y - 1 || newPos.X == currPos.X && newPos.Y == currPos.Y + 1 || newPos.X == currPos.X && newPos.Y == currPos.Y - 1) { Figure tempFig = deskGrid[newPos.X, newPos.Y]; if (tempFig != null && tempFig?.Color == this.Color) { return(MoveState.Cannot); } if (check) { check = !check; deskGrid[newPos.X, newPos.Y] = this; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if (deskGrid[i, j]?.Color != this.Color && deskGrid[i, j]?.CheckMove(newPos, new SFigurePosition(i, j), ref deskGrid) == MoveState.Fight) { deskGrid[newPos.X, newPos.Y] = tempFig; check = !check; return(MoveState.Cannot); } } } deskGrid[newPos.X, newPos.Y] = tempFig; check = !check; } if (tempFig == null) { return(MoveState.Can); } return(MoveState.Fight); } return(MoveState.Cannot); }
public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid) { if (newPos.Equals(currPos) || newPos.X == currPos.X && newPos.Y != currPos.Y || newPos.X != currPos.X && newPos.Y == currPos.Y || deskGrid[newPos.X, newPos.Y]?.Color == this.Color ) { return(MoveState.Cannot); } int idx = 1; int idy = 1; if (newPos.X > currPos.X && newPos.Y < currPos.Y) { idy *= -1; } if (newPos.X < currPos.X && newPos.Y > currPos.Y) { idx *= -1; } if (newPos.X < currPos.X && newPos.Y < currPos.Y) { idx *= -1; idy *= -1; } int x = currPos.X + idx; int y = currPos.Y + idy; for (; x != newPos.X && y != newPos.Y; x += idx, y += idy) { if (deskGrid[x, y] != null) { return(MoveState.Cannot); } } if (x == newPos.X && y == newPos.Y) { if (deskGrid[x, y] != null) { return(MoveState.Fight); } return(MoveState.Can); } return(MoveState.Cannot); }
public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid) { if (newPos.Equals(currPos)) { return(MoveState.Cannot); } int idx = -1; if (Color == FigureColor.Black) { idx = idx * -1; } Figure fig = deskGrid[newPos.X, newPos.Y]; if (newPos.X == currPos.X + idx) { if (newPos.Y == currPos.Y + 1 || newPos.Y == currPos.Y - 1) { if (fig != null && fig?.Color != this.Color) { return(MoveState.Fight); } } if (newPos.Y == currPos.Y) { if (fig == null) { return(MoveState.Can); } } } _firstMove = this.Color == FigureColor.White ? currPos.X == 6 : currPos.X == 1; if (newPos.X == currPos.X + idx + idx && newPos.Y == currPos.Y && _firstMove) { if (fig == null) { Figure fig1 = deskGrid[currPos.X + idx, currPos.Y]; if (fig == null && fig1 == null) { return(MoveState.Can); } } } return(MoveState.Cannot); }
public override MoveState CheckMove(SFigurePosition newPos, SFigurePosition currPos, ref Figure[,] deskGrid) { if (newPos.Equals(currPos)) { return(MoveState.Cannot); } Figure fig = deskGrid[newPos.X, newPos.Y]; if (fig?.Color == this.Color) { return(MoveState.Cannot); } if (newPos.X == currPos.X && newPos.Y != currPos.Y) { int idx = -1; if (newPos.Y > currPos.Y) { idx *= -1; } for (int i = currPos.Y + idx; i != newPos.Y; i += idx) { if (deskGrid[currPos.X, i] != null) { return(MoveState.Cannot); } } if (fig != null) { return(MoveState.Fight); } return(MoveState.Can); } if (newPos.X != currPos.X && newPos.Y == currPos.Y) { int idx = -1; if (newPos.X > currPos.X) { idx *= -1; } for (int i = currPos.X + idx; i != newPos.X; i += idx) { if (deskGrid[i, currPos.Y] != null) { return(MoveState.Cannot); } } if (fig != null) { return(MoveState.Fight); } return(MoveState.Can); } return(MoveState.Cannot); }