Pobierz PDF - e-Swoi

Transkrypt

Pobierz PDF - e-Swoi
Nazwa implementacji: Kółko i krzyżyk
Autor: Jarosław Żok
Opis implementacji: Odnalezienie w istniejącym kodzie miejsca, które należy rozbudować o sprawdzanie istnienia kombinacji figur w grze
"Kółko i krzyżyk", które w następnym ruchu pozwolą przeciwnikowi na wygranie i zablokowanie ruchu przeciwnika.
Mamy zaimplementowaną grę w kółko i krzyżyk. Jednak algorytm, który gra jako przeciwnik gracza, prowadzi rozgrywkę defensywnie. Gracz z
łatwością potrafi zablokować komputerowego przeciwnika. Naszym zadaniem będzie „nauczenie” algorytmu grania ofensywnego i
wykrywanie sytuacji, gdy gracz może wygrać i zablokowanie go.
Uruchom grę w kółko i krzyżyk i spróbuj zagrać z komputerem. Gracz zawsze zaczyna grę pierwszy. Zobacz jak łatwo wygrać. Jak działa
algorytm grania w kółko i krzyżyk? Plansza do gry w kółko i krzyżyk podzielona jest na 9 pól, trzy wiersze po trzy kolumny. Pola na planszy
możemy „adresować” (czyli wskazać jednoznacznie pole, które nas interesuje za pomocą parametrów) na dwa sposoby. Pierwszy to
numerowanie pól w kolejności od górnego lewego rogu planszy. Poniżej pokazano ten sposób:
Drugi sposób, to podanie kolumny i wiersza pola, którym jesteśmy zainteresowani:
X – numer kolumny
Y – numer wiersza
Jeden i drugi sposób pozwala jednoznacznie wskazać pole, o które nam chodzi. Można je stosować zamiennie, można nawet przeliczyć jeden
sposób na drugi. W naszej implementacji korzystamy z obu sposobów zależnie, który w danym kontekście będzie łatwiejszy w obsłudze.
W grze w kółko i krzyżyk wygrana gracza zapewniona jest przez obecność trzech jego figur w trzech leżących obok siebie polach. Także, pola,
które stykają się wierzchołkami, liczą się do wygranej. Poniżej zestaw ośmiu kombinacji pól, w których ustawienie trzech figur gwarantuje
wygraną oraz pod spodem numery pól dla kombinacji zaznaczonych na czerwono:
1
Projekt “Strategia Wolnych i Otwartych Implementacji jako innowacyjny model zainteresowania kierunkami informatyczno-technicznymi oraz wspierania uczniów i uczennic w
kształtowaniu kompetencji kluczowych” współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego.
123
456
7 8 9 147
2 5 8 3 6 9 1 5 9 357
Możemy zatem określić tablicę, która zawierać będzie osiem trójek liczb będących numerami pól z pierwszego sposobu adresowania pól na
planszy. W implementacji nazwaliśmy te trójki liczb, złotymi trójkami, tak też nazywa się tablica je przechowująca. Tablica ta służy
algorytmowi do określenia czy, któryś z graczy wygrał partię. Drugim zastosowaniem tej tablicy jest określenie czy w którejś z trójek pól nie
zachodzi sytuacja, że dwa pola są zajęte przez własne figury, jeżeli tak, możemy wtedy wykonać ruch, stawiając trzecią własną w wolnym
polu w trójce i tym samym wygrać partię. Może się zdarzyć tak, że takich konfiguracji z dwoma polami zajętymi przez własne figury jest
więcej niż jedna, wtedy algorytm może wybrać jedną z nich w losowy sposób i ustawić figurę w tym miejscu uzupełniając konfigurację do
trzech i wygrywając partię. Najpierw jednak zbierze wszystkie takie uzupełnione dwoma figurami konfiguracje i zapisze w kolejnej tablicy
nazwanej złotymi dwójkami. Z niej w losowy sposób wybierze kombinację pól, które uzupełni do trzech. Jeżeli algorytm nie znajdzie żadnych
podwójnych pól ani nie znajdzie żadnych trójek wypełnionych takimi samymi figurami, losuje spośród jeszcze wolnych jedno pola i tam stawia
własną figurę. Jeżeli nie ma już wolnych pól i nikt nie wygrał, to oznacza remis.
Przy okazji sprawdzania własnych dwójek algorytm notuje także dwójki przeciwnika, jednak informacja ta nie jest nigdzie wykorzystywana.
Algorytm gra zatem dosyć defensywnie, wykorzystując własne dwójki figur, ewentualnie losując miejsce do postawienia figury spośród
wolnych pól, nie bacząc na sytuację przeciwnika, który także może mieć dwa sąsiadujące pole zajęte i w kolejnym ruchu wygrać.
Poniżej wypunktowane działanie algorytmu.
1. Zapisz do tablicy złotych trójek, trójki następujących liczb:(1,2,3), (4,5,6), (7,8,9), (1,4,7), (2,5,8), (3,6,9), (1,5,9), (3,5,7)
2. Wyczyść tablicę złotych dwójek, dwójek przeciwnika oraz tablicę wolnych pól.Dla każdej trójki z tablicy złotych trójek sprawdź czy zachodzi
sytuacja, że w dwóch polach z trójki znajdują się dwie takie same figury:
- jeżeli znajdziesz dwójkę własnych figur, zanotuj w tablicy złotych dwójek,
- jeżeli znajdziesz dwójkę figur przeciwnika, zanotuj w tablicy dwójek przeciwnika.
3. Jeżeli tablica złotych dwójek jest pusta to:
- zbierz wszystkie wolne pola i zapisz w tablicy tymczasowej.
2
Projekt “Strategia Wolnych i Otwartych Implementacji jako innowacyjny model zainteresowania kierunkami informatyczno-technicznymi oraz wspierania uczniów i uczennic w
kształtowaniu kompetencji kluczowych” współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego.
Czy w tablicy tymczasowej są wolne pola?
- z zebranych pól wylosuj jedno i tam postaw swoją figurę. Przejdź do punktu 4
W przeciwnym wypadku:
- ogłoś remis i zakończ algorytm.
W przeciwnym wypadku:
- wylosuj jedną dwóję z tablicy złotych dwójek i w wolnym polu ze złotej dwójki postaw swoją figurę.
4. Sprawdź czy któraś z trójek zawiera trzy takie same figury
- czy to są moje figury?
- tak – wygrałem – koniec algorytmu
- nie – przegrałem – koniec algorytmu
Jeżeli żadna z trójek nie zawiera trzech takich samych figur, oddaj ruch przeciwnikowi.
5. Idź do punktu 2.
3
Projekt “Strategia Wolnych i Otwartych Implementacji jako innowacyjny model zainteresowania kierunkami informatyczno-technicznymi oraz wspierania uczniów i uczennic w
kształtowaniu kompetencji kluczowych” współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego.