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










import random
import pygame as pg
import pygamebg
(sirina, visina) = (600, 600) # otvaramo prozor
prozor = pygamebg.open_window(sirina, visina, "Кртице")
pg.key.set_repeat(10, 10) # podešavamo dogadjaje tastature
krtice = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
pogodjena = [[False, False, False], [False, False, False], [False, False, False]]
# učitavamo u listu slike setanje1.png, setanje2.png, ..., setanje5.png
slike_krtica = [] # niz u koji dodajemo slike
for i in range(1, 11):
naziv_slike = "krtica" + str(i) + ".png" # gradimo naziv slike od delova
slika = pg.image.load(naziv_slike)
slike_krtica.append(slika)
def gornji_levi_ugao_slike_krtice(i, j):
x = j * (sirina / 3)
y = (i + 1) * (visina / 3) - slike_krtica[abs(krtice[i][j])].get_height()
return (x, y)
def broj_vidljivih_nepogodjenih():
broj = 0
for i in range(len(krtice)):
for j in range(len(krtice[i])):
if krtice[i][j] != 0 and not pogodjena[i][j]:
broj += 1
return broj
def broj_nepogodjenih():
broj = 0
for i in range(len(krtice)):
for j in range(len(krtice[i])):
if not pogodjena[i][j]:
broj += 1
return broj
def tekst_centar(x, y, tekst, velicina):
font = pg.font.SysFont("Arial", velicina)
tekst = font.render(tekst, True, pg.Color("black"))
(sirina_teksta, visina_teksta) = (tekst.get_width(), tekst.get_height())
(x, y) = (x - sirina_teksta / 2, y - visina_teksta / 2)
prozor.blit(tekst, (x, y))
def crtaj():
prozor.fill(pg.Color("white")) # bojimo pozadinu prozora u belo
if broj_nepogodjenih() == 0:
tekst_centar(sirina / 2, visina / 2, "Браво", 100)
else:
for i in range(len(krtice)):
for j in range(len(krtice[i])):
(x, y) = gornji_levi_ugao_slike_krtice(i, j)
prozor.blit(slike_krtica[abs(krtice[i][j])], (x, y))
def novi_frejm():
if broj_vidljivih_nepogodjenih() == 0:
verovatnoca = 20
else:
verovatnoca = 100
for i in range(len(krtice)):
for j in range(len(krtice[i])):
if krtice[i][j] == 0:
if random.randint(1, verovatnoca) == 1:
krtice[i][j] = 1
elif krtice[i][j] == 9 and not pogodjena[i][j]:
if random.randint(1, 20) == 1:
krtice[i][j] = -9
elif krtice[i][j] < 9:
krtice[i][j] += 1
elif krtice[i][j] < 0 and not pogodjena[i][j]:
krtice[i][j] += 1
crtaj()
def obradi_dogadjaj(dogadjaj):
global pogodak
if dogadjaj.type == pg.MOUSEBUTTONDOWN:
for i in range(len(krtice)):
for j in range(len(krtice[i])):
if abs(krtice[i][j]) >= 5:
(x, y) = gornji_levi_ugao_slike_krtice(i, j)
(xm, ym) = dogadjaj.pos
if (x <= xm and xm <= x + slike_krtica[abs(krtice[i][j])].get_width() and
y <= ym and ym <= y + slike_krtica[0].get_height()):
pogodjena[i][j] = True
pygamebg.frame_loop(10, novi_frejm, obradi_dogadjaj)
(krtice)