Obzirom da je ovo prilicno poznata igra, verujem da na netu vec imas dobrih resenja problema :) Elem, meni na prvu loptu deluje kao da ti zapravo imas problem sa informacijom da li si odredjeno polje vec proveravao ili ne...?
Logika igre je sledeca - imas dve liste sa identicnim brojem clanova, jedna sadrzi tacan raspored boja (zadatak), druga raspored boja koji predstavlja pokusaj igraca da pogodi tacan raspored. Vrsi se uporedjivanje dve liste gde jedan clan iz jedne liste moze biti uparen samo sa jednim clanom iz druge liste (ovo je sustina problema). Uporedjivanje/uparivanje se vrsi na dva nacina (gde clanovi dve liste mogu biti upareni samo na jedan, ili nijedan) - prvo da li je prava boja na pravom mestu (ovo poredjenje ima prednost), zatim da li je prava boja na pogresnom mestu.
Dakle, najprostiji nacin bi bio sledeci - za nalazenje tacnih boja na tacnom mestu, poredis onako kako si ti postavio - porede se dve liste gde medjusobno poredis samo clanove na istoj poziciji - ako su boje iste, dobio si uparivanje ta dva clana po uslovu boja/pozicija. Ovde je potrebno da na neki nacin pamtis koji su clanovi vec upareni, zato sto oni ne mogu ucestvovati u drugom poredjenju, gde se trazi samo boja - to mozes raditi bilo kroz neku promenljivu koju ces dodati samim clanovima lista, pa je po potrebi setovati na true/false, ili vec obeleziti "uparene" clanove na neki drugi nacin.
Primer:
Code:
for i := 0 to 3 do
begin
if (pokusaj[i].Color = zadatak[i].Color) then
begin
pokusaj[i].Uparen := True;
zadatak[i].Uparen := True;
Da := Da + 1;
end;
end;
Zatim prelazis na drugo poredjenje (ono koje ti nedostaje) - u najgorem slucaju, moras proci kroz sve clanove jedne liste za sve clanove druge liste (jer moras uporediti svaku boju iz jedne liste sa svakom bojom iz druge liste). U poredjenju ne mogu ucestvovati clanovi koju su prethodno vec upareni prilikom prvog poredjenja, ali ni clanovi koji su prethodno upareni iz drugog poredjenja - tj. kada prilikom drugog poredjenja nadjes "par", ti clanovi vise ne ucestvuju u nastavku poredjenja, u potrazi za drugim parovima.
Primer:
Code:
for i := 0 to 3 do
begin
if (not pokusaj[i].Uparen) then
for j := 0 to 3 do
begin
if ((not zadatak[j].Uparen)
and (pokusaj[i].Color = zadatak[j].Color)) then
begin
pokusaj[i].Uparen := True;
zadatak[j].Uparen := True;
Ne := Ne + 1;
//
break; // predji na sledeci pokusaj
end;
end;
end;
Rekoh, verujem da postoje i bolja/brza resenja, ali eto ti jedne ideje za razmisljanje, pa ti vidi :)