PyGame - анимације¶
Питање 1.¶
Шта је резултат извршавања следеће наредбе?
pygame.time.wait(1)
- Зауставља се извршавање програма на период од 1 милисекунде.
- Тачно
- Зауставља се извршавање програма док корисник не кликне на тастер 1.
- Нетачно
- Зауставља се извршавање програма на период од 1 секунде.
- Нетачно
Q-299: Изабери тачан одговор:
Питање 2.¶
Приказивање 20 фрејмова по секунди (20 fps) значи да сваки фрејм траје
- 20 милисекунди
- Нетачно
- 20 секунди
- Нетачно
- 50 милисекунди
- Тачно
- 0,2 секунде
- Нетачно
Q-300: Изабери тачан одговор:
Питање 3.¶
Ако задамо да се приказује 1000 фрејмова по секунди, а наш рачунар може да прикаже 50 фрејмова по секунди
- програм прекида са радом и пријављује грешку
- Нетачно
- рачунар се блокира и не реагује на команде
- Нетачно
- систем нас пита да ли смо сигурни да желимо да наставимо извршавање програма
- Нетачно
- приказује се 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)
Црвени круг се у сваком фрејму помера
- 1 милиметар на доле
- Нетачно
- 1 центиметар на горе
- Нетачно
- 1 пиксел на доле
- Тачно
- 1 пиксел на горе
- Нетачно
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)
Којом брзином се помера круг по екрану?
- 3 пиксела по секунди
- Нетачно
- 20 пиксела по секунди
- Нетачно
- 60 пиксела по секунди
- Тачно
- не помера се
- Нетачно
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)
- На сваких 100 милисекунди круг се помера за 10 пиксела на десно.
- Нетачно
- На сваких 100 милисекунди круг се помера за 10 пиксела на доле.
- Нетачно
- На сваких 100 милисекунди полупречник круга (који је на почетку 20 пиксела) се повећава за 10 пиксела.
- Тачно
- Ниједан од осталих понуђених одговора није тачан.
- Нетачно
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)
- На сваких 100 милисекунди квадрат се помера за 10 пиксела на десно
- Нетачно
- На сваких 100 милисекунди квадрат се помера за 10 пиксела на доле
- Нетачно
- На сваких 100 милисекунди правоугаоник (висине 50 пиксела) постаје за 10 пиксела шири
- Нетачно
- На сваких 100 милисекунди квадрат се помера за 10 пиксела на лево
- Тачно
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: Изабери тачан одговор:
Питање 11.¶
Означи тачна тврђења.
- Током паузе у извршавању програма позивом функције pygame.time.wait() није могућа регистрација догађаја.
- Нетачно
- Током паузе у извршавању програма позивом функције pygame.time.wait() није могућа реакција на догађаје.
- Тачно
- Позивом функције pygame.time.wait() се ствара нови догађај.
- Нетачно
- Функција pygame.time.wait() се не може извршити уколико постоје необрађени догађаји који су се десили пре позива функције.
- Нетачно
- Функција pygame.time.wait() нема утицаја на стварање и обраду догађаја, већ само паузира све реакције на догађаје, тј. њихову обраду.
- Тачно
Q-309: Изабери тачан одговор:
Питање 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)
- if x + 2 > sirina
- Нетачно
- if x + 100 > sirina
- Нетачно
- if x + 102 > sirina
- Нетачно
- Ниједан од понуђених одговора није тачан.
- Тачно
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)
- if а + 5 < sirina:
- Нетачно
- if а + 150 < sirina:
- Нетачно
- if а < sirina:
- Нетачно
- if а - 145 < sirina:
- Тачно
Q-311: Изабери тачан одговор:
Питање 14.¶
Нека се круг полупречника r са центром у (x, y) помера за по dy пиксела на горе. Услов да је цео круг прошао кроз горњу ивицу екрана гласи:
- y + r < 0
- Тачно
- y - r < 0
- Нетачно
- y < 0
- Нетачно
- y - dy < 0
- Нетачно
Q-312: Изабери тачан одговор:
Питање 15.¶
Нека су димензије дате слике sl_sirina и sl_visina, а њен горњи леви угао (x, y). Како проверавамо да ли је слика у потпуности прошла кроз леву ивицу прозора и више се не види ни један њен део?
- if x < 0:
- Нетачно
- if y + sl_visina < 0:
- Нетачно
- if x + sl_sirina < 0:
- Тачно
- if y < 0:
- Нетачно
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)
- x = sirina-r
- Нетачно
- dx = -dx
- Тачно
- x = r
- Нетачно
- dx = -2
- Нетачно
Q-314: Изабери тачан одговор:
Питање 17.*¶
Означи тачна тврђења.
- Извршавањем pygame.time.set_timer(pygame.USEREVENT, 100) се зауставља рад програма на 100 милисекунди.
- Нетачно
- Позивом pygame.time.set_timer(pygame.USEREVENT, 100) се обезбеђује да по истеку наведеног периода од тренутка када је функција позвана буде (једнократно) створен догађај pygame.USEREVENT.
- Нетачно
- Позивом pygame.time.set_timer(pygame.USEREVENT, 100) се на сваких 100 милисекунди ствара догађај pygame.USEREVENT.
- Тачно
- Извршавањем pygame.time.set_timer() се не зауставља рад програма.
- Тачно
- Када се користи тајмер реакција на догађај који је створио тајмер мора да буде исцртавање нове слике.
- Нетачно
Q-315: Изабери тачан одговор:
Питање 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
- 1) па 2)
- Нетачно
- 1) па 3)
- Нетачно
- 2)
- Нетачно
- 1) и 2) у било ком редоследу
- Нетачно
- 1) и 3) у било ком редоследу
- Тачно
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
- Сегмент 1
- Тачно
- Сегмент 2
- Тачно
- Сегмент 3
- Тачно
- Сегмент 4
- Тачно
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
Дате допуне програма се разликују у редоследу испитивања да ли је неки догађај наступио.
Да ли се за један исти редослед одигравања догађаја тајмера и затварања прозора може десити да се две верзије програма различито понашају?
- Да. Догађаји се обрађују редоследом којим се испитују. Верзија 1) увек прво одбрађује догађај искључивања прозора, што значи да у појединим сценаријима може игнорисати догађај pg.USEREVENT који се десио пре pg.QUIT.
- Нетачно
- Не. Догађаји се обрађују редоследом којим су се десили. Редослед испитивања који је догађај наступио не утиче на редослед обраде догађаја.
- Тачно
- Верзија 2) неће радити због погрешног редоследа испитивања услова. Догађај pg.QUIT мора бити први испитан.
- Нетачно
Q-318: Изабери тачан одговор: