$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

PyGame - анимације

Питање 1.

Шта је резултат извршавања следеће наредбе?

pygame.time.wait(1)

    Q-299: Изабери тачан одговор:

  • Зауставља се извршавање програма на период од 1 милисекунде.
  • Тачно
  • Зауставља се извршавање програма док корисник не кликне на тастер 1.
  • Нетачно
  • Зауставља се извршавање програма на период од 1 секунде.
  • Нетачно

Питање 2.

Приказивање 20 фрејмова по секунди (20 fps) значи да сваки фрејм траје

    Q-300: Изабери тачан одговор:

  • 20 милисекунди
  • Нетачно
  • 20 секунди
  • Нетачно
  • 50 милисекунди
  • Тачно
  • 0,2 секунде
  • Нетачно

Питање 3.

Ако задамо да се приказује 1000 фрејмова по секунди, а наш рачунар може да прикаже 50 фрејмова по секунди

    Q-301: Изабери тачан одговор:

  • програм прекида са радом и пријављује грешку
  • Нетачно
  • рачунар се блокира и не реагује на команде
  • Нетачно
  • систем нас пита да ли смо сигурни да желимо да наставимо извршавање програма
  • Нетачно
  • приказује се 50 фрејмова по секунди
  • Тачно

Питање 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: Изабери тачан одговор:

  • 1 милиметар на доле
  • Нетачно
  • 1 центиметар на горе
  • Нетачно
  • 1 пиксел на доле
  • Тачно
  • 1 пиксел на горе
  • Нетачно

Питање 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: Изабери тачан одговор:

  • 3 пиксела по секунди
  • Нетачно
  • 20 пиксела по секунди
  • Нетачно
  • 60 пиксела по секунди
  • Тачно
  • не помера се
  • Нетачно

Питање 6.

У којем од два дата програмска сегмента се круг брже креће по екрану (у пикселима по секунди)?

  1. 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)
    
  2. 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: Изабери тачан одговор:

  • На сваких 100 милисекунди круг се помера за 10 пиксела на десно.
  • Нетачно
  • На сваких 100 милисекунди круг се помера за 10 пиксела на доле.
  • Нетачно
  • На сваких 100 милисекунди полупречник круга (који је на почетку 20 пиксела) се повећава за 10 пиксела.
  • Тачно
  • Ниједан од осталих понуђених одговора није тачан.
  • Нетачно

Питање 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: Изабери тачан одговор:

  • На сваких 100 милисекунди квадрат се помера за 10 пиксела на десно
  • Нетачно
  • На сваких 100 милисекунди квадрат се помера за 10 пиксела на доле
  • Нетачно
  • На сваких 100 милисекунди правоугаоник (висине 50 пиксела) постаје за 10 пиксела шири
  • Нетачно
  • На сваких 100 милисекунди квадрат се помера за 10 пиксела на лево
  • Тачно

Питање 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.

Означи тачна тврђења.

    Q-309: Изабери тачан одговор:

  • Током паузе у извршавању програма позивом функције pygame.time.wait() није могућа регистрација догађаја.
  • Нетачно
  • Током паузе у извршавању програма позивом функције pygame.time.wait() није могућа реакција на догађаје.
  • Тачно
  • Позивом функције pygame.time.wait() се ствара нови догађај.
  • Нетачно
  • Функција pygame.time.wait() се не може извршити уколико постоје необрађени догађаји који су се десили пре позива функције.
  • Нетачно
  • Функција pygame.time.wait() нема утицаја на стварање и обраду догађаја, већ само паузира све реакције на догађаје, тј. њихову обраду.
  • Тачно

Питање 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: Изабери тачан одговор:

  • if x + 2 > sirina
  • Нетачно
  • if x + 100 > sirina
  • Нетачно
  • if x + 102 > sirina
  • Нетачно
  • Ниједан од понуђених одговора није тачан.
  • Тачно

Питање 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: Изабери тачан одговор:

  • if а + 5 < sirina:
  • Нетачно
  • if а + 150 < sirina:
  • Нетачно
  • if а < sirina:
  • Нетачно
  • if а - 145 < sirina:
  • Тачно

Питање 14.

Нека се круг полупречника r са центром у (x, y) помера за по dy пиксела на горе. Услов да је цео круг прошао кроз горњу ивицу екрана гласи:

    Q-312: Изабери тачан одговор:

  • y + r < 0
  • Тачно
  • y - r < 0
  • Нетачно
  • y < 0
  • Нетачно
  • y - dy < 0
  • Нетачно

Питање 15.

Нека су димензије дате слике sl_sirina и sl_visina, а њен горњи леви угао (x, y). Како проверавамо да ли је слика у потпуности прошла кроз леву ивицу прозора и више се не види ни један њен део?

    Q-313: Изабери тачан одговор:

  • if x < 0:
  • Нетачно
  • if y + sl_visina < 0:
  • Нетачно
  • if x + sl_sirina < 0:
  • Тачно
  • if y < 0:
  • Нетачно

Питање 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: Изабери тачан одговор:

  • x = sirina-r
  • Нетачно
  • dx = -dx
  • Тачно
  • x = r
  • Нетачно
  • dx = -2
  • Нетачно

Питање 17.*

Означи тачна тврђења.

    Q-315: Изабери тачан одговор:

  • Извршавањем 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() се не зауставља рад програма.
  • Тачно
  • Када се користи тајмер реакција на догађај који је створио тајмер мора да буде исцртавање нове слике.
  • Нетачно

Питање 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()

Које од наредних команди и у ком редоследу треба додати на означено место да би програм радио како је очекивано?

  1. pg.display.update()
    
  2. treba_crtati = True
    
  3. treba_crtati = False
    

    Q-316: Изабери тачан одговор:

  • 1) па 2)
  • Нетачно
  • 1) па 3)
  • Нетачно
  • 2)
  • Нетачно
  • 1) и 2) у било ком редоследу
  • Нетачно
  • 1) и 3) у било ком редоследу
  • Тачно

Питање 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 програмска сегмента можемо да убацимо на означено место, да би програм радио према очекивању?

  1. 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)
    
  2. 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
    
  3. 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
    
  4. 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: Изабери тачан одговор:

  • Сегмент 1
  • Тачно
  • Сегмент 2
  • Тачно
  • Сегмент 3
  • Тачно
  • Сегмент 4
  • Тачно

Питање 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()

Предложене су две допуне програма на месту тачкица:

  1. if dogadjaj.type == pg.QUIT:
      kraj = True
    elif dogadjaj.type == pg.USEREVENT:
      treba_crtati = True
    
  2. if dogadjaj.type == pg.USEREVENT:
      treba_crtati = True
    elif dogadjaj.type == pg.QUIT:
      kraj = True
    

Дате допуне програма се разликују у редоследу испитивања да ли је неки догађај наступио.

Да ли се за један исти редослед одигравања догађаја тајмера и затварања прозора може десити да се две верзије програма различито понашају?

    Q-318: Изабери тачан одговор:

  • Да. Догађаји се обрађују редоследом којим се испитују. Верзија 1) увек прво одбрађује догађај искључивања прозора, што значи да у појединим сценаријима може игнорисати догађај pg.USEREVENT који се десио пре pg.QUIT.
  • Нетачно
  • Не. Догађаји се обрађују редоследом којим су се десили. Редослед испитивања који је догађај наступио не утиче на редослед обраде догађаја.
  • Тачно
  • Верзија 2) неће радити због погрешног редоследа испитивања услова. Догађај pg.QUIT мора бити први испитан.
  • Нетачно