Zadatak Oblak

Da li možete da mi ispravite program,ja sam uspela da nacrtam 1 oblak ,a u zadatku treba vise oblaka.

import pygame as pg
import pygamebg

(sirina, visina) = (400, 400) # otvaramo prozor
prozor = pygamebg.open_window(sirina, visina, “Облаци”)

bojimo pozadinu u plavo

prozor.fill(pg.Color(“skyblue”))

crtamo sunce

pg.draw.circle(prozor, pg.Color(“yellow”), (100, 100), 80)

procedura koja crta oblak na datoj poziciji, date velicine u datoj

nijansi sive boje

def oblak(x, y, r, siva):
# nijansa sive boje
boja = [192,192,192]
# crtamo oblak od tri kruga
# centralni veliki krug oblaka
pg.draw.circle(prozor,pg.Color(“grey”),(200,200),80)
# poluprecnik levog i desnog, manjeg kruga oblaka
r_malo = round(5 * r / 8)
# levi manji krug oblaka
pg.draw.circle(prozor,pg.Color(“grey”), (120,200),50)
# desni manji krug oblaka
pg.draw.circle(prozor,pg.Color (“grey”),(280,200),50)

crtamo nekoliko oblika razlicite velicine i nijanse

oblak(240, 200, 40, 180)
oblak(270, 250, 50, 210)
oblak(230, 100, 50, 230)
oblak(80, 80, 30, 150)
oblak(110, 320, 60, 255)

prikazujemo prozor i čekamo da ga korisnik isključi

pygamebg.wait_loop()

Link ka zadatku ili odgovarajućoj stranici:

https://petlja.org/biblioteka/r/lekcije/pygame-prirucnik/crtanje-cas5

Zadatak se zove oblak

Zdravo,

Neću ti ispraviti ceo kod odmah, voleo bih da probaš prvo sama da ga ispraviš. Narvno, pomoći ću ti oko toga.

Ti su napravila funkciju oblak koja uvek crta taj jedan oblak. To se dešava zato što si u samoj funkciji navela konkretne vrednosti, na primer, centar oblaka ti je uvek 200, 200 i kako god da pozoveš posle funkcju, ona će uvek da crta isti taj oblak. Čak i kad bi u pozivu funkcije stavila besmislene brojeve, recimo (1,1,1,1) on će opet da nacrta taj isti oblak.

Fora je u tome da u samoj funkciji (sve ovo ispod def do crtamo nekoliko oblaka) upotrebiš opšte vrednosti (koje koristiš i u redu u kome definišeš funkciju, ovo x, y, r, siva) i da se onda pri pozivu funkcije (ovih pet oblaka ispod), za svaki od njih odrede konkretne vrednosti. To znači da u definisanju funkcije ne bude konkretnih brojeva, nego da koristiš opšte vrednosti, x, y, r, siva, boja, r_malo i slično. Daću ti primer kako treba da izgleda centralni veliki krug oblaka, a kako levi manji krug (u samom kodu treba baš ovako da piše):

pg.draw.circle(prozor, boja, (x, y), r)
pg.draw.circle(prozor,boja,(x-r, y), r_malo)

Boja, x, y, r, siva, r_malo će svi dobiti konkretne vrednosti kada se bude pozvala funkcija (ovih pet oblaka dole). Pri svakom pozivanju, funkciji se proslede druge vrednosti ako ovako definišeš funkciju i zbog toga se crtaju drugi oblaci. Svaki put kad pozoveš funkciju oblak i napišeš mu neke brojeve, x, y, r i siva, funkcija će da upotrebi vrednosti tih brojeva i da iscrta novi oblak. Zato je važno da u funkciji ne bude tačno odrećen broj, nego da bude opšta vrednost, pa da ona prilikom poziva dobije konkretnu vrednost.

Upotrebi ovo što sam napisao za centralni krug i mali levi krug, pa sama ispravi šta još treba u telu funkcije. Obrati pažnju da oblaci treba da ti budu različite boje. Uradi još neki zadatak ispod da isprobaš ovo sa relativnim vrednostima.

Ako budeš imala problema, samo piši ovde i rado ću ti pomoći.

Da li je sad dobro?
import pygame as pg
import pygamebg

(sirina, visina) = (400, 400) # otvaramo prozor
prozor = pygamebg.open_window(sirina, visina, “Облаци”)

bojimo pozadinu u plavo

prozor.fill(pg.Color(“skyblue”))

crtamo sunce

pg.draw.circle(prozor, pg.Color(“yellow”), (100, 100), 80)

procedura koja crta oblak na datoj poziciji, date velicine u datoj

nijansi sive boje

def oblak(x, y, r, siva):
# nijansa sive boje
boja = [192,192,192]
# crtamo oblak od tri kruga
# centralni veliki krug oblaka
pg.draw.circle(prozor, boja, (x, y), r)
# poluprecnik levog i desnog, manjeg kruga oblaka
r_malo = round(5 * r / 8)
# levi manji krug oblaka
pg.draw.circle(prozor,boja,(x-r, y), r_malo)
# desni manji krug oblaka
pg.draw.circle(prozor,boja,(x+r, y), r_malo)

crtamo nekoliko oblika razlicite velicine i nijanse

oblak(240, 200, 40, 180)
oblak(270, 250, 50, 210)
oblak(230, 100, 50, 230)
oblak(80, 80, 30, 150)
oblak(110, 320, 60, 255)

prikazujemo prozor i čekamo da ga korisnik isključi

pygamebg.wait_loop()

Sada dobro crtaš oblake, ali će ti svi oblaci uvek biti iste boje. Hajde razmisli kako treba da promeniš liniju u kojoj definišeš promenljivu boja, tako da pri svakom pozivanju funkcije dobije drugačiju nijansu sive.