public void AddTwoBags(PositionsBag bagOne, PositionsBag bagTwo) { XList.AddRange(bagOne.XList); XList.AddRange(bagTwo.XList); YList.AddRange(bagOne.YList); YList.AddRange(bagTwo.YList); }
private PositionsBag PossibleMovementOfQueen(int x, int y, List <List <int> > mainList) { PositionsBag bag = new PositionsBag(); PositionsBag bagBishop = new PositionsBag(); PositionsBag bagRook = new PositionsBag(); // queen's movement is rook+bishop movement bagBishop = PossibleMovementOfBishop(x, y, mainList); bagRook = PossibleMovementOfRook(x, y, mainList); bag.AddTwoBags(bagBishop, bagRook); return(bag); }
// Prediction of move public List <List <int> > GetPossibleMovement(string name, int x, int y) { List <List <int> > mainList = new List <List <int> >(); mainList = GetAllPosOfPawns(); PositionsBag bag = new PositionsBag(); string color = ""; foreach (Pown item in this.Pawns) { if (name == item.Name) { color = item.Color; //Role 0=pawn/1=rook/2=knight/3=bishop/king=4/queen=5 switch (item.Role) { case 0: bag = PossibleMovementOfPawn(item, x, y, mainList); break; case 1: bag = PossibleMovementOfRook(x, y, mainList); break; case 2: bag = PossibleMovementOfKnight(x, y); break; case 3: bag = PossibleMovementOfBishop(x, y, mainList); break; case 4: bag = PossibleMovementOfKing(x, y, item.Color); break; case 5: bag = PossibleMovementOfQueen(x, y, mainList); break; } } } mainList = new List <List <int> >(); mainList.Add(bag.XList); mainList.Add(bag.YList); mainList = RemoveFriendlyPos(mainList, color); return(mainList); }
public List <List <int> > GetAllPossibleMovementAdverse(string color) { List <List <int> > mainList = new List <List <int> >(); mainList = GetAllPosOfPawns(); PositionsBag bag = new PositionsBag(); string colorPown = ""; foreach (Pown item in this.Pawns) { if (color != item.Color) { colorPown = item.Color; //Role 0=pawn/1=rook/2=knight/3=bishop/king=4/queen=5 switch (item.Role) { case 0: bag.AddBag(PossibleMovementOfPawn(item, item.PosX, item.PosY, mainList)); break; case 1: bag.AddBag(PossibleMovementOfRook(item.PosX, item.PosY, mainList)); break; case 2: bag.AddBag(PossibleMovementOfKnight(item.PosX, item.PosY)); break; case 3: bag.AddBag(PossibleMovementOfBishop(item.PosX, item.PosY, mainList)); break; case 4: // make nothing else overflow break; case 5: bag.AddBag(PossibleMovementOfQueen(item.PosX, item.PosY, mainList)); break; } } } mainList = new List <List <int> >(); mainList.Add(bag.XList); mainList.Add(bag.YList); return(mainList); }
private PositionsBag PossibleMovementOfKnight(int x, int y) { PositionsBag bag = new PositionsBag(); List <int> xList = new List <int>(); List <int> yList = new List <int>(); xList.Add(x + 2); yList.Add(y - 1); xList.Add(x + 2); yList.Add(y + 1); xList.Add(x + 1); yList.Add(y - 2); xList.Add(x - 1); yList.Add(y - 2); xList.Add(x - 2); yList.Add(y - 1); xList.Add(x - 2); yList.Add(y + 1); xList.Add(x - 1); yList.Add(y + 2); xList.Add(x + 1); yList.Add(y + 2); bag.XList = xList; bag.YList = yList; return(bag); }
private PositionsBag PossibleMovementOfKing(int x, int y, string colorKing) { PositionsBag bag = new PositionsBag(); List <int> xList = new List <int>(); List <int> yList = new List <int>(); // each movement with one scope for (int i = x - 1; i < x + 2; i++) { for (int j = y - 1; j < y + 2; j++) { xList.Add(i); yList.Add(j); } } bag.XList = xList; bag.YList = yList; return(bag); }
public void Castling(string source, string second) { //set rook and king and verificate movement for castling Pown king = new Pown(); Pown rook = new Pown(); PositionsBag bag = new PositionsBag(); Boolean castling = false; foreach (Pown item in Pawns) { if (item.Name == source) { if (item.Role == 1) { rook = item; } else { king = item; } } if (item.Name == second) { if (item.Role == 1) { rook = item; } else { king = item; } } } if (king.CountMove == 0 && rook.CountMove == 0) { bag = PossibleMovementOfRook(rook.PosX, rook.PosY, GetAllPosOfPawns()); for (int i = 0; i < bag.XList.Count; i++) { if (king.PosX == bag.XList[i] && king.PosY == bag.YList[i]) { castling = true; } } } if (castling == true) { if (rook.PosX == 1) { king.PosX = king.PosX - 2; rook.PosX = rook.PosX + 3; } else { king.PosX = king.PosX + 2; rook.PosX = rook.PosX - 2; } } ChangePos(king.Name, king.PosX, king.PosY); ChangePos(rook.Name, king.PosX, king.PosY); }
private PositionsBag PossibleMovementOfBishop(int x, int y, List <List <int> > mainList) { PositionsBag bag = new PositionsBag(); List <int> xList = new List <int>(); List <int> yList = new List <int>(); bool northeastToken = true; bool southeastToken = true; bool northwestToken = true; bool southwestToken = true; for (int i = 1; i < 8; i++) { // Need separate calcule for each direction // Northeast if (northeastToken) { xList.Add(x + i); yList.Add(y - i); } // Southeast if (southeastToken) { xList.Add(x + i); yList.Add(y + i); } // Northwest if (northwestToken) { xList.Add(x - i); yList.Add(y - i); } // Southwest if (southwestToken) { xList.Add(x - i); yList.Add(y + i); } for (int j = 0; j < mainList[0].Count; j++) { // Northeast if (x + i == mainList[0][j] && mainList[1][j] == y - i) { northeastToken = false; } // Southeast if (x + i == mainList[0][j] && mainList[1][j] == y + i) { southeastToken = false; } // Northwest if (x - i == mainList[0][j] && mainList[1][j] == y - i) { northwestToken = false; } // Southwest if (x - i == mainList[0][j] && mainList[1][j] == y + i) { southwestToken = false; } } } bag.XList = xList; bag.YList = yList; return(bag); }
private PositionsBag PossibleMovementOfRook(int x, int y, List <List <int> > mainList) { PositionsBag bag = new PositionsBag(); List <int> xList = new List <int>(); List <int> yList = new List <int>(); bool hitBoxToken = true; // Need separate calcule for each direction // West for (int i = x - 1; i > 0; i--) { if (hitBoxToken) { xList.Add(i); yList.Add(y); } for (int j = 0; j < mainList[0].Count; j++) { if (y == mainList[1][j] && mainList[0][j] == i) { hitBoxToken = false; } } } hitBoxToken = true; // East for (int i = x + 1; i <= 8; i++) { if (hitBoxToken) { xList.Add(i); yList.Add(y); } for (int j = 0; j < mainList[0].Count; j++) { if (y == mainList[1][j] && mainList[0][j] == i) { hitBoxToken = false; } } } hitBoxToken = true; // North for (int i = y + 1; i <= 8; i++) { if (hitBoxToken) { xList.Add(x); yList.Add(i); } for (int j = 0; j < mainList[0].Count; j++) { if (x == mainList[0][j] && mainList[1][j] == i) { hitBoxToken = false; } } } hitBoxToken = true; // South for (int i = y - 1; i > 0; i--) { if (hitBoxToken) { xList.Add(x); yList.Add(i); } for (int j = 0; j < mainList[0].Count; j++) { if (x == mainList[0][j] && mainList[1][j] == i) { hitBoxToken = false; } } } bag.XList = xList; bag.YList = yList; return(bag); }
public void AddBag(PositionsBag bag) { XList.AddRange(bag.XList); YList.AddRange(bag.YList); }
private PositionsBag PossibleMovementOfPawn(Pown item, int x, int y, List <List <int> > mainList) { PositionsBag bag = new PositionsBag(); List <int> xList = new List <int>(); List <int> yList = new List <int>(); bool moveDiagonalToken = true; bool twoMoveToken = true; for (int i = 0; i < mainList[0].Count; i++) { if (item.Color == "black") { //check if a pown was in diagonal if (mainList[0][i] == (item.PosX + 1) && (item.PosY + 1) == mainList[1][i]) { xList.Add(x + 1); yList.Add(y + 1); } if (mainList[0][i] == (item.PosX - 1) && (item.PosY + 1) == mainList[1][i]) { xList.Add(x - 1); yList.Add(y + 1); } //check if a pown was in front if (mainList[1][i] == (item.PosY + 1) && mainList[0][i] == item.PosX) { moveDiagonalToken = false; } if (mainList[1][i] == (item.PosY + 1) && mainList[0][i] == item.PosX) { moveDiagonalToken = false; } if (mainList[1][i] == (item.PosY + 2) && mainList[0][i] == item.PosX) { twoMoveToken = false; } if (moveDiagonalToken == true && mainList[0].Count - 1 == i) { xList.Add(x); yList.Add(y + 1); } // for two case movement if (item.CountMove == 0 && twoMoveToken == true) { xList.Add(x); yList.Add(y + 2); } } else { //check if a pown was in diagonal if (mainList[0][i] == (item.PosX + 1) && (item.PosY - 1) == mainList[1][i]) { xList.Add(x + 1); yList.Add(y - 1); } if (mainList[0][i] == (item.PosX - 1) && (item.PosY - 1) == mainList[1][i]) { xList.Add(x - 1); yList.Add(y - 1); } //check if a pown was in front if (mainList[1][i] == (item.PosY - 1) && mainList[0][i] == item.PosX) { moveDiagonalToken = false; } if (mainList[1][i] == (item.PosY - 2) && mainList[0][i] == item.PosX) { twoMoveToken = false; } if (moveDiagonalToken == true && mainList[0].Count - 1 == i) { xList.Add(x); yList.Add(y - 1); } // for two case movement if (item.CountMove == 0 && twoMoveToken == true) { xList.Add(x); yList.Add(y - 2); } } } bag.XList = xList; bag.YList = yList; return(bag); }