22. час_Библиотека Пајгејм. Инсталација и покретање библиотеке Пајгејм

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

22. час_Инф. 7. разред_Библиотека Пајгејм.

Инсталација и покретање библиотеке Пајгејм

Библиотека PyGame
Многој деци је приликом првог сусрета са језиком Python најинтересантније да раде са
корњачином графиком.
Подршка за тај облик цртања доступна је директно кроз стандардну библиотеку језика Python.
Ове године ћемо наставити у том смеру и упознаћемо се са једном графичком библиотеком која је
доста напреднија од корњачине графике.
У питању је библиотека PyGame, која, како јој име каже, служи за програмирање игара помоћу
језика Python.
Програмирање чак и најзахтевнијих игара подразумева озбиљно програмерско знање и зато ћемо
се ове године задржати само на веома једноставним примерима.
Ипак, ако ти се оно што ове године будеш радио/радила допадне, препоручујемо ти да наставиш да
учиш PyGame и да покушаш да унапредиш своје вештине тако да можеш да направиш и неку мало
озбиљнију игру.

Инсталација библиотеке PyGame


Да би на твом рачунару било могуће покретати програме који су написани уз коришћење
библиотеке PyGame, потребно ју је претходно инсталирати.
Предуслов је, наравно, да на рачунару имаш инсталиран Python (пожељно је верзију 3.6 или
новију).
Ако то до сада ниси урадио/урадила, онда прво посети сајт https://www.python.org и са њега
преузми најновију верзију језика Python и окружења за рад са њим (оне се обично налазе у секцији
Downloads, у секцији посвећеној оперативном систему који користиш).
Ако са овим имаш проблема, потражи помоћ од неког старијег (најбоље наставника).

Када је на рачунар инсталиран Python, можемо прећи на инсталацију библиотеке PyGame.

То је заиста веома једноставно. Довољно је да у командној линији откуцаш pip3 install pygame.
Командну линију покрећеш најлакше тако што држећи тастер windows притиснеш тастер r и онда
откуцаш cmd. Уколико добијеш поруку да команда pip3 не постоји,
онда пробај са py -3 -m pip install pygame.

Када извршиш инсталацију, најбоље је да одмах тестираш да је све протекло како треба тако што
ћеш:
 покренути Python развојно окружење IDLE које је инсталирано као windows апкикација
 у развојном окружењу IDLE отворити нови пројекат (opcija File/New)
 у едитору који се појави откуцати програм који је приказан даље у тексту (можеш одатле да
га ископираш и само налепиш у едитор окружења IDLE)
 снимити програм у датотеку пре покретања (опција File/Save as…)
 покренути програм (опција Run/Run Module тј. F5 на тастатури)
Након покретања програма треба да се појави прозор у којем је нацртан један квадрат и који стоји
приказан три секунде.
Програм за проверу исправности инсталације библиотеке PyGame:

import pygame
pygame.init()
prozor = pygame.display.set_mode((200, 200))
prozor.fill(pygame.Color("white"))
pygame.draw.rect(prozor, pygame.Color("black"), (20, 20, 160, 160), 5)
pygame.display.update()
pygame.time.wait(3000)
pygame.quit()

Библиотека PygameBg
Програмски кôд на почетку и на крају програма може се прилично скратити ако се користи
библиотека PyGameBg (PyGame Toolbox for Beginners by Petlja) и ми ћемо је интензивно користити у
раду на порталу Petlja.org.
Њу веома једноставно можеш инсталирати на свом рачунару навођењем команде

pip3 install pygamebg

у командном прозору свог оперативног система.

Ако случајно претходна команда не ради, можеш пробати команду

py -3 -m pip install pygamebg

Након инсталације провери да ли је све у реду тако што ћеш покренути наредни програм у
окружењу IDLE.

Програм за проверу исправности инсталације библиотеке PyGameBg:

import pygame as pg, pygamebg


prozor = pygamebg.open_window(200, 300, "PyGameBg")
prozor.fill(pg.Color("white"))
pg.draw.rect(prozor, pg.Color("black"), (20, 20, 160, 160), 5)
pygamebg.wait_loop()
Цртање
Незаобилазни део сваког PyGame програма је цртање по екрану.
PyGame омогућава корисницима да цртају различите облике (дужи, правоугаонике, кругове, елипсе,
многоуглове, кружне лукове и слично). Сви они могу бити обојени различитим бојама.
Поред тога могуће је на екранима приказивати и слике (учитане из png или jpg датотека), а могуће
је исписивати и текст (коришћењем различитих фонтова).
Наш задатак је да се прво упознамо са основном структуром PyGame програма у којима ћемо
вршити цртање, а да се затим упознамо са начином на који се цртају различити облици (некада
кажемо да су то различите графичке примитиве).

Час 1 - координате, боје, дужи


Основна структура PyGame програма уз библиотеку PyGameBg
Сви PyGame програми имају неколико незаобилазних корака.
Програм садржи:
- део кода који отвара прозор у ком се програм извршава (задају се његове димензије и наслов),
део кода у којем се исцртава неки садржај на прозору,
- део кода који анализира и реагује на акције које корисник извршава (мишем или тастатуром) и
- део кода који на крају програма искључује прозор.

Програмски кôд на почетку и на крају програма се може прилично скратити ако се користи
библиотека PyGameBg (PyGame Toolbox for Beginners by Petlja).
Када се ова библиотека користи, довољно је да на почетку позовеш функцију за отварање
прозора pygamebg.open_window којој наводиш редом ширину, висину и наслов прозора (два
природна броја и ниску), а да на крају програма позовеш функцију pygamebg.wait_loop() којом
проузрокујеш да се цртеж прикаже у прозору и да прозор остане приказан све док га корисник не
искључи.
Уз коришћење ове библиотеке, наш први програм се може написати на следећи начин:

import pygame as pg
import pygamebg

#otvaramo prozor
(sirina , visina) = (400 , 400)
prozor = pygamebg.open_window(sirina, visina, “Pygame“)

# bojimo pozadinu prozora u belo


prozor.fill(pg.Color("white"))

# crtamo crnu duž od tačke (100, 100) do tačke (300, 300) debljine 5
pg.draw.line(prozor, pg.Color("black"), (100, 100), (300, 300), 5)

# prikazujemo prozor i cekamo da ga korisnik isključi


pygame.wait_loop( )
Ако радиш на Петљи, сви помоћни делови кода ће бити унапред припремљени, биће приказани
сивом бојом и ти не треба ни да их анализираш, нити да их мењаш.

Ако радиш на свом локалном рачунару (на пример, у окружењу Python IDLE), тада не мораш да
крећеш од празног програма, већ нови програм можеш започети тако што са Петље ископираш
наредни програм и онда измениш само његов централни („бели”) део (који тренутно садржи само
наредбе prozor.fill и pg.draw.line).

Након копирања нећеш видети да је део кода сиве боје – већ ћеш просто добити цео код, али сам ја
– наставник –оставио овде у примеру део који је сив.

import pygame as pg
import pygamebg

# otvaramo prozor
(sirina, visina) = (400, 400)
prozor = pygamebg.open_window(sirina, visina, "Pygame")

# bojimo pozadinu prozora u belo


prozor.fill(pg.Color("white"))

# crtamo crnu duž od tačke (100, 100) do tačke (300, 300) debljine 5
pg.draw.line(prozor, pg.Color("black"), (100, 100), (300, 300), 5)

# prikazujemo prozor i čekamo da ga korisnik isključi


pygamebg.wait_loop()
Координатни систем
Положај свих објеката (тачака, дужи, кругова и слично) на прозору одређује се њиховим
координатама у координатом систему прозора, који је сличан, али ипак мало другачији у односу на
онај са којим си се срео/срела у математици. Положај тачке је и у овом случају одређен уређеним
паром њених координата (координатом x тј. апсцисом и координатом y тј. oрдинатом).
Јединица мере је један пиксел.
Координатни почетак је овде постављен у горњем левом углу прозора.
Координата x и овде расте када се крећемо на десно,
али координата y опада када се крећемо на горе, односно повећава се када се крећемо на доле,
што је другачије у односу на координатни систем који нам је познат од раније.

Нека је дата тачка A(5,3).


Ако бисмо подигли (транслирали) ову тачку за 1 на горе и задржали њену x координату, тада би
нове координате тачке A биле A(5,2).
Ако бисмо тачку A са тренутне позиције померили (транслирали) на доле за 2 нове координате би
јој биле A(5,4).
Дакле, прва координата тачке одређује колико је тачка удаљена од леве ивице прозора, а
друга координата колико је тачка удаљена од горње ивице прозора.
Задавање боја
Све облике можеш цртати у различитим бојама. Боју можеш добити на основу имена које се наводи
као параметар функције pg.Color. Moжеш користити већ готове боје навођењем одговарајуће
ниске: 'black' за црну, 'white' за белу, 'gray' за сиву, 'blue' за плаву, 'green' за
зелену, 'orange' за наранџасту, 'yellow' за жуту и слично.
Подсетимо се, ниске се наводе било између једноструких, било између двоструких наводника
(равноправно се, на пример, могу користити 'blue' и "blue").
На пример, ако позовеш
функцију py.draw.line(prozor, pg.Color('blue'), (0, 0), (200, 200), 3) на прозору ће се
приказати дуж плаве боје чија су темена тачке са координатама (0,0) и (200,200) дебљине 3 пиксела.

Наведимо имена основних боја које ћемо користити у нашим програмима.


pg.Color("black") Црна
pg.Color("white") Бела
pg.Color("red") Црвена
pg.Color("green") Зелена
pg.Color("blue") Плава
pg.Color("cyan") Reзеда
pg.Color("magenta") Љубичаста
pg.Color("yellow") Жута
pg.Color("orange") Наранџаста

Прозор се боји коришћењем функције prozor.fill чији је једини параметар боја.

import pygame as pg
import pygamebg

# otvaramo prozor
(sirina, visina) = (400, 400)
prozor = pygamebg.open_window(sirina, visina, "Боја позадине")

# bojimo pozadinu prozora


prozor.fill(pg.Color("???"))

# prikazujemo prozor i čekamo da ga korisnik isključi


pygamebg.wait_loop()

Примери: Ако уместо знака ??? унесемо неке називе боја добићемо

prozor.fill(pg.Color("green")) prozor.fill(pg.Color("red")) prozor.fill(pg.Color("yellow"))


Једна грешка коју можеш направити приликом задавања боје је да уместо да
pg.Color напишеш великим словом, напишеш pg.color малим словом.

Тада ће ти се приказати грешка AttributeError: '' object has no attribute 'color'.

Још једна грешка је да назив боје не наведеш под наводницима (на пример, да
наведеш pg.Color(white)).

Тада ће ти се приказати порука NameError: name 'white' is not defined on line 8.

Можда ћеш пожелети да поред основних боја, које се могу добити на основу њиховог имена,
самостално дефинишеш неку своју боју тј. нијансу.

То можеш најлакше урадити коришћењем модела боје RGB (енгл. red-green-blue).

Светло било које боје се може добити комбиновањем светла црвене (Red), зелене (Green) и плаве
(Blue) боје.
На пример, комбиновањем црвеног и зеленог светла добија се жуто светло, комбиновањем црвеног
и плавог љубичасто, а комбиновањем плаве и зелене добијамо резедо боју.
Комбиновањем светла све три основне боје добија се бело светло док се црно светло добија када
се сва три светла искључе. Сиво светло се добија када се измеша подједнака количина, црвеног,
зеленог и плавог светла.
Боју тако можемо описати наводећи три броја (у овом случају то су бројеви од 0 до 255), који редом
представљају количину црвене, зелене и плаве компоненте у боји коју дефинишемо.
У програмском језику Python боју, дакле, можеш представити и тројком бројева и то у облику трочлане
уређене торке (нпр. (123, 80, 56)) или трочлане листе (нпр. [123, 80, 56]).
Торку или листу можеш навести директно као аргумент функције који одговара боји, а можеш је упамтити у
променљивој и касније користити више пута.
На пример, доделом REZEDO = (0, 255, 255) дефинишемо резедo боју (каже се и тиркизна или цијан)
наводећи одговарајуће количине црвене, зелене и плаве светлости коју ова боја садржи (пошто је то
мешавина плаве и зелене боје у њој нема нимало црвене, а плава и зелена компонента су на максимуму).
Након тога, ту боју можемо употребити и у позиву функције (нпр. prozor.fill(REZEDO)).
Имена тих променљивих не морају бити написана великим словима, али то је добар обичај.

Резимирајмо сада RGB вредности неких карактеристичних боја.


(255, 0, 0) црвена
(0, 255, 0) зелена
(0, 0, 255) плава
(255, 255, 0) жута
(0, 255, 255) резедo
(255, 0, 255) љубичаста
(255, 255, 255) бела
(0, 0, 0) црна
(128, 128, 128) сива
(255, 128, 0) наранџаста
(255, 128, 128) розе

Приметимо да се жута боја добија мешањем црвене и зелене, љубичаста мешањем црвене и плаве, а резедo
мешањем зелене и плаве.
Нијансе сиве боје су препознатљиве по томе што је у њима количина црвене, зелене и плаве једнака (на
основу тога можемо сматрати да су црна и бела екстремно тамна и екстремно светла нијанса сиве).

Пробај да уносиш и друге комбинације вредности између 0 и 255.

import pygame as pg
import pygamebg

# otvaramo prozor
(sirina, visina) = (400, 400)
prozor = pygamebg.open_window(sirina, visina, "Боје - RGB")

# bojimo pozadinu prozora


prozor.fill([???, ???, ???])

# prikazujemo prozor i čekamo da ga korisnik isključi


pygamebg.wait_loop()
# bojimo pozadinu prozora

prozor.fill([255, 0, 0]) prozor.fill([0, 255, 0]) prozor.fill([0, 0, 255])

Цртање дужи
Све функције за цртање у библиотеци Pygame почињу са py.draw.
Прво ћемо се позабавити цртањем дужи. Дуж AB се црта позивом функције pg.draw.line.
Већ смо видели пример позива
pg.draw.line(prozor, pg.Color("black"), (100, 100), (300, 300), 5).

Дакле, врши се позив облика pg.draw.line(prozor, boja, teme1, teme2, debljina).

Ова функција има пет параметара који се наводе у загради.


Први параметар је прозор на коме желимо да нацртамо дуж (он се подешава унутар „сивог” кода и
увек ће се звати ваш prozor).
Други параметар је боја.
Наредни параметри су координате почетног темена дужи (на слици је то тачка А) и крајњег темена
дужи (тачка B).
Последњи параметар је дебљина линије којом се исцртава дуж, задата у пикселима.
Задатак: Слово А

Напиши програм који помоћу три дужи исцртава слово A.

Циљ овог задатка је да утврдимо наше сналажење у координатном систему.


За цртање слова A потребно је исцртати три дужи (леву косу линију, десну косу линију и
хоризонталну црту).
Величина прозора је 200×200и о овоме би требало водити рачуна приликом одређивања
координата тачака које представљају темена дужи.
Спајањем одговарајућих тачака, формирају се дужи.

Приметимо да смо у решењу увели променљиву debljina да бисмо дебљину обе линије могли да
контролишемо само на једном месту.
Ова променљива је постављена (иницијализована) на почетку на 10 (наредбом
доделе debljina = 10) и променом вредности ове променљиве мења се дебљина све три дужи које
чине наше слово.
И у наредним програмима ћемо уводити помоћне променљиве које ће нам помоћи да лакше
пишемо и прилагођавамо наше програме.
import pygame as pg
import pygamebg

# otvaramo prozor
(sirina, visina) = (200, 200)
prozor = pygamebg.open_window(sirina, visina, "Слово А")

# bojimo pozadinu prozora u sivo


prozor.fill(pg.Color("gray"))

# debljina linije
debljina = 10

# leva kosa linija


pg.draw.line(prozor, pg.Color("white"), (50, 150), (100, 50), debljina)

# desna kosa linija


pg.draw.line(prozor, pg.Color("white"), ???, ???, debljina)

# horizontalna linija po sredini


pg.draw.line(prozor, pg.Color("white"), ???, ???, debljina)

# prikazujemo prozor i čekamo da ga korisnik isključi


pygamebg.wait_loop()

Унеси одговарајуће координате – уређене парове, уместо знака ???, ???, тако да се извршавањем програма исцрта
слово А:

Решење:

# desna kosa linija


pg.draw.line(prozor, pg.Color("white"), (100,50), (150,150), debljina)

# horizontalna linija po sredini


pg.draw.line(prozor, pg.Color("white"), (75,100), (125,100), debljina)

You might also like