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.

Учење слепог куцања

Испрограмирај игрицу која ти помаже да увежбаш слепо куцање. Са врха екрана падају балони са словима. Када се притисне тастер са словом које је написано на балону, тај балон нестаје. Играч креће од три живота и губи живот сваки пут када балон падне на дно екрана.

Можеш употребити слику balon.png.

../_images/balon.png

У првој верзији можеш проверити колико брзо куцаш.

 
1
import random
2
import pygame as pg
3
import pygamebg
4
5
(sirina, visina) = (800, 600)
6
prozor = pygamebg.open_window(sirina, visina, "Провери колико брзо куцаш")
7
8
# funkcija ispisuje dati tekst, date veličine tako da mu je gornje levo teme na datoj poziciji
9
def tekst_levo(x, y, tekst, velicina):
10
    font = pg.font.SysFont("Arial", velicina) # font kojim će biti prikazan broj poena
11
    tekst = font.render(tekst, True, pg.Color("black"))
12
    prozor.blit(tekst, (x, y))
13
14
# funkcija ispisuje dati tekst, date veličine tako da mu je centar na datoj poziciji
15
def tekst_centar(x, y, tekst, velicina):
16
    font = pg.font.SysFont("Arial", velicina)
17
    tekst = font.render(tekst, True, pg.Color("black"))
18
    (sirina_teksta, visina_teksta) = (tekst.get_width(), tekst.get_height())
19
    (x, y) = (x - sirina_teksta / 2, y - visina_teksta / 2)
20
    prozor.blit(tekst, (x, y))
21
22
23
balon = pg.image.load("balon.png")             # učitavamo sliku balona
24
zivot  = pg.transform.scale(balon, (36, 50))   # sličica života je umanjena slika balona
25
26
MAKS_BALONA = 3  # maksimalni broj slova koje mogu biti istovremeno na ekranu
27
baloni = []      # baloni koji su trenutno na ekranu (trojke koje čine x koordinata, y koordinata i slovo)
28
poeni = 0        # trenutni broj poena
29
zivoti = 3       # trenutni broj života
30
31
# dodajemo balon na vrh ekrana, ako su za to ispunjeni uslovi
32
def dodaj_balone():
33
    # ako trenutno ne pada ni jedno slovo tada obavezno dodajemo novo slovo
34
    # ako pada manje od MAKS_SLOVA tada bacamo kockicu tako da očekujemo da
35
    # se slovo doda u 1% slučajeva
36
    if len(baloni) == 0 or (len(baloni) < MAKS_BALONA and random.randint(1, 100) == 1):
37
        x = random.randint(0, sirina - balon.get_width())  # nasumično biramo x koordinatu gornjeg levog ugla balona, tako da balon bude unutar prozora
38
        y = 25                                             # ostavljamo prostor za statusnu liniju na vrhu (u njoj se prikazuju poeni i životi)
39
        slovo = chr(ord('A') + random.randint(0, 25))      # nasumično biramo slovo abecede
40
        # raspoloziva_slova = ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L']
41
        # slovo = raspoloziva_slova[random.randint(0, len(raspoloziva_slova) - 1)]
42
        baloni.append([x, y, slovo])                      # dodajemo balon u listu
43
44
# sva slova pomeramo naniže i uklanjamo ona koja su pala na zemlju
45
def pomeri_balone():
46
    global baloni, zivoti
47
48
    brzina = 0.5 * (poeni // 10 + 1)           # na svakih 10 poena povećava se brzina
49
    for balon in baloni:                       # svim balonima u listi
50
        balon[1] += brzina                     #    povećavamo y koordinatu
51
        
52
    preostali_baloni = []                      # u listu preostali_baloni prepisujemo sve balone koji nisu ispali sa ekrana
53
    for balon in baloni:
54
        if balon[1] > visina:                  # ako je balon ispao sa ekrana
55
            zivoti -= 1                        #   smanujemo broj života
56
        else:                                  # u suprotnom
57
            preostali_baloni.append(balon)     #    ubacujemo ga u listu preostalih balona
58
    baloni = preostali_baloni                  # nastavljamo da radimo samo sa preostalim balonima
59
60
# prikazujemo sadržaj prozora
61
def crtaj():
62
    prozor.fill(pg.Color("white"))
63
    if zivoti > 0:   # ako igra nije završena
64
        # prikazujemo broj poena
65
        tekst_levo(5, 5, "Поени: " + str(poeni), 20)
66
        # prikazujemo preostale živote (iscrtavanjem umanjenih sličica balona)
67
        for i in range(1, zivoti + 1):
68
            prozor.blit(zivot, (sirina - 5 - i*zivot.get_width(), 5))
69
        # prikazujemo sve balone
70
        for [x, y, slovo] in baloni:
71
            prozor.blit(balon, (x, y))                                              # prikazujemo sliku balona
72
            (cx, cy) = (x + balon.get_width() / 2, y + 2 * balon.get_height() / 5)  # određujemo centar teksta
73
            tekst_centar(cx, cy, slovo, 40)                                         # prikazujemo tekst
74
    else:            # ako igra jeste završena
75
        tekst_centar(sirina // 2, visina // 2, "КРАЈ! БРОЈ ПОЕНА: " + str(poeni), 60)  # prikazujemo rezultat
76
        
77
def obradi_dogadjaj(dogadjaj):
78
    global baloni, poeni, zivoti
79
    if dogadjaj.type == pg.KEYDOWN:                                          # pritisnut je taster
80
        if pg.K_a <= dogadjaj.key and dogadjaj.key <= pg.K_z:                #   na tasteru je neko slovo abecede
81
            pritisnuto_slovo = chr(ord('A') + (dogadjaj.key - pg.K_a))       #     određujemo koje je slovo u pitanju
82
            preostali_baloni = [[x, y, slovo] for [x, y, slovo] in baloni
83
                                              if slovo != pritisnuto_slovo]  #     preostali su oni baloni koji ne sadrže pritisnuto slovo
84
            poeni += len(baloni) - len(preostali_baloni)                     #     uvećavamo broj poena za broj izbačenih slova
85
            baloni = preostali_baloni                                        #     nastavljamo da radimo samo sa preostalim balonima
86
    elif dogadjaj.type == pg.MOUSEBUTTONDOWN:                                # kliknuto je dugme miša
87
        if zivoti <= 0:                                                      #   ako je igra završena
88
            zivoti = 3                                                       #     započinjemo novu
89
            baloni = []
90
            poeni = 0
91
    
92
def novi_frejm():
93
    dodaj_balone()    # dodajemo balone ako su za to ispunjeni uslovi
94
    pomeri_balone()   # pomeramo balone
95
    crtaj()
96
    
97
98
pygamebg.frame_loop(50, novi_frejm, obradi_dogadjaj)
99

(kucanje)

Наредна верзија ти помаже да постепено увежбаш куцање, јер се полако уводи један по један тастер.

78
 
1
import random
2
import pygame as pg
3
import pygamebg
4
5
(sirina, visina) = (600, 400)
6
prozor = pygamebg.open_window(sirina, visina, "Куцање - пуцање")
7
8
def ispisi(poruka, x, y):
9
    font = pg.font.SysFont("Arial", 32)        # font kojim će biti prikazan tekst
10
    sl = font.render(poruka, True, pg.Color("green")) # gradimo sličicu sa tekstom
11
    prozor.blit(sl, (x, y)) # prikazujemo sličicu na odgovarajućem mestu na ekranu
12
13
def crtanje():
14
    prozor.fill(pg.Color("black"))    # bojimo prozor u crno
15
    if not igra_zavrsena:
16
        # ako igra jos traje, ispisi slova koja padaju i broj poena
17
        for slovo, x, y in slova_koja_padaju:
18
            ispisi(slovo, x, y)
19
        ispisi('poeni: ' + str(poeni), 0, visina - 40)
20
    else:
21
        # u protivnom ispisi poruku za kraj
22
        ispisi('Kraj igre', 100, 100)
23
        ispisi('Osvojili ste ' + str(poeni) + ' poena', 100, 200)
24
25
def novi_frejm():
26
    global slova_koja_padaju, vreme_do_slova, sledece_x
27
    global prvo_slovo_za_biranje, slova_od_kojih_se_bira, igra_zavrsena
28
    # pomeri sva padajuca slova dva piksela nize, proveri da li se jos igra
29
    nova_slova = []
30
    for slovo, x, y in slova_koja_padaju:
31
        if y < visina - 40:
32
            nova_slova.append((slovo, x, y + 2))
33
        else:
34
            # ako je neko slovo stglo do dna prozora, to je kraj igre
35
            igra_zavrsena = True
36
37
    # azuriraj spisak slova koja padaju
38
    vreme_do_slova -= 1
39
    if vreme_do_slova <= 0: # ako treba dodati jos jedno slovo koje pada...
40
        vreme_do_slova = 20
41
        sledece_x += 20
42
        if sledece_x >= sirina:
43
            # red na prozoru je popunjen, azuriraj slova koja igraju
44
            sledece_x -= sirina
45
            if prvo_slovo_za_biranje + BROJ_SLOVA_ZA_BIRANJE < len(slova):
46
                prvo_slovo_za_biranje += 1
47
                slova_od_kojih_se_bira = slova[prvo_slovo_za_biranje : prvo_slovo_za_biranje + BROJ_SLOVA_ZA_BIRANJE]
48
        # dodaj jos jedno slovo koje pada
49
        slovo = random.choice(slova_od_kojih_se_bira)
50
        nova_slova.append((slovo, sledece_x, 0))
51
52
    slova_koja_padaju = nova_slova
53
    crtanje()
54
55
def obradi_dogadjaj(dogadjaj):
56
    global slova_koja_padaju, poeni
57
    if dogadjaj.type == pg.KEYDOWN: # pritisak tastera na tastaturi
58
        otkucano_slovo = dogadjaj.unicode.upper()
59
        if len(slova_koja_padaju) > 0: # ako ima slova koja padaju
60
            slovo, x, y = slova_koja_padaju[0] # najnize slovo koje pada
61
            if otkucano_slovo == slovo:
62
                del slova_koja_padaju[0]
63
                poeni += 10 # nagrada za otkucano najnize slovo
64
            else:
65
                poeni -= 4  # kazna za pogresno slovo
66
67
slova = 'ASDFJKL;EIRUTYGHWOQPC,VMBNXZ.-'
68
BROJ_SLOVA_ZA_BIRANJE = 4
69
prvo_slovo_za_biranje = 0
70
slova_od_kojih_se_bira = slova[prvo_slovo_za_biranje : prvo_slovo_za_biranje + BROJ_SLOVA_ZA_BIRANJE]
71
slova_koja_padaju = []
72
vreme_do_slova = 0
73
sledece_x = 0
74
poeni = 0
75
igra_zavrsena = False
76
77
pygamebg.frame_loop(30, novi_frejm, obradi_dogadjaj)
78

(kucanje_vezba)