8 Animacije i simulacije Plan rada 1 Uvod




















![LISTE neka_lista=[podatak 1, podatak 2, . . . , podatak 5] indeksi 0 1 LISTE neka_lista=[podatak 1, podatak 2, . . . , podatak 5] indeksi 0 1](https://slidetodoc.com/presentation_image_h2/607617166adf13237da0366fcf99ba9c/image-21.jpg)





















- Slides: 42
8. Animacije i simulacije
Plan rada 1. Uvod u Pygame i instalacija 2. Koordinatni sistem i crtanje duži 3. Crtanje pravougaonika, kvadrata i mnogouglova 4. Crtanje krugova, elipsi i lukova 5. Struktura Pygame programa, podešavanje boja i generisanje slučajnih vrednosti 6. Prikaz slike i ispisivanje teksta u Pygame-u 7. Crtanje grafike korištenjem petlji i kombinovanje raznih geometrijskih oblika 8. Animacije i simulacije 9. Jednostavne igrice 10. Reagovanje na događaje sa miša ili tastature 11. Jednostavne igrice 12. Jednostavne igrice
Naša stranica na sajtu: https: //www. procoding. rs/pygame-kurs-programiranje-2 d-grafike-animacija-i-igrica/ E-mail: sejonp@procoding. rs
Domaći zadatak
# 1 OTVARANJE PROZORA, DIMENZIJE I NASLOV import pygame import math pygame. init() prozor = pygame. display. set_mode((600, 600)) # 2 ISCRTAVANJE NEKOG SADRZAJA U PROZORU prozor. fill(pygame. Color("skyblue")) pygame. display. set_caption("RAINBOW - DUGA POMOCU PETLJE FOR") x=100 y=100 sirina=400 visina=400 boja=["red", "yellow", "green", "blue", "cyan"] for i in range(5): pygame. draw. arc(prozor, pygame. Color(boja[i]), (x, y, sirina, visina), math. radians(0), math. radians(180), 20) pygame. draw. rect(prozor, pygame. Color("black"), (x, y, sirina, visina), 1) pygame. display. update() x=x+20 y=y+20 sirina=sirina-40 visina=visina-40 # 3 PAUZIRANJE I CEKANJE NA DOGADJAJ SA MISA ILI TASTATURE while pygame. event. wait(). type != pygame. QUIT: pass # 4 ZATVARANJE PROGRAMA pygame. quit() Duga sa petljom FOR
import pygame import math pygame. init() prozor = pygame. display. set_mode((600, 600)) prozor. fill(pygame. Color("skyblue")) pygame. display. set_caption("RAINBOW - DUGA POMOCU PETLJE WHILE") x=100 y=100 sirina=400 visina=400 boja=["red", "yellow", "green", "blue", "cyan"] i=0 while i<=4: pygame. draw. arc(prozor, pygame. Color(boja[i]), (x, y, sirina, visina), math. radians(0), math. radians(180), 20) pygame. draw. rect(prozor, pygame. Color("black"), (x, y, sirina, visina), 1) pygame. display. update() x=x+20 y=y+20 sirina=sirina-40 visina=visina-40 i=i+1 Duga sa petljom WHILE while pygame. event. wait(). type != pygame. QUIT: pass pygame. quit()
Pydroid – aplikacija u androidu za python i pygame • Preuzima se sa play prodavnice • Samo početni deo python/pyagame programa se razlikuje
import pygame_sdl 2 Primer u Pydroid-u pygame_sdl 2. import_as_pygame() import sys import pygame from pygame. locals import* pygame. init() prozor=pygame. display. set_mode((720, 1480)) while True: prozor. fill((0, 255, 0)) pygame. draw. line(prozor, pygame. Color("red"), (0, 0), (720, 1480), 3) pygame. draw. line(prozor, pygame. Color("red"), (720, 0), (0, 1480), 3) pygame. draw. rect(prozor, pygame. Color("red"), (50, 300, 300), 5) pygame. display. update()
Komande za instalaciju Py. Game pip 3 install pygame py -3 -m pip install pygame py -m pip install pygame
Šta je PIP? PIP je softverski menadžer za instalaciju Python paketa(biblioteka) kao npr. Py. Game • Naredba pip –version proverava verziju pip • Naredba pip list izlistava sve pip pakete tj, biblioteke instalirane na vašem računaru
Naredbe u Py. Game-u NAREDBA OBJAŠNJENJE import pygame Importuje tj. uvozi biblioteku pygame u program pygame. init() Inicijalizuje biblioteku prozor=pygame. display. set_mode((200, 200)) Prikazuje prozor sa dimenzijama 200 x 200 piksela pygame. display. set_caption("NASLOV PROZORA") Upisuje u title bar (traku naslova) prozor. fill(pygame. Color(“white”)) Boji prozor u datoj boji pygame. draw. line() Crta duž pygame. display. update() osvežavanje prozora i prikazivanje novog sadržaja pygame. time. wait(5000) Pauzira program na 5 sekundi pygame. quit() Isključivanje biblioteke
KORACI U REALIZACIJI PROGRAMA 1. INICIJALIZACIJA BIBLIOTEKE Py. Game 2. OTVARANJE PROZORA, PODEŠAVANJE DIMENZIJA I NASLOVA 3. ISCRTAVANJE NEKOG SADRZAJA U PROZORU 4. PAUZIRANJE I ČEKANJE NA DOGADJAJ SA MIŠA ILI TASTATURE 5. ZATVARANJE PROGRAMA
Py. Game KOORDINATNI SISTEM • U Py. Game prozoru koordinatni sistem je malo drugačiji od pravouglog koordinatnog sistema • Merna jedinica je 1 piksel a položaj svake tačke je određen uređenim parom koordinata (x, y) • U gornjem levom uglu Py. Game prozora je tačka (0, 0) • Koordinata x raste kada se pomeramo u desno • Koordinata y raste kada se pomeramo na dole Nastavnik Informatike i računarstva dipl. ing. Sead Gicić 13
Neke od naredbi crtanje linije: pygame. draw. line(prozor, pygame. Color("red"), (50, 50), (450, 450), 3) crtanje pravougaonika: pygame. draw. rect(prozor, pygame. Color("blue"), (10, 200, 200), 5) crtanje mnogougla: pygame. draw. polygon(prozor, pygame. Color(“red”), temena) crtanje kruga: pygame. draw. circle(prozor, pygame. Color("blue"), (krug_c_x, krug_c_y), 50, 3) crtanje elipse: pygame. draw. elipse(prozor, pygame. Color("blue"), (krug_c_x, krug_c_y), 50, 3) crtanje luka: pygame. draw. arc(prozor, pygame. Color("blue"), (50, 300, 200), math. radians(150), 1)
1. STRUKTURA PROGRAMA KOJI SE ZATVARA SA CLOSE(X) sa funkcijom event. wait() # 1 INICIJALIZACIJA BIBLIOTEKE Py. Game import pygame. init() # 2 OTVARANJE PROZORA, DIMENZIJE I NASLOV prozor=pygame. display. set_mode((500, 500)) pygame. display. set_caption("NASLOV PROZORA") # 3 ISCRTAVANJE NEKOG SADRZAJA U PROZORU prozor. fill(pygame. Color("white")) pygame. draw. line(prozor, pygame. Color("red"), (50, 50), (450, 450), 3 ) pygame. display. update() # 4 PAUZIRANJE I CEKANJE NA DOGADJAJ SA MISA ILI TASTATURE while pygame. event. wait(). type != pygame. QUIT: pass # 5 ZATVARANJE PROGRAMA pygame. quit()
2. STRUKTURA PROGRAMA KOJI SE ZATVARA SA CLOSE(X) sa petljama while i for i funkcijom event. get() event. get # 1 OTVARANJE PROZORA, DIMENZIJE I NASLOV import pygame. init() prozor=pygame. display. set_mode((500, 500)) pygame. display. set_caption("NASLOV PROZORA") # 2 ISCRTAVANJE NEKOG SADRZAJA U PROZORU prozor. fill(pygame. Color("white")) pygame. display. update() # 3 PAUZIRANJE I CEKANJE NA DOGADJAJ SA MISA ILI TASTATURE pokrenuta_igrica=True # napravimo promenljivu while pokrenuta_igrica: pass for dogadjaj in pygame. event. get(): if dogadjaj. type==pygame. QUIT: pokrenuta_igrica=False # 4 ZATVARANJE PROGRAMA pygame. quit()
# 1 OTVARANJE PROZORA, DIMENZIJE I NASLOV import pygame. init() prozor=pygame. display. set_mode((500, 500)) pygame. display. set_caption("NASLOV PROZORA") # 2 ISCRTAVANJE NEKOG SADRZAJA U PROZORU prozor. fill(pygame. Color("white")) pygame. draw. line(prozor, pygame. Color("red"), (50, 50), (450, 450), 3) pygame. display. update() # 3 PAUZIRANJE I CEKANJE NA DOGADJAJ SA MISA ILI TASTATURE pokrenuta_igrica=True while pokrenuta_igrica: kliknut_taster=pygame. key. get_pressed() pygame. key. set_repeat for dogadjaj in pygame. event. get(): if dogadjaj. type==pygame. QUIT: pokrenuta_igrica=False if kliknut_taster[pygame. K_ESCAPE]: pokrenuta_igrica=False # 4 ZATVARANJE PROGRAMA pygame. quit() 3. Struktura programa sa zatvaranjem na X i ESC
Petlja WHILE while (uslov): naredba (sve dok je ispunjen uslov, petlja će ponavljati naredbu) while (uslov): naredba 1 naredba 2. . naredba n
PETLJA FOR print(“Zdravo”) print(“Zdravo”) -----------------------for i in range(5): # ponovi 5 puta: print(“Zdravo”)
PETLJA FOR sa početnom i krajnom vrednošću i korakom for i in range(1, 11, 2): # 1 je početna vrednost, print(i) #11 je krajnja vrednost +1 # 2 je korak štampanja
LISTE neka_lista=[podatak 1, podatak 2, . . . , podatak 5] indeksi 0 1 1/8/2022 Nastavnik Informatike i računarstva dipl. ing. Sead Gicić . . . 4 21
Colour picker od 0 do 255 prozor. fill(pygame. Color(13, 113, 213)) od 0 do 255 pygame. draw. line(prozor, pygame. Color(20, 120, 90), (100, 180), (150, 150), 5)
Slučajno generisane vrednosti Kad se nešto dešava u neočekivanom redosledu kažemo da je slučajno(eng. random). Da bi računarske igrice bile zanimljivije u njeh se dodaju neki elementi slučajnosti. U programskom jeziku Python za dobijanje slučajnih vrednosti se koristi bibilioteka random. U okviru ove biblioteke koristi se funkcija randint(a, b) primer: x=random. randint(1, 100)
Učitavanje i prikaz slike učitavanje slike: slika=pygame. image. load(jabuka. png) prikaz učitane slike: prozor. blit(slika, (x, y))
Određivanje širine i visine slike pomoću funkcije širina slike: get. width() visina slike: get. height()
Ispisivanje teksta - određivanje fonta font=pygame. font. Sys. Font("Arial", 40) - određivanje poruka="Zdravo Py. Game!" - kreiranje slike koja će predstavljati poruku ispisanu nekom bojom tekst_kao_slika=font. render(poruka, True, pygame. Color("blue")) - prikaz poruke na odgovarajućem mestu na ekranu prozor. blit(tekst_kao_slika, (20, 20))
Primer animacije Animacija je postupak kojim se stvara iluzija kretanja na beživotnim stvarima, crtežima ili modelima. Ovaj postupak se koristi i prilikom izrade crtanih filmova. Crtani film nastaje tako što se na ekranu brzo smenjuju sličice, pri čemu je svaka sledeća slična prethodnoj. Da bi se stvorila iluzija kretanja slika se prikazuje na monitoru i velikom brzinom se zamenjuje blago izmenjenom slikom. Svaka tako prikazana slika naziva se okvir ili frejm(eng. frame). frejm Ako se u jednoj sekundi izmeni manje od 12 slika većina ljudi može da opazi neujednačeno kretanje. Zbog toga je potrebno da se slika izmeni 12 ili više puta u sekundi.
Primeri
Sat u Py. Game-u Umesto da program čeka određeni broj milisekundi da bi prešao na sledeći frejm što je zadato u naredbi pygame. time. wait(? ? ? ) u programskom kodu može se odrediti broj izvršavanja tele petlje na npr 25 puta u sekundi pomoću naredbe sat=pygame. Clock() sat. tick()
pygame. time. wait() pygame. time. Clock()
KORACI U REALIZACIJI ANIMACIJE 1. INICIJALIZACIJA BIBLIOTEKE Py. Game 2. OTVARANJE PROZORA, PODEŠAVANJE DIMENZIJA I NASLOVA 3. DEFINISANJE POČETNIH VREDNOSTI PROMENLJIVIH I SADRŽAJA EKRANA 4. DEFINISANJE FUNKCIJA ZA CRTANJE mpž 5. DEFINISANJE FUNKCIJA ZA PRELAZAK NA NOVI FREJM 6. GLAVNA PETLJA U KOJOJ SE POZIVAJU FUNKCIJE ZA CRTANJE I PRELAZAK NA NOVI FREJM 7. ZATVARANJE PROGRAMA
Šta su funkcije? • Funkcija je deo programa ili blok koda koji se izvršava samo kad se pozove • U funkciju se mogu proslediti podaci koji se nazivaju parametri • Funkcija može vratiti podatke kao rezultat. • U Python-u funkcija se definiše koristeći definisane reči: def moja_funkcija(): print(„Pozdrav iz funkcije!")
Zadatak: Pomoću funkcije ispisati marku automobila def auto(x): print("---------") print("U funkciji smo: ") print("Marka automobila je: ", x) print("U glavnom programu smo: ") marka=input("Unesite marku automobila: ") auto(marka)
Zadatak: Pomoću funkcije izračunati površinu kvadrata def kvadrat(x): print("U funkciji smo. . . ") o=4*a p=a**2 print("OBIM: ", o) print("POVRSINA: ", p) print("U glavnom programu smo. . . ") a=int(input("Unesi stranicu kvadrata a: ")) kvadrat(a)
Zadatak: Pomoću funkcije izračunati površinu pravougaonika def pravougaonik(x, y): o=2*a+2*b p=a*b print("OBIM iz funkcije: ", o) print("POVRSINA iz funkcije: ", p) return o, p a=int(input("Unesi stranicu pravougaonika a: ")) b=int(input("Unesi stranicu pravougaonika b: ")) print("--------") obim, povrsina=pravougaonik(a, b) print("OBIM IZ MAIN-a", obim) print("POVRSINA IZ MAIN-a", povrsina)
import pygame. init() (sirina, visina)=(200, 200) prozor=pygame. display. set_mode((sirina, visina)) prozor. fill(pygame. Color("white")) def crtaj(): prozor. fill(pygame. Color("white")) pygame. draw. circle(prozor, pygame. Color("red"), [x, visina//2], 20) def novi_frejm(): global x, y x=x+20 x=20 for i in range (9): crtaj() novi_frejm() pygame. display. update() pygame. time. wait(500) while pygame. event. wait(). type != pygame. QUIT: pass pygame. quit() Animacija kretanja loptice
import pygame, random pygame. init() prozor=pygame. display. set_mode((500, 500)) prozor. fill(pygame. Color("blue")) def crtaj(): pygame. draw. circle(prozor, pygame. Color("white"), [x, y], 2) def novi_frejm(): global x, y x=random. randint(0, 500) y=random. randint(0, 500) x=50 y=50 for i in range (50): crtaj() novi_frejm() pygame. time. wait(100) pygame. display. update() # pygame. time. wait(500) while pygame. event. wait(). type != pygame. QUIT: pass pygame. quit() Animacija pahuljice
#1 INICIJALIZACIJA BIBLIOTEKA import pygame. init() # 2 OTVARANJE PROZORA, DIMENZIJE I NASLOV prozor=pygame. display. set_mode((500, 500)) pygame. display. set_caption("ZVEZDA") prozor. fill(pygame. Color("white")) # 3 DEFINISANJE POCETNIH VREDNOSTI PROMENLJIVIH I SADRŽAJA EKRANA zvezda_slika=pygame. image. load("star-icon-on-white 150 155. jpg") # slika zvezde treba_crtati=True #ZVUK muzika=pygame. mixer. music. load('snowflake. mp 3') pygame. mixer. music. play(-1) #FUNKCIJE def crtaj(): prozor. fill(pygame. Color("white")) if treba_crtati: prozor. blit(zvezda_slika, (150, 150)) def novi_frejm(): global treba_crtati=not treba_crtati # menjamo iz True u False i obratno 4 GLAVNA PETLJA GDE SE POZIVAJU FUNKCIJE ZA CRTANJE I NOVI FREJM #IZLAZ IZ IGRICE izlaz_iz_animacije = False sat=pygame. time. Clock() while not izlaz_iz_animacije: crtaj() pygame. display. update() for dogadjaj in pygame. event. get(): if dogadjaj. type==pygame. QUIT: izlaz_iz_animacije = True sat. tick(12) novi_frejm() pygame. quit() Animacija zvezde
import pygame. init() (sirina, visina)=(500, 500) prozor=pygame. display. set_mode(( sirina, visina)) pygame. display. set_caption("TIGAR SKACE") #ZVUK krik_tigra=pygame. mixer. Sound('Tig er 4. mp 3') prozor. fill(pygame. Color("white")) slika=pygame. image. load("tigar 140 x 79. jpg") x=0 y=(500 -slika. get_height())/2 def crtaj(): ) prozor. fill(pygame. Color("white") prozor. blit(slika, (x, y)) def novi_frejm_gore(): global x, y x=x+40 y=y-20 def novi_frejm_dole(): global x, y x=x+40 y=y+20 x=20 for i in range (4): crtaj() novi_frejm_gore() pygame. display. update() krik_tigra. play() pygame. time. wait(2000) for i in range (5): crtaj() novi_frejm_dole() pygame. display. update() krik_tigra. play() pygame. time. wait(2000) while pygame. event. wait(). type != pygame. QUIT: pass pygame. quit() Animacija tigrovog skoka