Upozornění: Toto jsou opakovací cvičení. Programy budou vytvořené pouze z dříve probraných prvků a konstrukcí jazyka Python!
Napište program prijmeni_jeskyne.py, který vykreslí tuto stylizovanou jeskyni:
Program bude sestaven ze třech podprogramů:
Napište program prijmeni_zahradka.py, který vykreslí stylizovanou zahrádku:
Program bude sestaven z pěti podprogramů:
Muchomůrka: Její vzhled a pozice viz výsledný obrázek programu nahoře.
Tráva: Přidejte do programu funkci, která pod muchomůrku nakreslí zelenou trávu.
Slunce: Přidejte do programu příkazy, které nakreslí 40 náhodných slunečních paprsků. Sluneční paprsky jsou žluté a vycházejí z levého horního rohu obrazovky, ale nekreslí se přes celé plátno, ale pouze do vzdálenosti, kterou navrhnete.
Parcely: Přidejte do programu funkci, která vykreslí mapu zastavěného území v pravé horní části obrázku. Každý pozemek je čtverec a velikost strany každého pozemku je náhodná, maximálně však 50 bodů. Mapa má tvar obdélníku. V jedné řadě mapy je pět parcel a na mapě jsou tři řady.
Jezírko: Přidejte do programu funkci, která do obrázku nakreslí modré jezírko. Je nakresleno pomocí dvaceti soustředných modrých kruhů.
Napište program prijmeni_rostliny.py, který vykreslí stylizované rostliny:
Květy: Na náhodných místech se vykreslí květ. Každý květ se skládá ze třech částí: trsu trávy, stonku a květu. Trs trávy obsahuje 20 náhodných stébel. Každé stéblo je od kořene vzdálené na x-ové souřadnici maximálně 20 bodů vlevo nebo vpravo. Na y-ové souřadnici je od kořene vzdálené maximálně 40 bodů vždy směřuje od kořene směrem nahoru. Ukázka náhodných trsů:
Stonek má délku 50 bodů a jeho barva je mírně odlišná od barvy trávy. Květ je žlutý, obsahuje 40 čar, které vycházejí ze středu květu, jejich délka je náhodná. Každá čára květu je v obou osách (x,y) nejvíce 40 bodů od středu květu. Ukázka náhodných květů:
Stromy: Na náhodných místech se kreslí strom. Kmen je vysoký 150 bodů a je široký 5 bodů. Strom má 10 náhodných větví širokých 2 body. Všechny větve směřují nahoru. Ukázka náhodných stromů:
Napište program prijmeni_more.py, který vykreslí stylizovaný podmořský svět:
Velikost okna bude 600×400 se světle modrým pozadím. Program bude sestaven ze čtyř podprogramů:
Napište program prijmeni_more.py, který vykreslí stylizovanou krajinu se stromy:
Vytvořte program podle předlohy. Velikost okna bude 600×400 se světle modrým pozadím (obloha). Spodní čtvrtina bude světle zelená (tráva).
Program bude sestaven ze třech podprogramů:
Květy: kruhy 8-15 bodů na náhodných pozicích. Podmínkou je, že všechny musí být na trávníku. Jejich počet bude mezi 30-50. Barva každého květu bude náhodně zvolená ze seznamu alespoň čtyř odstínů.
Stromy: Náhodný počet mezi 5-15. Paty kmenů budou ve výšce 20-60 bodů nad spodním okrajem okna. Korunu stromu nakresli jako zelenou elipsu se šířkou 60 a výškou 100. Barvy korun budou náhodně zvolené z několika odstínů zelené. Kmen bude představován hnědým obdélníkem, který bude široký 10 a vysoký 50. Pozor, mezi kmenem a korunou nesmí být mezera.
Slunce: 100 paprsků délky 0-200 bodů. Jejich šířka bude 1-4 body. Všechny paprsky vychází z levého horního rohu okna. Kromě paprsků bude vidět 1/4 slunečního kotouče, který má poloměr 75 bodů.
Napište program prijmeni_mesto.py, který vykreslí stylizované noční město:
Velikost okna bude 700×400. Barva pozadí bude "navy".
Program bude sestaven ze čtyř podprogramů: budovy(), okna(), obloha() a hvezdy(). Funkce hvezdy() je volaná z funkce obloha().
Program bude sestaven v odlišném pořadí objektů, než by vás nejspíš intuitivně napadlo: pozadí - domy - okna. Důvodem je zjednodušení konstrukcí a výpočtů.
Budovy
Jako první se vytvoří a zavolá funkce, která pomocí cyklu nakreslí 7 budov na plnou výšku okna. Barva výplně 4 náhodné "noční", obrys "navy" (jako pozadí) v defaultní šířce 1 bod.
Okna
Každé okno má 10×10 bodů. Mezi nimi je vzdálenost 10 bodů. Všechna okna jsou v matici 35×19 oken (poslední řádek dole je bez oken). Barva okna se náhodně volí mezi "svítí" a "nesvítí". Okna se kreslí pomocí dvou cyklů. Druhý je zanořený do prvního. První má 19 kroků a definuje řádky (osa y), zanořený má 35 kroků a definuje sloupce (osa x). Nezapomeň, že range() může mít tři parametry (start, stop, step). Je praktičtější si pomocí nich generovat přímo souřadnice x a y:
for i in range(): # sloupce
for i in range(): # řádky
barva = choice() # svítí / nesvítí
canvas.create_rectangle(x, y, x+10, y+10, fill=barva, outline="#333333")
Obloha
Snížení výšky budovy se vytvoří tak, že se horní část každé budovy překreslí obdélníkem šířky 100 bodů "náhodné" výšky a to tak, že musí být po krocích 10 (5, 15, 25, 35 ... 305). To zajistí randrange(10, 306, 20) - 5. Barvy i obrys obdélníku bude "navy".
Pozor: Po vykreslení prvního obdélníku si do proměnných x1, y1, x2 a y2 uložte jeho aktuální souřadnice:
Nyní zavoláte funkci hvezdy s těmito souřadnicemi hvezdy(x1, y1, x2, y2). Ta si je převezme aby "věděla", v jakém rozsahu má hvězdy vykreslit.
Hvězdy
Funkce si převezme ty tři souřadnice x1, x2, y2:
def hvezdy(x1, x2, y2):
pocet = ... # vypočet plochy zmenšený 1000x
for i in range(pocet):
x = randint() # rozsah pro x
y = randint() # rozsah pro y
r = randint(2,3)
barva = choice(["white", "yellow"])
canvas.create_oval(x, y, x+r, y+r, fill=barva, outline='')
Jejich počet se bude odvíjet od velikosti tohoto obdélníku: čím větší, tím více hvězd a opačně. Jejich počet bude číslo definující velikost plochy obdélníku (S = a×b) zmenšená 1000×. Jinak by jich bylo příliš mnoho. To zmenšení se musí provést nikoli běžným dělením (/), ale celočíselným (//), neboť funkce range() vyžaduje celé číslo:
>>> 58567 / 1000
58.567
>>> 58567 // 1000
58
>>>
Nyní už stačí vygenerovat pocet hvězd na náhodných pozicích ve velikosti 2 nebo 3 body bez obrysu v náhodné barvě bílá nebo žlutá.
Tento proces proběhne 7× pro každý dům:
def hvezdy(x1, x2, y2):
#
# kód pro kreslení hvězd
#
def pozadi():
for i in range(7):
#
# kód pro kreslení modrého pozadí nad domem
#
hvezdy(x1, x2, y2)
Pro zdatnější
Jsou 3 hodiny ráno, většina slušných lidí už spí. Svítí výrazně méně oken než hned po setmění. Upravte program tak, aby to v něm bylo poznat, ovšem bez použití příkazů pro větvení.