288 Rozdział 12. Czy komputery mogą myśleć?
Po czym poznajemy siłę naszej pozycji w danym etapie gry w „kółko i krzyżyk”? Można wymyślać dość sporo dziwnych kryteriów, mnie jednak przekonało jedno. które notabene dość często pojawia się w literaturze. Wykorzystujemy pojęcie ilości linii otwartych dla danego gracza, tzn. takich, które nie są blokowane przez przeciwnika i w związku z tym rokują nadzieję na skonstruowanie polnej linii dającej nam zwycięstwo. Omawianą zasadę ilustruje rysunek 12-5. Wartość tej liczby jest pomniejszana o ilość linii otwartych dla przeciwnika.
ewaluacjci(p 1 ansza, x)=6-4=2
Rys. 12 - S.
Pojęcie linii otwartych w grze w „kółko i krzyżyk ",
Rysunek sugeruje przy okazji strukturę danych, która może być wykorzystywana do zapamiętania stanu gry. Jest to zwykła tablica int t[9J, której indeksy odpowiadają pozycjom planszy z rysunku 12 - 5. Oprócz wartości typu int możliwe jest pewne wzbogacenie stosowanej semantyki poprzez zastosowanie typu wyliczeniowego6:
enum KTO)nic, komputer, człowiek);
Wartościami danego pola planszy byłyby wówczas zmienne nie typu int, ale typu KTO. choć znawcy języków C/C++ wiedzą, że wewnętrznie jest to również int...
Funkcja cnciluacja otrzymuje w parametrze planszę i informację o tym dla kogo wyliczenie ma zostać przeprowadzone.
Problem wartości typu plus można rozwiązać wybierając liczby, które są znacznie większe od tych, zwracanych przez funkcję ewaluacja:
const plu3_nie3k - 1000;
const minus_niesk = -1000;
Podczas gry następuje zmiana gracza, w związku z tym przydatna będzie funkcja mówiąca nam o tym. kto ma zagrać:
KTO Nastepny_Gracz(KTO gracz)
Stałym komputer i człowiek odpowiadają na planszy znaki „kółko" i „krzyży k".