algorytm nietypowego kolko i krzyzyk 20x20

0

Witam

Mam problem z algorytmem do tej gry, jeśli ktoś ma jakieś sugestie albo pisał podobny prog proszę o pomoc

Pozdrawiam

ps. zawsze moderatorzy się tak czepiają wątków?

0

Jak do wygrania tylko linie sa potrzebne to nie widze problemu w petlach przejechac po planszy.
W celu przyspieszenia algorytmu mozesz zliczac ile juz jest na planszy wybranych znakow. Wiadomo, ze sprawdzasz dopiero od wpisanych 40.

Rowniez mozesz zamiast sprawdzac cala plansze takie cos zrobic:

struct linia {
   char znak;          // znak gracza
   int liczba;           // liczba znakow w linie
   int *next;          // wskaznik na nastepny element listy, moze na strukture w ktorej masz pola x, y  
}

po prostu sprawdzasz, czy znak postawiony przez jednego gracza styka sie z drugim tego samego gracza i jesli tak to uzupelniasz liste.

Natomiast jesli pojawi sie znak w innym miejscu nie majacy nic wspolnego z reszta to wtedy robisz kolejna liste, czyli po prostu tworzysz na poczatku tablice wskaznikow na takie listy pol.

Wiadomo, jesli pole liczba osiagnie wartosc 20 to wygrywa znak z pola znak listy opisanej struktura linia.

0

Algorytm MinMax odsyłam do google :P

0

jeszce bawie sie z sprawdzaniem wygranej,

mam tablice p[x][y] i jak napisac to w petli , bo jakos mi niedziala

0

Jeśli mowa o klasycznym kółko-i-krzyżyk tylko powiększonym do rozmiarów 20x20, to nie ma wiele kombinacji – sprawdzaj kolejne linie pionowe, potem poziome i dwie przekątne.

0

Jeśli chciałbyś zaptymalizować algorytm to możesz ograniczyć przeszukiwanie do wycinka tablicy o rozmiarach 9X9. Pamiętać należy że ostatni postawiony i zarazem wygrywający znak, którego pozycje znasz należy do szukanej piątki. Jezeli ostanie znak postawiony był na pozycji x,y to przeszukać wystarczy komórki indeksach
X = x-4 do x+4
Y = y-4 do y+4

0
Azarien napisał(a)

Jeśli mowa o klasycznym kółko-i-krzyżyk tylko powiększonym do rozmiarów 20x20, to nie ma wiele kombinacji – sprawdzaj kolejne linie pionowe, potem poziome i dwie przekątne.
A nie lepiej sprawdzać tylko te linie, które przecinają się z ostatnim ruchem :P ?

Jak ktoś już wcześniej napisał MinMax to jest to co ci potrzebne. Ten algorytm należy używać z głową, bo w inaczej przy wysokich umiejętnościach komputera (przy przewidywaniu wielu ruchów do przodu) będziesz czekał na ruch komputera dość długo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1