You are on page 1of 3

10.

Zadaci - Mine

Igra Mine je igra za jednog igrača. Cilj igre je očistiti minsko polje bez detonacije mine.

Igraču se inicijalno prikaže polje s neotkrivenim kvadratima. Neki slučajno odabrani kvadrati sakrivaju mine. Veličina
bolja i broj mina se može birati od strane igrača i na taj način se određuje nivo težine.

Igra se igra otkrivanjem kvadrata minskog polja i označavanjem neotkrivenih kvadrata. Ako je kvadrat koji sadrži minu
otkriven, onda igrač gubi igru. Ako je otkriven kvadrat koji ne sadži minu, onda se pokaže broj koji ukazuje na broj
mina u susjednim kvadratima. Ako nema susjednih mina, onda je otkriveni kvadrat prazan. Igrač koristi ove informacije
kako bi zaključio o položaju kvadrata s minama i na taj način otkrio kvadrate bez mina ili označio kvadrat s minom.
Igrač je pobjedio ako je označio sve kvadrate s minama.

Ograničenja
Igrač na početku igre Mina može birati jedan od tri nivoa težine. Svaki nivo težine opisuje veličinu polja i broj mina. Prvi
nivo će biti veličine 9x9 kvadrata i imat će 8 mina. Drugi nivo će biti veličine 15x15 kvadrata i imat će 14 mina, dok je
treći nivo veličine 20x20 i ima 18 mina.

Kada igrač odabere nivo težine, generira se polje odabrane težine sa skrivenim minama. Mine se smještaju u polje
slučajnim odabirom, a zatim se svaki kvadrat koji ne sadrži minu označi brojem susjednih mina.

Nakon generiranja polja igrač igra poteze kod kojih otkriva ili označava kvadrate.

Igranje završava ako igrač otkrije kvadrat s minom (čime gubi igru) ili označi sve kvadrate s minama (time postaje
pobjednik).

Ako igrač igranjem poteza otkrije kvadrat koji nema susjednih mina, onda se automatski otkriju svi susjedni kvadrati
koji nemaju susjednih mina.

Zadatak 10.1 - PrikazIgre: model


U modelu mine.uml stvori klasu PrikazIgre stereotipa view.
U klasi PrikazIgre dodaj javnu metodu izaberiTezinu() koja će primiti parametar tezine
U klasi PrikazIgre dodaj javnu metodu prikaziPolje() koja će primiti parametar polje
U klasi PrikazIgre dodaj javnu metodu unesiAkciju() koja će primiti parametar velicina

Zadatak 10.2 - PrikazIgre: implementacija


Napravi klasu PrikazIgre i implementiraj metodu izaberiTezinu() koja će primati listu tezina.
Elementi liste tezine su uređeni parovi (velicina, broj_mina) koji opisuju velicinu polja i broj mina u polju. Na
primjer, lista težina [(9,8), (15,14), (20,18)] ima za prvu težinu (9, 8) koja će nam kasnije služiti za
generiranje polja od 9x9 kvadrata s 8 mina.
Temeljem ovog primjera liste težina, korisniku će se ispisati poruka

Izaberi tezinu
1. velicina 9, broj mina 8
2. velicina 15, broj mina 14
3. velicina 20, broj mina 18
>>>

Ova poruka je parametar input() funkcije. Sada korisnik može unijeti broj 1, 2, ili 3 i ako unese nešto drugo,
onda će se opet ispisati ista poruka. U slučaju da unese 1, 2 ili 3, onda će metoda vratiti 1, 2 ili 3

print('*** test 1 ***')


pi = PrikazIgre()

1 of 3
10. Zadaci - Mine

print(pi.izborTezine([(9,8), (15,14), (20,18), (30,30)]))

*** test 1 ***


Izaberi tezinu
1. velicina 9, broj mina 8
2. velicina 15, broj mina 14
3. velicina 20, broj mina 18
4. velicina 30, broj mina 30
>>>xx
Izaberi tezinu
1. velicina 9, broj mina 8
2. velicina 15, broj mina 14
3. velicina 20, broj mina 18
4. velicina 30, broj mina 30
>>>5
Izaberi tezinu
1. velicina 9, broj mina 8
2. velicina 15, broj mina 14
3. velicina 20, broj mina 18
4. velicina 30, broj mina 30
>>>4
4

Zadatak 10.3 - PrikazIgre: implementacija


U klasi PrikazIgre implementiraj metodu prikaziPolje koja će jednostavno ispisati instancu klase Polje
(koja u sebi od prije ima implementiranu specijalnu metodu __str__()).

print('*** test 2 ***')


p = Polje(5,2)
pi = PrikazIgre()
pi.prikaziPolje(p)

*** test 2 ***


1 2 3 4 5
-----------
1| . . . . . |
2| . . . . . |
3| . . . . . |
4| . . . . . |
5| . . . . . |
-----------

Zadatak 10.4 - PrikazIgre: implementacija


U klasi PrikazIgre implementiraj metodu unesiAkciju() koja će primiti parametar velicina. Korisnik
može unijeti akciju označavanja ili otkrivanja, a također unosi koordinate kvadrata kojeg označava ili otkriva. Na
primjer, ako korisnik unese '2,3' ili '2 3' onda je to akcija otkrivanja kvadrata na koordinatama (2,3). Ako
korisnik unese '?2,3', '? 2,3' ili '? 2 3' onda je to akcija označavanja kvadrata na koordinatama (2,3).
Ova metoda će vraćati uređenu trojku oblika (tip akcije, x, y) gdje tip akcije može biti 'otkrij' ili 'oznaci',
a x i y su koordinate kvadrata koji se otkriva ili označava. Pri tome, za x i y mora vrijediti da su veće od 0 i
manje ili jednake prenesenom parametru velicina.
Jedini parametar input() funkcije je string '>>>'. input() će se ponavljati sve dok korisnik ne unese na
pravilan način akciju s koordinatama koje su veće od 0 i manje ili jednake veličini.

print('*** test 3 ***')

2 of 3
10. Zadaci - Mine

pi = PrikazIgre()
print(pi.unesiAkciju(9))
print(pi.unesiAkciju(3))

*** test 3 ***


>>>4
>>>4,10
>>>p2,3
>>>? 4,5
('oznaci', 4, 5)
>>>? 4,5
>>>3 5
>>>3 2
('otkrij', 3, 2)

3 of 3

You might also like