PyGame - анимације¶
Питање 1.¶
Шта је резултат извршавања следеће наредбе?
pygame.time.wait(1)
Q-299: Изабери тачан одговор:
Питање 2.¶
Приказивање 20 фрејмова по секунди (20 fps) значи да сваки фрејм траје
Q-300: Изабери тачан одговор:
Питање 3.¶
Ако задамо да се приказује 1000 фрејмова по секунди, а наш рачунар може да прикаже 50 фрејмова по секунди
Q-301: Изабери тачан одговор:
Питање 4.¶
Ако функција novi_frejm изгледа овако:
def novi_frejm(): global x y += 1 prozor.fill(pg.Color("white")) pg.draw.circle(prozor, pg.Color("red"), (x, y), 30)
Црвени круг се у сваком фрејму помера
Q-302: Изабери тачан одговор:
Питање 5.¶
Дат је део програма којим се анимира кретање црвеног круга
def novi_frejm(): global x x += 3 prozor.fill(pg.Color("white")) pg.draw.circle(prozor, pg.Color("red"), (x, y), 30) pygamebg.frame_loop(20, novi_frejm)
Којом брзином се помера круг по екрану?
Q-303: Изабери тачан одговор:
Питање 6.¶
У којем од два дата програмска сегмента се круг брже креће по екрану (у пикселима по секунди)?
def novi_frejm(): global x x += 5 prozor.fill(pg.Color("white")) pg.draw.circle(prozor, pg.Color("red"), (x, y), 30) pygamebg.frame_loop(10, novi_frejm)
def novi_frejm(): global x x += 1 prozor.fill(pg.Color("white")) pg.draw.circle(prozor, pg.Color("red"), (x, y), 30) pygamebg.frame_loop(50, novi_frejm)
Q-304: Изабери тачан одговор:
Питање 7.¶
Дата је функција nov_frejm, која се позива одређени број пута у секунди и анимира кретање n кругова (изостављена је иницијализација глобалних података, али треба претпоставити да су сви подаци на почетку различити).
def nov_frejm(): global x, y prozor.fill(pg.Color("white")) for i in range(n): x[i] += dx y[i] += dy pg.draw.circle(prozor, pg.Color("red"), (x[i], y[i]), r[i])
Која од наредних тврђења су тачна за ову функцију?
Q-305: Изабери тачан одговор:
Питање 8.¶
Шта је резултат извршавања следећег програма?
import pygame as pg, pygamebg prozor = pygamebg.open_window(200,200, "") a = 20 def nov_frejm(): global a prozor.fill(pg.Color("white")) pg.draw.circle(prozor, pg.Color("red"), (100, 100), a) a = a + 10 pygamebg.frame_loop(10, nov_frejm)
Q-306: Изабери тачан одговор:
Питање 9.*¶
Шта је резултат извршавања следећег програма?
import pygame as pg, pygamebg prozor = pygamebg.open_window(200,200, "") def nov_frejm(): global x, y prozor.fill(pg.Color("white")) pg.draw.rect(prozor, pg.Color("red"), (x, 50, a, a)) x += dx y += dy a = 50 x, y = 0, 50 dx, dy = -10, 0 pygamebg.frame_loop(10, nov_frejm)
Q-307: Изабери тачан одговор:
Питање 10.*¶
Дата је функција nov_frejm, која се позива одређени број пута у секунди и анимира кретање n кругова (изостављена је иницијализација глобалних података, али треба претпоставити да су сви подаци на почетку различити). Сваки елемент листе krugovi је торка која описује један круг.
def nov_frejm(): global krugovi prozor.fill(pg.Color("white")) for i in range(n): x, y, dx, dy, boja, r = krugovi[i] x += dx y += dy krugovi[i] = (x, y, dx, dy, boja, r) pg.draw.circle(prozor, boja, (x, y), r)
Која од наредних тврђења су тачна за ову функцију?
Q-308: Изабери тачан одговор:
Питање 12.*¶
Како треба допунити if наредбу у програму, да би се извршавањем тог програма приказивао квадрат који се креће с лева на десно, а у тренутку када више не би био у целости видљив, поново се појављује на почетној позицији и наставља да се креће на исти начин?
import pygame as pg, pygamebg (sirina, visina) = (200, 200) prozor = pygamebg.open_window(sirina, visina, "") pocetna = 100 x = pocetna def nov_frejm(): global x if _____________________: x = x + 2 else: x = pocetna prozor.fill(pg.Color("white")) pg.draw.rect(prozor, pg.Color("red"), (x, 100, 100, 100)) pygamebg.frame_loop(10, nov_frejm)
Q-310: Изабери тачан одговор:
Питање 13.*¶
Како треба допунити if наредбу у програму, да би се извршавањем тог програма приказивао круг који се креће с лева на десно, а у тренутку када више ни један део круга не би био видљив, круг се поново појављује на почетној позицији и наставља да се креће на исти начин?
import pygame as pg, pygamebg (sirina, visina) = (200, 200) prozor = pygamebg.open_window(sirina, visina, "") pocetna = 100 a = pocetna def nov_frejm(): global a if _____________________: x = x + 5 else: x = pocetna prozor.fill(pg.Color("white")) pg.draw.circle(prozor, pg.Color("red"), (a, 100), 150) pygamebg.frame_loop(10, nov_frejm)
Q-311: Изабери тачан одговор:
Питање 14.¶
Нека се круг полупречника r са центром у (x, y) помера за по dy пиксела на горе. Услов да је цео круг прошао кроз горњу ивицу екрана гласи:
Q-312: Изабери тачан одговор:
Питање 15.¶
Нека су димензије дате слике sl_sirina и sl_visina, а њен горњи леви угао (x, y). Како проверавамо да ли је слика у потпуности прошла кроз леву ивицу прозора и више се не види ни један њен део?
Q-313: Изабери тачан одговор:
Питање 16.*¶
Шта треба уписати на означено место у програму, да би његовим извршавањем био приказиван круг који се креће лево-десно одбијајући се о ивице прозора?
import pygame as pg, pygamebg (sirina, visina) = (200, 100) prozor = pygamebg.open_window(sirina, visina, "pygame") x, y, dx, r = 30, 50, 2, 30 def nov_frejm(): global x, dx if x > sirina-r or x < r: ______________ x = x + dx prozor.fill(pg.Color("skyblue")) pg.draw.circle(prozor, pg.Color("yellow"), (x, y), r) pygamebg.frame_loop(50, nov_frejm)
Q-314: Изабери тачан одговор:
Питање 18.*¶
Следећи недовршени програм треба сваке секунде да промени боју позадине прозора.
import pygame as pg, random pg.init() prozor = pg.display.set_mode((200,200)) def nasumicna_boja(): return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) pg.time.set_timer(pg.USEREVENT,1000) kraj = False treba_crtati = True while not kraj: if treba_crtati: prozor.fill(nasumicna_boja()) ___________ dogadjaj = pg.event.wait() if dogadjaj.type == pg.QUIT: kraj = True elif dogadjaj.type == pg.USEREVENT: treba_crtati = True pg.quit()
Које од наредних команди и у ком редоследу треба додати на означено место да би програм радио како је очекивано?
pg.display.update() treba_crtati = True treba_crtati = False
Q-316: Изабери тачан одговор:
Питање 19.**¶
Овај програм треба допунити тако да наизменично црта црвени и жути круг. Недостаје иницијализација и функција nov_frejm
import pygame as pg, pygamebg (sirina, visina) = (200, 200) prozor = pygamebg.open_window(sirina, visina, "pygame") # ... убацити шта недостаје pygamebg.frame_loop(1, nov_frejm)
Које од следећа 4 програмска сегмента можемо да убацимо на означено место, да би програм радио према очекивању?
boja = pg.Color("red") def nov_frejm(): global boja prozor.fill(pg.Color("skyblue")) if boja == pg.Color("red"): boja = pg.Color("yellow") else: boja = pg.Color("red") pg.draw.circle(prozor, boja, (100, 100), 50) i = 0 boja = [pg.Color("red"), pg.Color("yellow")] def nov_frejm(): global i prozor.fill(pg.Color("skyblue")) pg.draw.circle(prozor, boja[i], (100, 100), 50) i = 1 - i crveni = True def nov_frejm(): global crveni prozor.fill(pg.Color("skyblue")) if crveni: pg.draw.circle(prozor, pg.Color("red"), (100, 100), 50) else: pg.draw.circle(prozor, pg.Color("yellow"), (100, 100), 50) crveni = not crveni boja = 1 def nov_frejm(): global boja prozor.fill(pg.Color("skyblue")) if boja == 0: pg.draw.circle(prozor, pg.Color("red"), (100, 100), 50) boja = 1 else: pg.draw.circle(prozor, pg.Color("yellow"), (100, 100), 50) boja = 0
Q-317: Изабери тачан одговор:
Питање 20.**¶
Следећи прогрм треба да сваке секунде насумично промени боју позадине
import pygame as pg, random pg.init() prozor = pg.display.set_mode((200,200)) def nasumicna_boja(): return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) pg.time.set_timer(pg.USEREVENT,1000) kraj = False treba_crtati = True while not kraj: if treba_crtati: prozor.fill(nasumicna_boja()) pg.display.update() treba_crtati = False dogadjaj = pg.event.wait() # .... pg.quit()
Предложене су две допуне програма на месту тачкица:
if dogadjaj.type == pg.QUIT: kraj = True elif dogadjaj.type == pg.USEREVENT: treba_crtati = True
if dogadjaj.type == pg.USEREVENT: treba_crtati = True elif dogadjaj.type == pg.QUIT: kraj = True
Дате допуне програма се разликују у редоследу испитивања да ли је неки догађај наступио.
Да ли се за један исти редослед одигравања догађаја тајмера и затварања прозора може десити да се две верзије програма различито понашају?
Q-318: Изабери тачан одговор: