Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public double EvaluationFunction()
- {
- //throw new Exception("Aceasta metoda trebuie implementata");
- double c = 0;
- double o = 0;
- int i;
- for (i = 0; i < Size; ++i)
- {
- c += Size - Pieces[i].Y;
- o += Pieces[i + Size].Y;
- }
- return o + c;
- }
- ----------------------------
- public static Board FindNextBoard(Board currentBoard)
- {
- //throw new Exception("Aceasta metoda trebuie implementata");
- List<Board> configurations = new List<Board>();
- List<Board> finalConfiguration = new List<Board>();
- double max = 0;
- foreach (Piece p in currentBoard.Pieces)
- {
- if (p.Id >= 0 && p.Id <= 3)
- {
- List<Move> movesPiece = p.ValidMoves(currentBoard);
- foreach (Move m in movesPiece)
- {
- configurations.Add(currentBoard.MakeMove(m));
- }
- }
- }
- foreach (Board b in configurations)
- {
- double evalStatic = b.EvaluationFunction();
- if (max < evalStatic)
- {
- max = evalStatic;
- }
- }
- foreach (Board b in configurations)
- {
- double evalStatic = b.EvaluationFunction();
- if (max == evalStatic)
- {
- finalConfiguration.Add(b);
- }
- }
- int r = _rand.Next(finalConfiguration.Count);
- if (finalConfiguration.Count == 0)
- return currentBoard;
- return finalConfiguration[r];
- }
- ----------------------------------
- public List<Move> ValidMoves(Board currentBoard)
- {
- //throw new Exception("Aceasta metoda trebuie implementata");
- int boardSize = currentBoard.Size;
- List<Move> validMovesList = new List<Move>();
- for (int x = 0; x < boardSize; ++x)
- {
- for (int y = 0; y < boardSize; ++y)
- {
- Move m = new Move(Id, x, y);
- if (IsValidMove(currentBoard, m))
- {
- validMovesList.Add(m);
- }
- }
- }
- return validMovesList;
- }
- /// <summary>
- /// Testeaza daca o mutare este valida intr-o anumita configuratie
- /// </summary>
- public bool IsValidMove(Board currentBoard, Move move)
- {
- //throw new Exception("Aceasta metoda trebuie implementata");
- int boardSize = currentBoard.Size;
- if (move.NewX >= boardSize || move.NewY >= boardSize || move.NewX < 0 || move.NewY < 0)
- return false;
- if (move.NewX > X + 1 || move.NewY > Y + 1 || move.NewX < X - 1 || move.NewY < Y - 1)
- return false;
- if (move.NewX == X && move.NewY == Y)
- return false;
- foreach (Piece p in currentBoard.Pieces)
- {
- if (p.X == move.NewX && p.Y == move.NewY)
- {
- return false;
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement