public FourInLineGame() : base() { table = new FourInLineTable(); rules = new List <IRule <FourInLine> >() { new ValidPlayFourInLineRule() }; }
public FourInLineGame(Player <FourInLine> player1, Player <FourInLine> player2) : base(new List <Team <FourInLine> >() { new Team <FourInLine>(player1.Id, new List <Player <FourInLine> >(){ player1 }), new Team <FourInLine>(player2.Id, new List <Player <FourInLine> >(){ player2 }) }) { table = new FourInLineTable(); rules = new List <IRule <FourInLine> >() { new ValidPlayFourInLineRule() }; }
/// <summary> /// Método que verifica si ya hay un ganador, chequeando si existe una fila, columna o diagonal llenas por un juagador /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="myTable"></param> /// <returns></returns> public bool AreInLine(int x, int y, FourInLineTable myTable) { int currentX = x; int currentY = y; int count = 0; if (x == -1 || myTable.Board[x, y] == null) { return(false); } //chequeando horizontal derecha while (currentY < myTable.Board.GetLength(1) && myTable.Board[x, y] == myTable.Board[currentX, currentY]) { currentY++; count++; } if (count >= 4) { return(true); } //chequeando horizontal iqz currentX = x; currentY = y; while (currentY >= 0 && myTable.Board[x, y] == myTable.Board[currentX, currentY]) { currentY--; count++; } if (count - 1 >= 4) { return(true); } //chequeando vertical abajo count = 0; currentX = x; currentY = y; while (currentX >= 0 && myTable.Board[x, y] == myTable.Board[currentX, currentY]) { currentX--; count++; } if (count >= 4) { return(true); } //chequeando diagonal derecha abajo count = 0; currentX = x; currentY = y; while (currentY < myTable.Board.GetLength(1) && currentX >= 0 && myTable.Board[x, y] == myTable.Board[currentX, currentY]) { currentX--; currentY++; count++; } if (count >= 4) { return(true); } //chequeando diagonal izq arriba currentX = x; currentY = y; while (currentY >= 0 && currentX < myTable.Board.GetLength(0) && myTable.Board[x, y] == myTable.Board[currentX, currentY]) { currentX++; currentY--; count++; } if (count - 1 >= 4) { return(true); } //chequeando diagonal izq abajo count = 0; currentX = x; currentY = y; while (currentY >= 0 && currentX >= 0 && myTable.Board[x, y] == myTable.Board[currentX, currentY]) { currentX--; currentY--; count++; } if (count >= 4) { return(true); } //chequeando diagonal derecha arriba currentX = x; currentY = y; while (currentY < myTable.Board.GetLength(1) && currentX < myTable.Board.GetLength(0) && myTable.Board[x, y] == myTable.Board[currentX, currentY]) { currentX++; currentY++; count++; } return(count - 1 >= 4); }