public override List <Tuple <uint, uint> > getPossibleMoves(Board.QueryFunc QF) { List <Tuple <uint, uint> > tmpList = new List <Tuple <uint, uint> >(); List <Tuple <int, int> > jmpList = new List <Tuple <int, int> >(); //Contains all possible jump locations jmpList.Add(new Tuple <int, int>(1, 2)); jmpList.Add(new Tuple <int, int>(1, -2)); jmpList.Add(new Tuple <int, int>(2, 1)); jmpList.Add(new Tuple <int, int>(2, -1)); jmpList.Add(new Tuple <int, int>(-1, 2)); jmpList.Add(new Tuple <int, int>(-1, -2)); jmpList.Add(new Tuple <int, int>(-2, 1)); jmpList.Add(new Tuple <int, int>(-2, -1)); // Loops over jump locations foreach (Tuple <int, int> item in jmpList) { int x = item.Item1; int y = item.Item2; if (withinBoard((int)getX() + x, (int)getY() + y)) { Square S = QF((uint)(getX() + x), (uint)(getY() + y)); Piece P = S.getPiece(); if (P != null) { if (!isSameColour(P)) { tmpList.Add(new Tuple <uint, uint>((uint)(getX() + x), (uint)(getY() + y))); } } } } return(tmpList); }
//Checks if move is possible public bool movePossible(uint x, uint y, Board.QueryFunc QF) { List <Tuple <uint, uint> > tmp; tmp = this.getPossibleMoves(QF); foreach (Tuple <uint, uint> item in tmp) { if ((item.Item1 == x) && (item.Item2 == 2)) { return(true); } } return(false); }
public override List <Tuple <uint, uint> > getPossibleMoves(Board.QueryFunc QF) { List <Tuple <uint, uint> > moves = new List <Tuple <uint, uint> >(); // Check down moves int x = (int)getX(); int y = (int)getY(); for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { int nx = x + i; int ny = y + j; if (withinBoard(nx, ny)) { Square s = QF((uint)nx, (uint)ny); if ((getColour() == "white" && s.getBlackCover() == 0) || (getColour() == "black" && s.getWhiteCover() == 0)) { Piece p = s.getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)nx, (uint)ny)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)nx, (uint)ny)); } } } } } } // Done, all moves found return(moves); }
public override List <Tuple <uint, uint> > getPossibleMoves(Board.QueryFunc QF) { List <Tuple <uint, uint> > moves = new List <Tuple <uint, uint> >(); // Check down moves int x = (int)getX(); int y = (int)getY(); while (true) { y--; if (!withinBoard(x, y)) { break; } Piece p = QF((uint)x, (uint)y).getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); break; } else { break; } } } // Check up moves x = (int)getX(); y = (int)getY(); while (true) { y++; if (!withinBoard(x, y)) { break; } Piece p = QF((uint)x, (uint)y).getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); break; } else { break; } } } // Check right moves x = (int)getX(); y = (int)getY(); while (true) { x++; if (!withinBoard(x, y)) { break; } Piece p = QF((uint)x, (uint)y).getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); break; } else { break; } } } // Check left moves x = (int)getX(); y = (int)getY(); while (true) { x--; if (!withinBoard(x, y)) { break; } Piece p = QF((uint)x, (uint)y).getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); break; } else { break; } } } // Done, all moves found return(moves); }
//returns a list of all possible moves public abstract List <Tuple <uint, uint> > getPossibleMoves(Board.QueryFunc QF);
public override List <Tuple <uint, uint> > getPossibleMoves(Board.QueryFunc QF) { List <Tuple <uint, uint> > tmpList = new List <Tuple <uint, uint> >(); short yMod; if (this.colour == "white") { yMod = 1; } else { yMod = -1; } // Take left if (withinBoard((int)getX() - 1, (int)getY() + yMod)) { Square S = QF((uint)(getX() - 1), (uint)(getY() + yMod)); Piece P = S.getPiece(); if (P != null) { if (!isSameColour(P)) { tmpList.Add(new Tuple <uint, uint>((uint)(getX() - 1), (uint)(getY() + yMod))); } } } //Take right if (withinBoard((int)getX() + 1, (int)getY() + yMod)) { Square S = QF((uint)(getX() + 1), (uint)(getY() + yMod)); Piece P = S.getPiece(); if (P != null) { if (!isSameColour(P)) { tmpList.Add(new Tuple <uint, uint>((uint)(getX() + 1), (uint)(getY() + yMod))); } } } //Move 1 if (withinBoard((int)getX(), (int)getY() + yMod)) { Square S = QF(getX(), (uint)(getY() + yMod)); Piece P = S.getPiece(); if (P == null) { tmpList.Add(new Tuple <uint, uint>(getX(), (uint)(getY() + yMod))); } } //Move 2 (Only first move) if (!movedFromInit()) { if (withinBoard((int)getX(), (int)getY() + 2 * yMod)) { Square S = QF(getX(), (uint)(getY() + 2 * yMod)); Piece P = S.getPiece(); if (P == null) { tmpList.Add(new Tuple <uint, uint>(getX(), (uint)(getY() + 2 * yMod))); } } } return(tmpList); }