Imam problem sa vezbon na casu 12. Vezba Avion

import pygame as pg
import pygamebg

(sirina, visina) = (800, 400) # otvaramo prozor
prozor = pygamebg.open_window(sirina, visina, “Авион”)

sunce_slika = pg.image.load(“sunce.png”) # slika sunca
avion_slika =pg.image.load(“avion.png”) # slika aviona
avion_visina = avion_slika.get_height() # visina slike aviona

(avion_x, avion_y) = (0, visina - avion_slika.get_height()) # položaj aviona
avion_dy = -1 # vertikalna brzina - avion se prvo diže

def crtaj():
prozor.fill(pg.Color(“skyblue”)) # bojimo pozadinu u nebo-plavu boju
prozor.blit(avion_slika, (avion_x, avion_y)) # crtamo avion
prozor.blit(sunce_slika, (0, 0)) # crtamo sunce

def novi_frejm():
global avion_x, avion_y, avion_dy # menjamo položaj i smer kretanja aviona
avion_x += 2 # pomeramo avion na desno
avion_y += -2 # menjamo mu visinu
if avion_y > visina: # ako je dodirnuo vrh ekrana
avion_dy = -1 # menjamo mu smer tako da počne da se spušta
if avion_y > visina: # ako je dodirnuo dno ekrana
avion_dy = 0 # prestaje da menja visinu
crtaj()

pygamebg.frame_loop(50, novi_frejm)

ovo sam napravio ali kad ga pustim on nece da se vraca ka dole nego samo izadje sa ekrana

Zdravo zdravo,

Na dobrom si putu.

Razmisli o uslovima koje dodaješ avionu i šta se dešava sa vrednostima brzine kada su ti uslovi postignuti.

Prvo ako se avion kreće na gore, njegova y vrednost se smanjuje. Ako staviš uslov
if avion_y > visina:
razmisli koje su vrednosti ovih varijabli. Dakle avion_y će imati vrednost koju si mu zadao na početku (visina-visina slike) i u svakom sledećem frejmu će da mu vrednost bude manja za 2 (ovako kako si ga napisao) . Vrednost varijable visina je 400 (definisano gore u četvrtoj liniji koda). Avion će da polako ide do nule (gornja ivica ekrana je y = 0) i onda, kada ta vrednost postane manja od 0, avion će da ti pobegne gore.

Razmisli onda i šta je potrebno da se spreči da avion izađe sa ekrana kada krene da ide na dole. Koje vrednosti treba da budu manje/veće/jednake čemu da ti avion ne bi pobegao dole?

Na kraju, još jedan problem koji imaš je način na koji unutar funkcije menjaš visinu aviona. Razmisli o tome da li možeš da konstantno menjaš visinu aviona za -2? Ovako kako si ga napisao, čak i da si dobro definisao sudar sa ivicama, avion bi i dalje išao na gore zato što konstantno menjaš položaj za -2.

Posmatraj funkciju novi frejm kao jednu petlju u kojoj se sa svakim prolaskom kroz petlju iscrtava novo stanje stvari na ekranu. Generalni savet koji bih ti dao je da razmisliš šta će se sa kojom od varijabli koje koristiš desiti u svakom sledećem koraku (frejmu). Dakle, ako avion_y menjaš za -2, a postaviš uslov da promeniš avion_dy kada udariš u gornju ivicu, šta se dešava sa avion_y kada se taj uslov ispuni? Da li treba da se menja za -2 ili za neku drugu vrednost/varijablu koju si definisao u kodu?

Ako se i dalje budeš mučio, slobodno piši, rado ću dodatno pomoći.