private Position[] AddCollisionHorse(ChessPiece CurrentPiece) { Position[] allTurns = CurrentPiece.PossibleTurns().SelectMany(x => x).ToArray(); List <Position> Builder = new List <Position>(); foreach (Position position in allTurns) { ChessPiece chessPiece = this[position]; if (chessPiece != null) { //Enemy if (chessPiece.Color != CurrentPiece.Color) { Builder.Add(position); } } else { //Empty space Builder.Add(position); } } return(Builder.ToArray()); }
//Collisions for these pieces are same private Position[] AddCollisionRookBishopQueenKing(ChessPiece CurrentPiece) { Position[][] allTurns = CurrentPiece.PossibleTurns(); List <Position> Builder = new List <Position>(); foreach (Position[] Direction in allTurns) { foreach (Position singlePosition in Direction) { ChessPiece chessPiece = this[singlePosition]; if (chessPiece != null) { //Check if piece belongs to player or not if (chessPiece.Color == CurrentPiece.Color) { break; } else { //Enemy Builder.Add(singlePosition); break; } } else { //Empty space Builder.Add(singlePosition); } } } return(Builder.ToArray()); }
private Position[] AddCollisionPawn(ChessPiece CurrentPiece) { Position[] allTurns = CurrentPiece.PossibleTurns().SelectMany(x => x).ToArray(); List <Position> Builder = new List <Position>(); if (allTurns.Length == 0) { // Change to any piece except pawn and king } else { //Check forward, left forward, right forward foreach (Position forwardDirection in allTurns) { if (this[forwardDirection] == null) { Builder.Add(forwardDirection); } else { break; } } Position forward = allTurns[0]; //If there're pieces right or left corners, take them. Position ForwardLeft = forward.ToLeft(CurrentPiece.Color); if (ForwardLeft.IsOnBoard()) { ChessPiece PieceForwardLeft = this[ForwardLeft]; if (PieceForwardLeft != null && PieceForwardLeft.Color != CurrentPiece.Color) { Builder.Add(ForwardLeft); } } Position ForwardRight = forward.ToRight(CurrentPiece.Color); if (ForwardRight.IsOnBoard()) { ChessPiece PieceForwardRight = this[ForwardRight]; if (PieceForwardRight != null && PieceForwardRight.Color != CurrentPiece.Color) { Builder.Add(ForwardRight); } } } return(Builder.ToArray()); }