$$ \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.

Претпоставимо да смо дефинисали функцију obradi_dogadjaj и навели је у позиву функције pygamebg.frame_loop

def obradi_dogadjaj(dogadjaj):
    ...

pygamebg.frame_loop(30, nov_frejm, obradi_dogadjaj)

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

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

  • У функцији obradi_dogadjaj морамо да одреагујемо на сваки догађај који може да стигне до ове функције
  • Нетачно
  • У функцији obradi_dogadjaj можемо да одреагујемо на догађаје који нас интересују
  • Тачно
  • Ако у функцији obradi_dogadjaj не одреагујемо на неки догађај који је прослеђен функцији, тај догађај ће бити поново прослеђиван док не одреагујемо на њега.
  • Нетачно

Питање 2.

Нека је дат следећи програм.

import pygame as pg, pygamebg
prozor = pygamebg.open_window(300, 300, "")

def nov_frejm():
    pass

def obradi_dogadjaj(dogadjaj):
    if dogadjaj.type == pg.KEYDOWN:
        prozor.fill(pg.Color("white"))
        pg.draw.rect(prozor, pg.Color("yellow"), (50, 50, 200, 100))

pygamebg.frame_loop(30, nov_frejm, obradi_dogadjaj)

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

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

  • Да би био приказан жути правоугаоник, неопходно је да корисник притисне тастер са стрелицом на доле.
  • Нетачно
  • Уколико корисник притисне било који тастер биће приказан жути правоугаоник.
  • Тачно
  • Прозор неће моћи да буде затворен док корисник не покрене догађај pg.KEYDOWN.
  • Нетачно

Питање 3.

Ако држимо притиснут неки тастер тастатуре (и нисмо претходно мењали подразумевани начин генерисања догађаја тастатуре)

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

  • Догађај pygame.KEYDOWN се једном прослеђује функцији за обраду догађаја и то приликом спуштања тастера
  • Тачно
  • Догађај pygame.KEYDOWN се за то време стално прослеђује функцији за обраду догађаја
  • Нетачно
  • Систем може да пропусти да проследи догађај pygame.KEYDOWN ако је био заузет у тренутку притиска на тастер
  • Нетачно

Питање 4.

Који догађаји настају када „откуцамо” неко слово на тастатури?

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

  • pygame.CLICKED
  • Нетачно
  • pygame.KEYDOWN
  • Тачно
  • pygame.KEYPRESSED
  • Нетачно
  • pygame.KEYUP
  • Тачно

Питање 5.*

Ако је реакција на догађаје дефинисана наредним кодом, шта је потребно да корисник уради да би плави круг био видљив?

def obradi_dogadjaj(dogadjaj):
    if dogadjaj.type == pg.KEYDOWN:
        pg.draw.circle(prozor, pg.Color("blue"), (200, 200), 100)
    elif dogadjaj.type == pg.KEYUP:
        pg.draw.circle(prozor, pg.Color("red"), (200, 200), 100)

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

  • Плави круг ће постати и остати видљив након првог притиска на било који тастер.
  • Нетачно
  • Плави круг не може бити видљив, јер одмах по исцртавању бива прецртан црвеним кругом.
  • Нетачно
  • Плави круг ће бити видљив онолико дуго колико је тастер притиснут.
  • Тачно

Питање 6.*

Дата је функција за обраду догађаја:

def obradi_dogadjaj(dogadjaj):
    if dogadjaj.type == pg.KEYDOWN:
        pg.draw.circle(prozor, pg.Color("blue"), (200, 200), 100)
    pg.draw.circle(prozor, pg.Color("red"), (200, 200), 100)

Које тврђење је тачно?

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

  • Плави круг ће постати и остати видљив након првог клика било ког тастера.
  • Нетачно
  • Плави круг не може бити видљив, јер одмах по исцртавању бива прецртан црвеним кругом.
  • Тачно
  • Плави круг ће бити видљив онолико дуго колико је тастер притиснут.
  • Нетачно

Питање 7.

Којим од понуђених линија кода се врши провера да ли је притиснут тастер слова A?

  1. if (dogadjaj.type == pygame.KEYDOWN) and (dogadjaj.key == pygame.K_a):
    
  2. if (dogadjaj.type == pygame.KEYDOWN) or (dogadjaj.key == pygame.K_a):
    
  3. if (dogadjaj.type == pygame.K_a):
    

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

  • 1
  • Тачно
  • 2
  • Нетачно
  • 3
  • Нетачно

Питање 8.*

Означи које од наредби је потребно у PyGame програму навести да би током његовог извршавања догађај био исправно регистрован.

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

  • import pygame
  • Тачно
  • pygame.display.update()
  • Нетачно
  • pygame.display.set_mode()
  • Тачно
  • prozor.fill()
  • Нетачно
  • pygame.init()
  • Тачно

Питање 9.

Догађај затварања прозора је у PyGame библиотеци означен са:

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

  • pygame.QUIT
  • Тачно
  • pygame.EXIT
  • Нетачно
  • pygame.CLOSE
  • Нетачно

Питање 10.

Позивом функције pygame.event.wait() се зауставља рад програма на 1 секунду.

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

  • да
  • Нетачно
  • не
  • Тачно

Питање 11.

Функција pygame.event.wait() враћа информацију о томе који се догађај десио.

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

  • да
  • Тачно
  • не
  • Нетачно

Питање 12.

Уколико се до позива функције pygame.event.wait() десило више догађаја који нису обрађени функција ће вратити информацију о последњем.

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

  • да
  • Нетачно
  • не
  • Тачно

Питање 13.

Уколико у тренутку позива pygame.event.wait() нема необрађених догађаја функција даје поруку о грешци.

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

  • да
  • Нетачно
  • не
  • Тачно

Питање 14.

Уколико у тренутку позива pygame.event.wait() нема необрађених догађаја рад програма се зауставља до првог наредног догађаја.

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

  • да
  • Тачно
  • не
  • Нетачно

Питање 15.**

Који од програма ће при покретању радити све док корисник не затвори прозор?

  1. import pygame as pg
    pg.init()
    prozor = pg.display.set_mode((300, 300))
    prozor.fill(pg.Color("white"))
    pg.draw.rect(prozor, pg.Color("red"), (50, 50, 200, 100))
    pg.display.update()
    pg.quit()
    
  2. import pygame as pg
    pg.init()
    prozor = pg.display.set_mode((300, 300))
    prozor.fill(pg.Color("white"))
    pg.draw.rect(prozor, pg.Color("red"), (50, 50, 200, 100))
    pg.display.update()
    while pg.event.wait().type == pg.QUIT:
      pass
    pg.quit()
    
  3. import pygame as pg
    pg.init()
    prozor = pg.display.set_mode((300, 300))
    prozor.fill(pg.Color("white"))
    pg.draw.rect(prozor, pg.Color("red"), (50, 50, 200, 100))
    pg.display.update()
    if pg.event.wait().type != pg.QUIT:
      pass
    
  4. import pygame as pg
    pg.init()
    prozor = pg.display.set_mode((300, 300))
    prozor.fill(pg.Color("white"))
    pg.draw.rect(prozor, pg.Color("red"), (50, 50, 200, 100))
    pg.display.update()
    while pg.event.wait().type != pg.QUIT:
      pass
    pg.quit()
    

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

  • 1
  • Нетачно
  • 2
  • Нетачно
  • 3
  • Нетачно
  • 4
  • Тачно

Питање 16.*

Следећа недовршена функција за обраду догађаја треба да провери да ли је кликнуто мишем на правоугаону слику димензија w_sl x h_sl, са горњим левим теменом у тачки (x_sl, y_sl).

def obradi_dogadjaj(dogadjaj):
    global __________ # А
    if dogadjaj.type == __________: # B
        x_mis, y_mis = __________ # C
        if (x_sl < x_mis and x_mis < x_sl + w_sl and
                __________): # D
            kliknuto_na_sliku = True

Делови који недостају функцији су набројани у наставку. Упиши редне бројеве делова који недостају функцији у редоследу у ком их треба убацити на места A, B, C, D редом (дакле, прво редни број дела који треба убацити на место A, итд.)

  1. pg.MOUSEBUTTONDOWN
    
  2. y_sl < y_mis and y_mis < y_sl + h_sl
    
  3. kliknuto_na_sliku
    
  4. dogadjaj.pos
    

Одговор:

Питање 17.*

Нека je sl слика коју програм у сваком фрејму приказује на позицији (x_sl, y_sl), а w_sl и h_sl нека су редом ширина и висина те слике.

def nov_frejm():
    prozor.fill(pg.Color("skyblue"))
    prozor.blit(sl, (x_sl, x_sl))

Шта нам омогућава следећа функција за обраду догађаја?

def obradi_dogadjaj(dogadjaj):
    global x_sl, y_sl, w_sl, h_sl, pr
    if dogadjaj.type == pg.MOUSEBUTTONDOWN:
        x_mis, y_mis = dogadjaj.pos
        if (x_sl < x_mis and x_mis < x_sl + w_sl and
                y_sl < y_mis and y_mis < y_sl + h_sl):
            pr = True
    elif dogadjaj.type == pg.MOUSEBUTTONUP:
        pr = False
    elif dogadjaj.type == pg.MOUSEMOTION:
        if pr:
            x_sl = x_mis - w_sl // 2
            y_sl = y_mis - h_sl // 2

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

  • Да променимо слику када корисник кликне на њу
  • Нетачно
  • Да престанемо да приказујемо слику када корисник кликне на њу
  • Нетачно
  • Да превлачимо мишем слику по прозору
  • Тачно
  • Да преврнемо слику наопако када корисник кликне на њу.
  • Нетачно