Processing math: 100%

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

Сакупљање јабука

Испрограмирај игрицу у којој по дну екрана помераш корпу и сакупљаш јабуке које падају. Приказуј број сакупљених јабука. Када нека јабука падне на под, играч губи живот. Када се изгубе три живота, игра се прекида. Животи су приказани помоћу јабукица у горњем десном углу екрана. У игри можеш користити следеће слике (jabuka.png, korpa.png) - не заборави да их прекопираш ако желиш да игрицу покрећеш локално, на свом рачуару.

../_images/jabuka.png ../_images/korpa.png

Чуваћемо координате на којима се налази корпа (на пример, њен горњи леви угао), као и координате свих јабука у једној листи (поново, за сваку јабуку ћемо чувати горњи леви угао). Пошто ћемо у сваком кораку анимације (на пример, 25 пута у секунди) померати јабуке наниже, њихове координате ћемо чувати у двочланим листама (уместо уређених парова). Након сваког померања јабука провераваћемо које од њих су упале у корпу, а које су пале на земљу. Сваку од таквих јабука ћемо избацивати из листе јабука и ажурираћемо број поена тј. број живота. Појављивање јабука које падају ће бити насумично. Обезбедићемо да се у сваком тренутку на екрану налази између једне и три јабуке. Функција за додавање јабука радиће тако што ће ако примети да је корпа празна обавезно додати нову јабуку. Ако корпа није празна и ако у њој има строго мање од три јабуке, онда ће се одлука о томе да ли треба додати нову јабуку доносити насумично - пошто желимо да се нова јабука дода у 1 посто случајева, извлачићемо насумично број од 1 до 100 и ако је једнак 1 додаваћемо нову јабуку.

 
1
import random
2
import pygame as pg
3
import pygamebg
4
5
(sirina, visina) = (500, 300)  # otvaramo prozor
6
prozor = pygamebg.open_window(sirina, visina, "Хватање јабука")
7
8
pg.key.set_repeat(10, 10)  # podešavamo dogadjaje tastature
9
10
11
korpa  = pg.image.load("korpa.png")   # učitavamo sliku korpe
12
jabuka = pg.image.load("jabuka.png")  # učitavamo sliku jabuke
13
zivot  = jabuka   # slicica zivota je slicica jabuke
14
15
MAKS_JABUKE = 3 # maksimalni broj jabuka koje mogu biti istovremeno na ekranu
16
jabuke = []     # koordinate jabuka trenutno na ekranu
17
poeni = 0       # trenutni broj poena
18
zivoti = 3      # trenutni broj zivota
19
(korpa_x, korpa_y) = (0, visina - korpa.get_height()) # koordinate gornjeg levo ugla korpe
20
21
# postavljamo jabuku na vrh ekrana, na nasumično određenu koordinatu x 
22
def dodaj_jabuku():
23
    x = random.randint(0, sirina - jabuka.get_width())
24
    jabuke.append([x, 25])
25
26
# dodajemo jabuke nasumično
27
def dodaj_jabuke():
28
    # ako je korpa prazna obavezno dodajemo novu jabuku ako u korpi
29
    # ima manje od tri jabuke tada bacamo kockicu tako da ocekujemo da
30
    # se jabuka doda u 1% slučajeva
31
    if len(jabuke) == 0 or (len(jabuke) < MAKS_JABUKE and random.randint(1, 100) == 1):
32
        dodaj_jabuku()
33
34
# sve jabuke pomeramo naniže        
35
def pomeri_jabuke():
36
    for jabuka in jabuke:
37
        jabuka[1] += 1
38
39
# kupimo jabuke koje su upale u korpu ili pale na zemlju i ažuriramo
40
# broj poena i života
41
def pokupi_jabuke():
42
    global jabuke, poeni, zivoti
43
    # pošto će se neke jabuke ukloniti iz liste, prepisujemo sadržaj
44
    # liste u novu
45
    nove_jabuke = []
46
    for [x, y] in jabuke:
47
        # jabuka je upala u korpu
48
        if (y > visina - korpa.get_height() and
49
           korpa_x <= x and x <= korpa_x + korpa.get_width()):
50
            poeni += 1
51
        # jabuka je pala na zemlju
52
        elif y > visina:
53
            zivoti -= 1
54
        else:
55
            nove_jabuke.append([x, y])
56
    # preostaju samo one jabuke su koje su prepisane u novu listu
57
    jabuke = nove_jabuke
58
59
# prikazujemo sadržaj prozora
60
def crtaj():
61
    prozor.fill(pg.Color("white"))
62
    # prikazujemo broj poena
63
    font = pg.font.SysFont("Arial", 20) # font kojim će biti prikazan broj poena
64
    tekst = font.render("Поени: " + str(poeni), True, pg.Color("black"))
65
    prozor.blit(tekst, (5, 5))
66
    # prikazujemo preostale zivote
67
    for i in range(1, zivoti + 1):
68
        prozor.blit(zivot, (sirina - 5 - i*zivot.get_width(), 5))
69
    # prikazujemo sve jabuke
70
    for [x, y] in jabuke:
71
        prozor.blit(jabuka, (x, y))
72
    # prikazujemo korpu
73
    prozor.blit(korpa, (korpa_x, korpa_y))
74
75
def obradi_dogadjaj(dogadjaj):
76
    global korpa_x
77
    if dogadjaj.type == pg.KEYDOWN: # tastaturom pomeramo korpu
78
        if dogadjaj.key == pg.K_LEFT:     # strelica na levo
79
            korpa_x -= 10
80
            crtaj()
81
        elif dogadjaj.key == pg.K_RIGHT:  # strelica na desno
82
            korpa_x += 10
83
            crtaj()
84
    
85
def novi_frejm():
86
    global kraj
87
    dodaj_jabuke()
88
    pomeri_jabuke()
89
    pokupi_jabuke()
90
    # proveravamo da li smo izgubili sve živote
91
    if zivoti <= 0:
92
        kraj = True
93
    crtaj()
94
    
95
96
pygamebg.frame_loop(25, novi_frejm, obradi_dogadjaj)
97

(jabuke)