OK, moracu malo vise da pojasnim problem...
Ovako, treba da napisem AI za igricu Lines. To je igra gde se crveni i plavi kruzici ubacuju odozgo i pobednik je onaj ko prvi napravi liniju (horizontalnu, vertikalnu ili dijagonalnu) od 4 istih kruzica. Sad ne bih da reklamiram, ali kome nije jasno neka vidi ovaj
link
Polje za igru je velicine 10x15 (sirina=10, visina=15). U mom DLL-u sam definisao matricu koja odgovara polju ([0..9, 0..14]). Postoji i funkcija
DetermineMove(const maxLine, minLine, deepCount, blobType : Integer) : Integer;
maxLine je maksimalna velicina linije za koju funkcija ispitava, minLine minimalna velicina linije. blobType je tip kruzica, da li je plavi ili crveni.
E sad, deepCount oznacava koliko poteza unapred funkcija proverava zadate uslove. Recimo, ako napisem ovako :
Code:
DetermineMove(4, 4, 0, fEnemy)
, funkcija ce napraviti samo jedan prolaz i proverice da li postoji mogucnost da se napravi linija od 4 neprijateljska kruzica u narednom potezu. Zatim, ako je deepCount = 1, funkcija proverava dva poteza unapred, tj. pravi dva prolaza kroz kod.
Otprilike tako sam zamislio tu funkciju. E sad, postoje funkcije
WriteBlob(const col : Integer) : Boolean; i
RemoveBlob(const col : Integer);. Njih fja DetermineMove koristi. Recimo, ako je deepCount = 0, onda funkcija treba da napravi jedan brojac, recimo C1, od 0 do 9, da u kolonu C1 pomocu fje WriteBlob() upise jedan kruzic i da ispita da li trenutni raspored odgovara zadatim parametrima. Posle toga, pomocu fje RemoveBlob() se kruzic uklanja iz kolone, kako bi se vratio stari raspored. Ako je raspored kruzica pre pozivanja RemoveBlob() fje odgovarao uslovima, izlazi se iz funkcije.
Zatim, ako se fja pozove sa deepCount=1, funkcija treba da napravi dva prolaza i da ispita sve moguce kombinacije (ili varijacije, nisam siguran). Znaci, prvo se u kolonu 0 zapise jedan kruzic pa se onda u kolone od 0 do 9 zapisuje po jos jedan i ispituje (posle toga se uklanja). Zatim se prelazi na kolonu 2, tu se upisuje kruzic, i opet se od 0..9 zapisuje jos po jedan kruzic... I tako dalje, sve dok se ne doje do situacije kad se u 9 koloni nalaze oba kruzica.
Eto celog problema, znaci ja ne znam ovo da napravim. Ona Saletova funkcija bi odgovaral za deepCount=1, ali sta ako je =2 ili vise ?
poz