Warcaby angielskie - środowisko badania heurystyk |
Implementacja heurystycznej funkcji oceny musi być napisana w języku Java zgodnie z poniższym przykładem:
package checkers; // Ten pakiet jest wymagany - nie usuwaj go
public class EvaluatePosition // Ta klasa jest wymagana - nie usuwaj jej
{
static private final int WIN=Integer.MAX_VALUE/2;
static private final int LOSE=Integer.MIN_VALUE/2;
static private boolean _color; // To pole jest wymagane - nie usuwaj go
static public void changeColor(boolean color) // Ta metoda jest wymagana - nie zmieniaj jej
{
_color=color;
}
static public boolean getColor() // Ta metoda jest wymagana - nie zmieniaj jej
{
return _color;
}
static public int evaluatePosition(AIBoard board)
// Ta metoda jest wymagana. Jest to główna metoda heurystyki - umieść swój kod tutaj
{
int myRating=0;
int opponentsRating=0;
int size=board.getSize();
for (int i=0;i<size;i++)
{
for (int j=(i+1)%2;j<size;j+=2)
{
if (!board._board[i][j].empty) // pole nie jest puste
{
if (board._board[i][j].white==getColor()) // to jest moj pionek
{
if (board._board[i][j].king) myRating+=5; // to jest moja damka
else myRating+=1; // to jest moj pionek
}
else
{
if (board._board[i][j].king) opponentsRating+=5; // to jest damka przeciwnika
else opponentsRating+=1;
}
}
}
}
//Judge.updateLog("Tutaj wpisz swoją wiadomość - zobaczysz ją w oknie log\n");
if (myRating==0) return LOSE; // przegrana
else if (opponentsRating==0) return WIN; // wygrana
else return myRating-opponentsRating;
}
}
package checkers;
Implementacja heurystycznej funkcji oceny musi dostarczać pakiet checkers zawierający opisane niżej elementy.
Są one niezbędne do poprawnego działania heurystyki w programie.
public class EvaluatePosition
Pakiet checkers musi zawierać kompletną implementację klasy EvaluatePosition.
Klasa zawiera implementację wszelkich metod i pól niezbędnych dla poprawnego działania funkcji heurystycznej. Można modyfikować i rozszerzać jej treść, z uwzględnieniem wymagań na niżej wymienione metody i pola.
static private boolean_color;
UWAGA! Tego pola nie należy w żaden sposób modyfikować!
Pole przechowuje informację, które pionki należą do gracza bieżącego. Możliwe wartości:
void changeColor(boolean color)
UWAGA! Tej metody nie można wywoływać ani w żaden sposób modyfikować!
Metoda pozwala na zdefiniowaniowanie, które pionki gracz bieżący ma uważać za swoje. Jeżeli jako argument metoda otrzyma wartość:
boolean getColor()
UWAGA! Tej metody nie należy w żaden sposób modyfikować!
Metoda określa, które pionki należą do gracza bieżącego. Wartości zwracane:
int evaluatePosition(AIBoard board)
UWAGA! To jest główna metoda heurystyki! Nie należy jej usuwać ale można modyfikować jej treść.
Metoda pozwala na analizę stanu planszy.
Metoda jako argument przyjmuje planszę do oceny typu AIBoard (opisanego niżej).
Metoda zwraca wartość int funkcji oceny dla danej planszy.
Przechowuje reprezentację planszy: jej rozmiar, informację do którego z graczy należy ruch i rozmieszczenie pionków.
Piece [][] _board
Tablica dwuwymiarowa przechowująca reprezentację pól planszy (klasy Piece).
Pierwszy indeks oznacza wiersz a drugi indeks kolumnę planszy, numerowane od [0][0] (lewy górny róg planszy), do [getSize()-1][getSize()-1] (prawy dolny róg planszy).
Tablica jest określona tylko dla elementów, które odpowiadają czarnym (aktywnym) polom planszy. Odwołanie się to elementu tablicy odpowiadającemy białemu (nieaktywnemu) polu planszy daje wynik nieokreślony.
boolean getMovesWhite()
Metoda określa, do którego z graczy należy ruch.
int getSize()
Metoda zwraca wartość int określającą długość boku planszy.
Przechowuje reprezentację pola planszy: informację czy zawiera pionka, jakiego koloru, oraz czy jest damką.
boolean empty;
Pole określa czy pionek istnieje w danym polu. Przyjmuje wartość:
boolean king;
Pole określa czy dany pionek w danym polu jest damką. Jeżeli przyjmuje wartość:
boolean white;
Pole określa do którego z graczy należy pionek w danym polu. Jeżeli przyjmuje wartość: