SI/L/z2

From WikiZMSI

< SI | L

Na zajęciach

  • W bibliotece SaC zapoznać się z klasami z pakietu sac.game - w szczególności: GameState, GameStateImpl, GameSearchAlgorithm, MinMax, oraz AlphaBetaPruning.
  • Napisać klasę reprezentującą stan gry w Connect4, rozszerzającą (dziedziczącą po) sac.game.GameStateImpl. Sugestie: (1) wprowadzić stałe na symbol 'X' i symbol 'O' będące typu byte (lub int), (2) wprowadzić stałe wyznaczające rozmiar planszy - liczba wierszy x liczba kolumn; (3) dodać metodę wykonującą na planszy ruch czyli wrzucenie żetonu do wskazanej kolumny, (4) napisać metodę toString(...) - z czytelnie sformatowanym wyświetleniem planszy, (5) - zaimplementować metodę hashCode(), (6) zaimplementować generowanie stanów potomnych - generateChildren().

Do domu

  • Przemyśleć i zaimplementować wg własnych pomysłów metodę oceniającą heurystycznie pozycję (stan) gry w Connect4 - podpięcie poprzez setHFunction(...). Metoda ta będzie używana przez algorytm "przycinanie alpha-beta", gdy drzewo osiągnie poziom liści, można np. uwzględnić w niej: sumę długości podciągów w różnych kierunkach, preferowanie centrum niż boków lub odwrotnie, bliskość do sufitu, itp. Uwaga: w pierwszej kolejności upewnić się, że metoda zwraca odpowiednie 'nieskończoności' (Double.POSITIVE_INFINITY lub Double.NEGATIVE_INFINITY) dla stanów zwycięzkich.
  • Napisać klasę pozwalającą na rozgrywkę z konsoli pomiędzy człowiekiem a sztuczną inteligencją - główna pętla grająca. Zapewnić przełącznik pozwalający na rozpoczęcie dowolnemu z graczy. W czasie gry wyświetlać na ekran oceny ruchów wykrywane przez algorytm.
  • Naczytywanie ruchu dla gracza-człowieka z klawiatury można zrealizować np. za pomocą klasy java.util.Scanner (konstruktor na obiekcie System.in).