Кртице¶
Напиши програм који имплементира игрицу хватања кртица. На пољу постоји 9 кртица, оне насумично излазе из рупе и задржавају се на површини или у рупи насумично одређено време. Када играш кликне мишем на кртицу док је ван рупе, она се сматра ухваћеном (и више се не спушта). Циљ игре је да се ухвате све кртице.
Анимацију можеш реализовати помоћу следећих слика кртице (именоване
као krtica1.png
, …, krtica10.png
).










1
import random
2
import pygame as pg
3
import pygamebg
4
5
(sirina, visina) = (600, 600) # otvaramo prozor
6
prozor = pygamebg.open_window(sirina, visina, "Кртице")
7
8
pg.key.set_repeat(10, 10) # podešavamo dogadjaje tastature
9
10
11
krtice = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
12
pogodjena = [[False, False, False], [False, False, False], [False, False, False]]
13
14
# učitavamo u listu slike setanje1.png, setanje2.png, ..., setanje5.png
15
slike_krtica = [] # niz u koji dodajemo slike
16
for i in range(1, 11):
17
naziv_slike = "krtica" + str(i) + ".png" # gradimo naziv slike od delova
18
slika = pg.image.load(naziv_slike)
19
slike_krtica.append(slika)
20
21
def gornji_levi_ugao_slike_krtice(i, j):
22
x = j * (sirina / 3)
23
y = (i + 1) * (visina / 3) - slike_krtica[abs(krtice[i][j])].get_height()
24
return (x, y)
25
26
def broj_vidljivih_nepogodjenih():
27
broj = 0
28
for i in range(len(krtice)):
29
for j in range(len(krtice[i])):
30
if krtice[i][j] != 0 and not pogodjena[i][j]:
31
broj += 1
32
return broj
33
34
def broj_nepogodjenih():
35
broj = 0
36
for i in range(len(krtice)):
37
for j in range(len(krtice[i])):
38
if not pogodjena[i][j]:
39
broj += 1
40
return broj
41
42
def tekst_centar(x, y, tekst, velicina):
43
font = pg.font.SysFont("Arial", velicina)
44
tekst = font.render(tekst, True, pg.Color("black"))
45
(sirina_teksta, visina_teksta) = (tekst.get_width(), tekst.get_height())
46
(x, y) = (x - sirina_teksta / 2, y - visina_teksta / 2)
47
prozor.blit(tekst, (x, y))
48
49
def crtaj():
50
prozor.fill(pg.Color("white")) # bojimo pozadinu prozora u belo
51
if broj_nepogodjenih() == 0:
52
tekst_centar(sirina / 2, visina / 2, "Браво", 100)
53
else:
54
for i in range(len(krtice)):
55
for j in range(len(krtice[i])):
56
(x, y) = gornji_levi_ugao_slike_krtice(i, j)
57
prozor.blit(slike_krtica[abs(krtice[i][j])], (x, y))
58
59
def novi_frejm():
60
if broj_vidljivih_nepogodjenih() == 0:
61
verovatnoca = 20
62
else:
63
verovatnoca = 100
64
for i in range(len(krtice)):
65
for j in range(len(krtice[i])):
66
if krtice[i][j] == 0:
67
if random.randint(1, verovatnoca) == 1:
68
krtice[i][j] = 1
69
elif krtice[i][j] == 9 and not pogodjena[i][j]:
70
if random.randint(1, 20) == 1:
71
krtice[i][j] = -9
72
elif krtice[i][j] < 9:
73
krtice[i][j] += 1
74
elif krtice[i][j] < 0 and not pogodjena[i][j]:
75
krtice[i][j] += 1
76
crtaj()
77
78
79
def obradi_dogadjaj(dogadjaj):
80
global pogodak
81
if dogadjaj.type == pg.MOUSEBUTTONDOWN:
82
for i in range(len(krtice)):
83
for j in range(len(krtice[i])):
84
if abs(krtice[i][j]) >= 5:
85
(x, y) = gornji_levi_ugao_slike_krtice(i, j)
86
(xm, ym) = dogadjaj.pos
87
if (x <= xm and xm <= x + slike_krtica[abs(krtice[i][j])].get_width() and
88
y <= ym and ym <= y + slike_krtica[0].get_height()):
89
pogodjena[i][j] = True
90
91
92
pygamebg.frame_loop(10, novi_frejm, obradi_dogadjaj)
93
(krtice)