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?
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?
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.
Algorytm MinMax odsyłam do google :P
jeszce bawie sie z sprawdzaniem wygranej,
mam tablice p[x][y] i jak napisac to w petli , bo jakos mi niedziala
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.
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
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.