예제 #1
0
 public FourInLineGame()
     : base()
 {
     table = new FourInLineTable();
     rules = new List <IRule <FourInLine> >()
     {
         new ValidPlayFourInLineRule()
     };
 }
예제 #2
0
        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()
            };
        }
예제 #3
0
        /// <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);
        }