Igra Poplava

Igra Poplava

Avtor: Alenka Bernard

Razlaga igre

Imamo pravokotno igralno polje, ki je razdeljeno na manjše kvadratke. Vsakemu kvadratku določimo eno izmed možnih barv (v našem primeru jih je 6). Igro igrata dva igralca. Prvemu na začetku dodelimo kvadratek v levem spodnjem kotu, drugemu pa kvadratek v desnem zgornjem kotu. Igralca se izmenjujeta z vsako potezo. Igro igrata s pomočjo gumbov ob strani. Vsak gumb je obarvan s svojo barvo. Ko igralec klikne enega izmed teh gumbov, prevzame kvadratke, ki se dotikajo igralčevih kvadratkov in so enake barve, kot izbrani gumb. Prevzame tudi kvadratke, ki so sosednji pravkar prevzetih kvadratkov in imajo enako barvo. Igralca tekmujeta, kdo bo prevzel več kvadratkov.

(igra1.jpg)
Slika igre

Ideja rešitve

Na oknu imamo pravokotno igralno polje, ki ga razdelimo na majhne kvadratke. Vsakemu kvadratku posebej določimo barvo izmed vseh možnih barv. Kvadratkoma v levem spodnjem kotu in v desnem zgornjem kotu pa nastavimo barvi igralcev. Ob igralno polje postavimo gumbe z možnimi barvami. Potrebujemo tudi dva gumba, s katerima se lahko odločimo, če želimo igrati igro proti računalniku ali pa brez njega. Ob igralnem polju želimo izpisovati tudi, koliko kvadratkov ima trenutno posamezen igralec, koliko potez je bilo izvedenih in pa kdo je trenutno na vrsti.

Podatke o kvadratkih hranimo v dveh tabelah. V eni tabeli so položaji in velikosti kvadratkov, v drugi pa so vzporedno shranjene njihove barve. V dveh seznamih hranimo tudi kvadratke, ki pripadajo prvemu in drugemu igralcu oz. računalniku.

Ko izberemo barvo, ki jo želimo zavzeti, za vsak kvadratek, ki ga že imamo, poiščemo njegove štiri sosede, če obstajajo. Za vsakega soseda preverimo, če je take barve, ki jo želimo zavzeti. V tem primeru kvadratku spremenimo barvo v igralčevo in ga dodamo v seznam igralčevih kvadratkov.

Vsakič, ko izvedemo potezo, preverimo tudi, če igramo proti računalniku. V tem primeru počakamo nekaj časa in izvedemo njegovo potezo. Najprej poiščemo barvo, ki računalniku prinese največ kvadratkov. To naredimo tako, da kopiramo seznam računalnikovih kvadratkov. Na kopiji naredimo enako, kot bi hoteli prebarvati kvadratke določene barve, le da jih ne prebarvamo, ampak jih samo dodamo v kopijo seznama, da preštejemo, koliko kvadratkov bi pridobili. Tako naredimo za vsako barvo. Potem preverimo, pri kateri barvi bi pridobili največ kvadratkov in izvedemo potezo na tej barvi enako, kot če bi potezo naredil igralec.

Po vsaki potezi še preštejemo, koliko kvadratkov imata igralca, prištejemo število potez in nastavimo, da ima naslednjo potezo drug igralec.

Ko kliknemo na gumb za novo igro brez računalnika, ponovno prebarvamo vse kvadratke, izpraznimo seznama igralčevih kvadratkov in vse začnemo šteti od začetka. Nastavimo tudi, da drugi igralec ni računalnik.

Po kliku za novo igro z računalnikom, nastavimo vse, kot bi začeli igro brez računalnika, le da nastavimo, da igramo z računalnikom.

Ko zaženemo igro, je ta nastavljena na igro z dvema igralcema brez računalnika.

Če igramo novo igro z računalnikom, vedno s potezo začne igralec. Če pa igramo igro brez računalnika, naslednjo igro začne igralec, ki v prejšnji ni imel zadnje poteze.

Razlaga rešitve

Ko zaženemo program, rezerviramo prostor v tabelah s kvadratki in barvami. Koliko prostora bomo potrebovali, smo izračunali že prej, glede na velikost igralnega polja in velikost kvadratkov. Določimo tudi, katere barve bomo uporabljali. Ob zagonu nastavimo na igro brez računalnika in z igro začne prvi igralec. Igralca potrebujeta tudi seznama z zavzetimi kvadratki. Na začetku še noben igralec ni izbral nobene barve.

Ko se odpre okno igre, pokličemo funkcijo, ki skonstruira položaje kvadratkov in jih shrani v tabelo kvadratkov. Velikost kvadratkov izračunamo že prej glede na velikost igralnega polja. Vsakemu kvadratku v tabeli z barvami vzporedno določimo tudi barvo. Levemu spodnjemu in desnemu zgornjemu kvadratku pa nastavimo barvi igralcev. Ker začenjamo z novo igro, skrijemo napis za konec igre.

(igra2.jpg)

Ob zagonu se osveži tudi igralno polje, kamor izrišemo vse kvadratke in jih pobarvamo s prej določenimi barvami.

(igra3.jpg)

Razlaga rešitve

Ko shranjujemo pozicije kvadratkov v tabelo kvadratkov, začnemo pri levem zgornjem kvadratku, ki ima velikost stranice 25. Nadaljujemo z njegovim desnim sosedom, ki je za 25 enot premaknjen v desno. Ko pridemo do konca prve vrste, nadaljujemo v drugi in vse do konca.

(igra4.jpg)

Barve kvadratkov pa določimo tako, da potujemo po tabeli barv. Pri vsakem indeksu s pomočjo generatorja izberemo naključno barvo iz tabele barv, ki jih uporabljamo v tej igri. Če pa pridemo do levega spodnjega ali do desnega zgornjega kvadratka, jima nastavimo barvi igralcev in ju dodamo v tabeli dobljenih kvadratkov.

(igra5.jpg)

Razlaga rešitve

Ko kliknemo na enega izmed gumbov z barvo, določimo to barvo za izbrano in glede na izbrano barvo prebarvamo sosednje kvadratke.

Potem še do konca izvedemo potezo tako, da preverimo, če ima trenutni igralec na voljo še kakšno potezo za nadaljevanje igre. Če nima, preostale kvadratke dodelimo nasprotnemu igralcu. Za primer, če bi igralec imel na voljo še kakšno potezo, zamenjamo igralca in še za nega preverimo, če ima na voljo še kakšno potezo. Če ne bi imel, bi preostale kvadratke dodelili nasprotniku. Na koncu še osvežimo vse podatke in končamo igro, če je to potrebno.

Po potezi igralca preverimo, če igramo proti računalniku. V tem primeru pokličemo funkcijo, ki izvede računalnikovo potezo.

(igra6.jpg)

Razlaga rešitve

Ko želimo prebarvati kvadratke, ki jih zavzemamo, naprej preverimo, če je na potezi prvi igralec. Če je na potezi drugi igralec, je ves postopek enak, le da obdelujemo seznam kvadratkov drugega igralca in za prebarvanje kvadratkov uporabljamo drugo barvo.

Potem pregledamo vse kvadratke, ki jih igralec že ima. Vsakemu kvadratku poiščemo njegove sosede. Če sosed ne obstaja, mu nastavimo negativno pozicijo v tabeli kvadratkov.

(igra7.jpg)

Nato za vsakega soseda preverimo, če obstaja in če je take barve, ki jo želimo zavzeti. V tem primeru kvadratku zamenjamo barvo v igralčevo in ga dodamo v seznam igralčevih kvadratkov, da bomo lahko tudi zanj preverili, če ima še kakšnega soseda, ki ga želimo zavzeti in ga še nismo.

(igra8.jpg)

Razlaga rešitve

Po prebarvanju izvedemo še preostali del poteze. Povečamo število potez in preštejemo, koliko kvadratkov posamezne barve si trenutni igralec lahko prisvoji v naslednji potezi. Če je vsota vseh kvadratkov 0, to pomeni, da nima smisla nadaljevati z igro. Če je na potezi igralec 1, pregledamo vse kvadratke in preostale dodelimo igralcu 2. Če pa je na potezi igralec 2, naredimo ravno obratno.

(igra9.jpg)

Potem zamenjamo igralca za naslednjo potezo. Še za tega igralca preverimo, če ima na voljo še kakšno potezo in če nima, preostale kvadratke dodelimo nasprotniku. Spet je potrebno ločiti, če ima naslednjo potezo igralec 1 ali igralec 2.

(igra10.jpg)

Na koncu še osvežimo napisa s števili kvadratkov in ponovno izrišemo vse kvadratke, saj smo nekaterim spremenili barvo. Če sta igralca zasegla že vse kvadratke, prikažemo napis za konec igre in onemogočimo gumbe, ki nam omogočajo igro.

(igra11.jpg)

Razlaga rešitve

Koliko kvadratkov lahko pridobimo pri posamezni barvi preverimo tako, da najprej preverimo, kateri igralec je na potezi (za oba igralca je postopek enak). Potem za vsako barvo naredimo kopijo seznama zavzetih kvadratkov trenutnega igralca. Nato pa tako, kot pri prebarvanju kvadratkov, za vsak kvadratek iz kopije poiščemo sosede.

(igra12.jpg)

Če sosed ne obstaja, mu dodelimo negativen indeks pozicije v tabeli kvadratkov. Potem za vsakega soseda preverimo, če obstaja, če je take barve, ki jo pregledujemo in če kvadratka še ni v kopiji seznama. V tem primeru ga dodamo v kopijo seznama.

Ko pregledamo vse kvadratke iz kopije seznama, pa preštejemo, koliko kvadratkov smo dodali v kopijo in to število shranimo v tabelo z vrednostmi, koliko kvadratkov pridobimo pri posamezni barvi.

(igra13.jpg)

Razlaga rešitve

Če je na potezi računalnik, pokličemo funkcijo, v kateri najprej ustavimo delovanje za eno sekundo. Potem pokličemo funkcijo, ki prešteje, koliko kvadratkov bi pridobili pri posamezni barvi. Izberemo tisto barvo, s katero dobimo največ kvadratkov. Glede na to barvo potem prebarvamo ustrezne kvadratke in dokončamo s potezo z še prej opisanima funkcijama.

(igra14.jpg)

Razlaga rešitve

Če želimo začeti novo igro brez računalnika, nastavimo, da igramo brez računalnika in izpišemo, da je nasprotnik igralec 2. Pokličemo še funkcijo, ki ponastavi vse lastnosti za novo igro.

(igra15.jpg)

Če začnemo igro z računalnikom, je vse enako, kot če bi igrali brez računalnika. Samo nastavimo, da igramo z računalnikom in izpišemo, da igramo proti računalniku. Pokličemo funkcijo, ki ponastavi lastnosti za novo igro. Če igramo proti računalniku, igro vedno začnemo mi.

(igra16.jpg)

V funkciji, ki ponastavi lastnosti za novo igro, izpraznemo seznama igralčevih pridobljenih kvadratkov in kvadratkom določimo nove barve. Števce nastavimo na začetne vrednosti, skrijemo napis za konec igre in omogočimo vse gumbe za igranje igre. Na koncu še izrišemo na novo pobarvane kvadratke.

(igra17.jpg)

Primer igre

0%
0%