public bool CanMove() { var startField = board.fields[posStartX, posStartY]; if (posEndX > 7 || posEndX < 0 || posEndY > 7 || posEndY < 0) { return(false); } var endField = board.fields[posEndX, posEndY]; switch (pawnController.state) { case State.Counter: CheckQueen(startField, endField); if (Math.Abs(posStartX - posEndX) > 1) { if (beatChecker.CanCounterBeat(startField, endField)) { move = true; beat = true; beatX = Math.Max(startField.X, endField.X) - 1; beatY = Math.Max(startField.Y, endField.Y) - 1; } } else if (beatChecker.CanCounterMove(startField, endField)) { move = true; } if (move) { return(true); } return(false); case State.Queen: Debug.Log("QUEEN MOVE"); if (beatChecker.CanQueenMove(startField, endField)) { move = true; } else if (beatChecker.CanQueenBeat(startField, endField)) { move = true; beat = true; beatX = beatChecker.BeatX; beatY = beatChecker.BeatY; } if (move) { return(true); } return(false); default: return(false); } }
public List <PawnController> CheckBeats(List <PawnController> pawns) { List <PawnController> pawnsToKill = new List <PawnController>(); foreach (var pawn in pawns) { switch (pawn.state) { case State.Dead: break; case State.Counter: if (NumberNotBig(pawn.Field.X) && NumberNotBig(pawn.Field.Y)) { if (beatChecker.CanCounterBeat(pawn.Field, board.fields[pawn.Field.X + 2, pawn.Field.Y + 2])) { pawnsToKill.Add(pawn); break; } } if (NumberNotBig(pawn.Field.X) && NumberNotSmall(pawn.Field.Y)) { if (beatChecker.CanCounterBeat(pawn.Field, board.fields[pawn.Field.X + 2, pawn.Field.Y - 2])) { pawnsToKill.Add(pawn); break; } } if (NumberNotSmall(pawn.Field.X) && NumberNotBig(pawn.Field.Y)) { if (beatChecker.CanCounterBeat(pawn.Field, board.fields[pawn.Field.X - 2, pawn.Field.Y + 2])) { pawnsToKill.Add(pawn); break; } } if (NumberNotSmall(pawn.Field.X) && NumberNotSmall(pawn.Field.Y)) { if (beatChecker.CanCounterBeat(pawn.Field, board.fields[pawn.Field.X - 2, pawn.Field.Y - 2])) { pawnsToKill.Add(pawn); break; } } break; case State.Queen: var breakC = false; var signX = 1; var signY = 1; var range = SetUpRange(); var it = 0; while (it <= 3) { var count = 1; while (count <= 7) { int?x = range[it][0]; int?y = range[it][1]; if (range[it][0] == 0) { if (pawn.Field.X - count < 0) { x = null; } } if (range[it][0] == 7) { if (pawn.Field.X + count > 7) { x = null; } } if (range[it][1] == 0) { if (pawn.Field.Y + count > 0) { y = null; } } if (range[it][1] == 7) { if (pawn.Field.Y + count > 7) { y = null; } } if (x != null && y != null) { if (range[it][0] == 0) { signX = -1; } else { signX = 1; } if (range[it][1] == 0) { signY = -1; } else { signY = 1; } if (beatChecker.CanQueenBeat(pawn.Field, board.fields[pawn.Field.X + count * signX, pawn.Field.Y + count * signY])) { pawnsToKill.Add(pawn); breakC = true; break; } } count++; } if (breakC) { break; } it++; } break; } } return(pawnsToKill); }