Kasulikke näpunäiteid

Veebi algus

Pin
Send
Share
Send
Send


See on Pygame Game Developmenti õpetussarja esimene osa. See on mõeldud algajatele ja programmeerijatele, kes on huvitatud mängude loomisest ja enda kodeerimisoskuste parandamisest Pythonis.

Tundides olev kood oli kirjutatud Python 3.7 ja Pygame 1.9.6

Mängutsükkel

Iga mängu keskmes on tsükkel, mida tavaliselt nimetatakse "mängutsükliks". See algab uuesti ja uuesti, tehes kõik, et mäng toimiks. Mängu iga tsükkel on nn üle.

Igas kaadris juhtub palju asju, kuid need võib jagada kolme kategooriasse:

  1. Sisendi töötlemine (sündmused)

See puudutab kõike, mis toimub väljaspool mängu - sündmusi, millele ta peab reageerima. See võib olla klaviatuuri klahvivajutused, hiireklõpsud ja nii edasi.

  1. Mängu värskendus

Kõigi muutmine, mis peab muutuma ühes kaadris. Kui tegelane on õhus, peaks gravitatsioon teda alt vedama. Kui kaks objekti kohtuvad suure kiirusega, peavad need plahvatama.

  1. Renderdamine (renderdamine)

Selles etapis kuvatakse ekraanil kõik: taustad, märgid, menüüd. Kõik, mida mängija peaks nägema, kuvatakse ekraanil õiges kohas.

Aeg

Mängutsükli teine ​​oluline aspekt on selle kiirus. Paljud on ilmselt tuttavad terminiga FPS, mis tähistab kaadreid sekundis (või kaadreid sekundis). See näitab, mitu korda tsüklit tuleks korrata ühe sekundiga. On oluline, et mäng ei oleks liiga aeglane ega kiire. Samuti on oluline, et mäng ei töötaks erinevatel arvutitel erineva kiirusega. Kui märk vajab ekraani ületamiseks 10 sekundit, peaksid need 10 sekundit olema kõigis arvutites ühesugused.

Pygame'i malli loomine

Nüüd, teades, millistest elementidest mäng koosneb, saate alustada koodi kirjutamist. Alustuseks peaksite looma kõige lihtsama pügameprogrammi, mis lihtsalt avab akna ja käivitab mänguahela. See on kõigi pygame-projektide lähtepunkt.

Programmi alguses peate importima vajalikud teegid ja määrama mängu sätete põhimuutujad:

Järgmisena peate avama mänguakna:

pygame.init () on käsk, mis käivitab pygame. ekraan - programmi aken, mis luuakse, kui seadsime selle suuruse seadetes. Järgmisena peate looma kella, et veenduda, kas mäng töötab antud kaadrisagedusega.

Nüüd peate looma mängusilmuse:

Mängusilm on mõnda aega kasutatav muutuja juhitav silmus. Kui peate mängu lõpule viima, peate lihtsalt muutma jooksvaks väärtuseks vale. Selle tulemusel tsükkel lõpeb. Nüüd saate iga jaotise täita põhikoodiga.

Renderdamise (renderdamise) sektsioon

Alustame loosimisest. Märke veel pole, nii et ekraani saab täisvärviliselt täita. Selleks peate mõistma, kuidas arvuti värve töötleb.

Arvutiekraanid on valmistatud pikslitest, millest igaüks sisaldab 3 elementi: punane, roheline ja sinine. Piksli värvi määrab iga elemendi põlemine:

Kõigil kolmel põhivärvil võib olla väärtus vahemikus 0 (väljas) kuni 255 (100% sisse lülitatud), seega on iga elemendi jaoks 256 suvandit.

Arvuti kuvatavate värvide koguarvu saate teada korrutades:

Nüüd, teades värvide toimimist, saate need programmide alguses seada:

Ja pärast seda - täitke kogu ekraan.

Kuid sellest ei piisa. Arvutiekraan ei tööta niimoodi. Piksli muutmine tähendab käsu edastamist videokaardile, nii et see edastab vastava käsu ekraanile. Arvutistandardite järgi on see väga aeglane protsess. Kui peate ekraanile joonistama palju asju, võtab see palju aega. Seda saab fikseerida algsel viisil, mida nimetatakse kahekordseks puhverdamiseks. See kõlab ebaharilikult, kuid siin see on.

Kujutage ette, et teil on kahepoolne laud, mida saate pöörata, näidates kas ühte või teist külge. Üks on ekraan (mida mängija näeb) ja teine ​​jääb varjatuks, ainult arvuti suudab seda "näha". Iga kaadri korral toimub renderdamine tahvli tagaküljel. Kui joonistamine on lõpule jõudnud, pöörleb tahvel ja mängijale näidatakse selle sisu.

See tähendab, et renderdamisprotsess toimub üks kord kaadri kohta, mitte aga iga elemendi lisamisel.

Pügameerimisel juhtub see automaatselt, kui joonis on valmis. Seda käsku nimetatakse flip ():

Peaasi, et funktsioon flip () lõppeks. Kui proovite pärast rotatsiooni midagi joonistada, ei kuvata seda sisu ekraanil.

Sisestusosa (sündmused)

Mängu veel pole, seega on raske öelda, milliseid nuppe või muid juhtnuppe vaja läheb. Kuid peate üles seadma ühe olulise sündmuse. Kui proovite programmi nüüd käivitada, saab selgeks, et akent pole võimalik sulgeda. Risti klõpsamiseks ülanurgas ei piisa. See on ka sündmus ja on vaja programmi teavitada, et see seda loeks ja vastavalt mängu sulgeks.

Üritusi juhtub kogu aeg. Mis saab siis, kui mängija vajutab renderdamise ajal hüppenuppu? Seda ei saa tähelepanuta jätta, vastasel juhul peab mängija pettuma. Selleks salvestab pygame kõik sündmused, mis on toimunud pärast viimast kaadrit. Isegi kui mängija lööb nuppe, ei jäta te ühtegi neist ilma. Koostatakse nimekiri ja for-loop abil saate need kõik läbi käia.

Pygamel on palju sündmusi, millele ta suudab reageerida. pygame.QUIT - sündmus, mis algab pärast risti klikkimist ja edastab jooksvale muutujale vale väärtuse, mille tulemusel mänguliin lõppeb.

FPS-i juhtimine

Siiani pole jaotisesse Uuendamine midagi panna, kuid peate veenduma, et FPS-i säte kontrollib mängu kiirust. Seda saab teha järgmiselt:

Tick ​​() käsk küsib pygame'ilt, kui kaua tsükkel võtab, ja teeb seejärel pausi, et tsükkel (kogu kaader) võtab aega. Kui seate väärtuseks FPS 30, tähendab see, et ühe kaadri pikkus on 1/30, see tähendab 0,03 sekundit. Kui koodisilm (värskendamine, renderdamine jne) võtab aega 0,01 sekundit, siis teeb Pygame pausi 0,02 sekundit.

Lõpuks peate veenduma, et kui mängutsükkel lõpeb, mänguaken sulgub. Selleks pange aasta lõpuks funktsioon pygame.quit (). Lõplik pygame'i mall näeb välja selline:

Hooray! Teil on toimiv pygame-mall. Salvestage see sõbraliku nimega faili, näiteks pygame_template.py, et saaksite seda kasutada iga uue pügameprojekti loomisel.

Järgmises juhendis kasutatakse seda malli lähtepunktina ekraanil olevate objektide joonistamise protsessi ja nende liikumise uurimiseks.

Lai valik programme ja erinevaid koolitusvorme

Kaugõppe võimalus, kaugõpe 055-966-10-17

  • Programmeerimine Kaasaegsed keeled ja tehnoloogiad.
  • Personaalarvuti teenus.
  • Arvutivõrgud. Teabe kaitse.
  • Internet. Veebisaitide kavandamine, loomine. Kujundamine, programmeerimine. Tegevjuht, veebisaidi reklaamimine Internetis.
  • Kaasaegsete IT-tehnoloogiate alused.

Meie eelised

  • Meie koolitusprogrammid on suunatud konkreetsele õpilasele. Võite õppida vastavalt ühele teile pakutavast programmist või saate iseseisvalt koostada, kohandada ja kohandada isiklikku koolitusprogrammi. Õpetaja ja konsultant aitavad teil koolitusprogrammi valimisel kursuse materjalides navigeerida.
  • Individuaalne koolitus. Õpetaja viib tunni läbi ainult teie jaoks, keskendudes teie võimetele, eelnevatele teadmistele ja kogemustele, uue materjali tajumise kiirusele.
  • Õpid teile sobival ajal, teile sobival kujul, paindliku klasside ajakava saab valida vastavalt teie võimalustele ja soovidele.
  • Koolitus toimub eemalt. Õppida saate kodus või tööl arvuti taga istudes, kulutamata oma õppekohale reisimise aega.

Mängude arendamine Python 3-s PyGame / # 1 abil - alustamine

Kasulikud lingid:

Enne raamatukoguga tutvumist Pygame tasub tutvuda Pythoni programmeerimiskeelega ise. Pärast põhikursuse läbimist on teil keele süntaksist palju lihtsam aru saada ja selle kursuse jooksul ei teki teil lisaküsimusi.

Keel Python Sellel on palju erinevaid raamatukogusid, mis muudavad selle palju suuremaks ja täiendavad seda igasuguste funktsionaalsustega. Enamikku igavaid ja korduvaid toiminguid, mida koodis teete, saab teha palju lihtsamalt, kui te teaksite seda või seda teeki, mida on tõesti väga-väga palju!

Raamatukogu Pygame See on spetsiaalselt loodud teegi keeles kasutatava liidesega mängude loomiseks Python. Sellel kursusel õpime, kuidas luua lihtsaid 2D-mänge Pythoni keeles (3 versiooni). Loome mängu koos animatsiooni, spritside (pildid), funktsionaalsuse ja graafilise liidesega.

Raamatukogu ise anti välja juba ammu, umbes 2000 aasta. Avaldused kirjutatud Pygame saab turvaliselt töötada nii Androidis kui ka arvutites. Nii saate luua mänge, mis töötavad mitmes seadmes, kuid millel on samal ajal sama kood.

Selle raamatukogu põhjal on juba loodud palju mänge ja rakendusi. Nende ametlikul veebisaidil saate vaadata suurt nimekirja populaarsetest mängudest.

Pygame tuummoodulid

MoodulAmetisse nimetamine
pygame.cdromJuurdepääs CD-draividele ja nende haldamine
pygame.cursorsLaadib kursoripilte
pygame.displayKuva juurdepääs
pygame.drawJoonistab kujundeid, jooni ja punkte.
pygame.eventVäliste sündmuste juhtimine
pygame.fontKasutab süsteemi fonte
pygame.imageLaeb ja salvestab pildi
pygame.joystickKasutab juhtkangid ja muud sarnased seadmed
pygame.keyLoeb klaviatuuri klahvivajutusi
pygame.mixerLaadige alla ja mängige lugusid
pygame.mouseHiire juhtnupud
pygame.movieVideofailide esitamine
pygame.musicTöötab koos muusika ja heli voogesitusega
pygame.overlayJuurdepääs täpsemale videole
pygameSisaldab kõrgetasemelisi Pygame'i funktsioone
pygame.korrektneHaldab ristkülikukujulisi alasid
pygame.sndarrayManipuleerib heliandmeid
pygame.spriteFilmide haldus
pygame.surfaceHaldab pilte ja ekraani
pygame.surfarrayManipuleerib pildi piksli andmeid
pygame.timepygame moodul aja ja kaadrisageduse haldamiseks
pygame.transformPiltide suuruse muutmine ja teisaldamine

PyGame aken

Ühendage PyGame'i teek

Mänguaken: suurus, asukoht

gameScreen = pygame.display.set_mode ((400, 300))

os moodul - akna asukoht

Mängusilm, väljuge mängust

runGame = True # lipp väljub mängust

Sündmuse jälgimine: akna sulgemine

sündmuse jaoks saidil pygame.event.get ():

if event.type == pygame.QUIT: runGame = False

Mängust väljumine: pygame.quit ()

Kujutise üleslaadimine

Moodul pygame.image võimaldab teil faili pildi laadida ja tagastab pinna tüüpi objekti.

pygame.image.load ("failitee")

uue faili laadimine failist

Laadige pilt alla (faili tee Windowsi jaoks)

määrake paigutus

laadige faili laaditud pilti (myImage) sisaldav pinnaobjekt ekraanil kirjeldatud asukohta (myRect)

Rekt Objekt

Pygame kasutab Rect-objekte ristkülikukujuliste alade salvestamiseks ja nendega manipuleerimiseks. Rekti saab luua vasaku, ülemise, laiuse ja kõrguse väärtuste kombinatsioonist. Rect saab luua ka python-objektidest, mis on juba Rect või millel on atribuut nimega "rect".

Rekt (vasak, ülemine, wiph, kõrgus) -> Rect

Rekt ((vasak, ülemine), (pühk, kõrgus)) -> Rect

Rektumeetodid

pygame.Rect.copyTagastab uue ristküliku, millel on originaaliga sama asukoht ja suurus.
pygame.Rect.moveTagastab uue nihutatud nihutatud ristküliku. Argumendid x ja y võivad olla suvalised täisarvud, positiivsed või negatiivsed.
pygame.Rect.move_ipSama nagu meetod Rect.move (), kuid töötab paigas.
pygame.Rect.inflatesuurendage või vähendage paigaldatud ristküliku suurust
pygame.Rect.inflate_ipsuurendage või vähendage paigaldatud ristküliku suurust
pygame.Rect.clampteisaldab ristküliku teise sees
pygame.Rect.clamp_ipliigutab ristküliku teise sees, paigas
pygame.Rect.clipkärpige ristkülik teise sees
pygame.Rect.unionühendab kaks ristkülikut üheks
pygame.Rect.union_ipühendab kaks ristkülikut ühte, oma kohale
pygame.Rect.unionallpaljude ristkülikute liit
pygame.Rect.unionall_ippaljude paigas olevate ristkülikute liit
pygame.Rect.fitmuutke ristküliku suurust ja liigutage seda, võttes arvesse kuvasuhet
pygame.Rect.normaliseeridakohandage negatiivseid suurusi
pygame.Rect.sisaldabkontrollige, kas üks ristkülik asub teises
pygame.Rect.collidepointkontrollige, kas punkt asub ristkülikus
pygame.Rect.colliderectkatsetage, kas kaks ristkülikut ristub
pygame.Rect.collidelistkontrollige, kas loendis vähemalt üks ristkülik ristub
pygame.Rect.collidelistalltee kõik loendis olevad ristkülikud ristuvad
pygame.Rect.collidedictkontrollige, kas üks ristkülik sõnaraamatus ristub
pygame.Rect.collidedictalltee kõik sõnaraamatu ristkülikud ristuvad

Ürituste käsitlemine

Sündmus on see, kuidas Pygame teatab, et midagi juhtus väljaspool programmi koodi. Sündmused luuakse näiteks klaviatuuri, hiire vajutamisega ja pannakse järjekorda, oodates töötlemist.

Mooduli pygame.event funktsioon Hangi tagastab järjekorras ootamise viimase sündmuse ja eemaldab selle järjekorrast.

Sündmuse objekt

sündmusjärjekorra töötlemise moodul

pygame.event.pumpKui te ei kasuta oma mängus muid sündmuste funktsioone, peaksite helistama pygame.event.pump (), et pygame saaks sisemisi toiminguid hallata
pygame.event.getvõtab sündmusi järjekorrast vastu
pygame.event.pollsaada järjekorrast üks sündmus
pygame.event.waitjärjekorrast ühe sündmuse ootamine
pygame.event.peekkontrollige, kas järjekorrad ootavad teatud tüüpi sündmusi
pygame.event.cleareemaldage kõik sündmused järjekorrast
pygame.event.event_nametagastab sündmuse tüübi nime. String on WordCapi stiilis.
pygame.event.set_blockedkontrollib, millised sündmused pole järjekorras lubatud
pygame.event.set_allowedkontrollib, millised sündmused on järjekorras lubatud
pygame.event.get_blockedkontrollige, kas sündmuse tüüp on järjekorrast blokeeritud
pygame.event.set_grabkontrollib sisendseadme jagamist teiste rakendustega
pygame.event.get_grabkontrollige, kas programm töötab andmesisestusseadmetes
pygame.event.postjärjekorda uuele sündmusele
pygame.event.Eventloo uus sündmuse objekt
pygame.event.EventTypePython-objekt esindab SDL-i sündmust. Kohandatud sündmuste esinemisjuhud luuakse sündmuse funktsiooni kutsumisega. EventType'i tüüpi ei saa otse kutsuda. EventType eksemplarid toetavad atribuutide omistamist ja kustutamist.

Pygame jälgib kõiki sündmuste teateid sündmuste järjekorra kaudu. Selle mooduli protseduurid aitavad seda sündmusejärjekorda hallata. Sisestusjärjekord sõltub suuresti pygame-ekraanimoodulist. Kui kuva pole veel lähtestatud ja videorežiimi pole seadistatud, siis sündmuste järjekord ei tööta.

Ürituse järjekorda pääseb mitmel viisil. Lihtsalt kontrollige sündmuste olemasolu ja haarake need otse virnast.

pygame.mouse.get_pressedsaada hiirenuppude olek
pygame.mouse.get_possaada hiirekursori asukoht
pygame.mouse.get_relsaada hiire liikumiste arv
pygame.mouse.set_poshiirekursori asukoha määramine
pygame.mouse.set_visiblepeida või näita hiirekursorit
pygame.mouse.get_focusedkontrollib, kas ekraan aktsepteerib hiire sisestust
pygame.mouse.set_cursorhiirekursori pildi määramine
pygame.mouse.get_cursorsaada pilt hiirekursorist

Hiirefunktsioone saab kasutada hiireseadme praeguse oleku saamiseks. Need funktsioonid võivad muuta ka hiirekursorit.

Kui kuvarežiim on seatud, hakkab sündmuste järjekord võtma vastu hiire sündmusi. Hiirenupud genereerivad sündmusi pygame.MOUSEBUTTONDOWN ja pygame.MOUSEBUTTONUP sündmusi, kui neid vajutada ja vabastada. Need sündmused sisaldavad nupu atribuuti, mis näitab, millist nuppu vajutati. Hiireratas loob kerimisel pygame.MOUSEBUTTONDOWN ja pygame.MOUSEBUTTONUP sündmused.

Kui ratas keeratakse üles, seatakse nupp asendisse 4, alla -5. Kui hiir liigub, vallandatakse sündmus pygame.MOUSEMOTION. Hiire liikumine jaguneb väikesteks ja täpseteks liikumisüritusteks. Hiirt liigutades pannakse paljud liikumissündmused järjekorda. Hiire liikumise sündmused, mis on sündmusejärjekorrast valesti eemaldatud, on peamine põhjus, miks sündmuste järjekord on täis.

Näide. Joonistage kursor hiire praeguse asendi alla.

Nupu väärtus sündmuse abil saate kindlaks teha, millisele nupule hiirel klõpsiti:

Näide. Liigutage pilti hiirekursoriga.

Klaviatuur

See moodul sisaldab funktsioone klaviatuuriga töötamiseks.Sündmuste järjekord võtab vastu klaviatuuri klahvide vajutamisel ja vabastamisel sündmused pygame.KEYDOWN ja pygame.KEYUP.

Mõlemal sündmusel on võtmeatribuut, mis on täisarvutähis, mis tähistab kõiki klaviatuuri klahve. Sündmusel pygame.KEYDOWN on täiendavaid atribuute: unicode ja scancode. unicode on ühe tähemärgi string, mis vastab sisestatud tähemärgile. Skaneerimiskood on platvormispetsiifiline kood.

Hankige võtmekood:

press_keys = pygame.key.get_pressed ()
kui vajutada klahve [K_SPACE]:
# Tühikuklahvi on vajutatud
tulekahju ()

Klaviatuuri konstante on palju, neid kasutatakse klaviatuuri klahvide tähistamiseks. Järgnevas loendis on kõik klaviatuuri konstandid:

KeyasciiAsciiÜldnimi
K_BACKSPACE btagasilükkeklahv
K_TAB tsakk
K_CLEARselge
K_RETURN rtagasi
K_PAUSEpaus
K_ESCAPE^[põgeneda
K_SPACEruumi
K_EXCLAIM!hüüatama
K_QUOTEDBL"tsiteeritudbl
K_HASH#räsi
K_DOLLAR$dollarit
K_AMPERSAND&ampersand
K_QUOTEtsitaat
K_LEFTPAREN(vasakääris
K_RIGHTPAREN)parem silmus
K_ASTERISK*tärn
K_PLUS+plussign
K_COMMA,koma
K_MINUS-miinusmärk
K_PERIOD.periood
K_SLASH/ettepoole
K_000
K_111
K_222
K_333
K_444
K_555
K_666
K_777
K_888
K_999
K_COLON:koolon
K_SEMICOLON,semikoolon
K_LESSvähem kui märk
K_EQUALS=võrdõiguslik
K_GREATER>suurem kui märk
K_QUESTION?küsimärk
K_AT@kell
K_LEFTBRACKET[vasakpoolne sulg
K_BACKSLASHkaldkriips
K_RIGHTBRACKET]parempoolne sulg
K_CARET^caret
K_UNDERSCORE_alajoon
K_BACKQUOTE`haua
K_aaa
K_bbb
K_ccc
K_ddd
K_eee
K_fff
K_ggg
K_hhh
K_iii
K_jjj
K_kkk
K_lll
K_mmm
K_nnn
K_ooo
K_plklk
K_qqq
K_rrr
K_sss
K_ttt
K_uuu
K_vvv
K_www
K_xxx
K_yyy
K_zzz
K_DELETEkustuta
K_KP0klaviatuur0
K_KP1klaviatuur1
K_KP2klaviatuur2
K_KP3klaviatuur3
K_KP4klaviatuur4
K_KP5klaviatuur5
K_KP6klaviatuur6
K_KP7klaviatuur7
K_KP8klaviatuur8
K_KP9klaviatuur9
K_KP_PERIOD.klaviatuuriperiood
K_KP_DIVIDE/klaviatuuri jaotus
K_KP_MULTIPLY*klahvikombinatsiooni
K_KP_MINUS-klaviatuurminus
K_KP_PLUS+klaviatuuriplus
K_KP_ENTER rvõtmepader
K_KP_EQUALS=keypadequals
K_UPülesvool
K_DOWNallapoole
K_RIGHTparempoolne nool
K_LEFTvasaku noole
K_INSERTsisestada
K_HOMEkodu
K_ENDend
K_PAGEUPpageup
K_PAGEDOWNpagedown
K_F1F1
K_F2F2
K_F3F3
K_F4F4
K_F5F5
K_F6F6
K_F7F7
K_F8F8
K_F9F9
K_F10F10
K_F11F11
K_F12F12
K_F13F13
K_F14F14
K_F15F15
K_NUMLOCKnumlock
K_CAPSLOCKcapslock
K_SCROLLOCKscrollock
K_RSHIFTrightshift
K_LSHIFTleftshift
K_RCTRLrightcontrol
K_LCTRLleftcontrol
K_RALTrightalt
K_LALTleftalt
K_RMETArightmeta
K_LMETAleftmeta
K_LSUPERleftWindowskey
K_RSUPERrightWindowskey
K_MODEmodeshift
K_HELPhelp
K_PRINTprintscreen
K_SYSREQsysrq
K_BREAKbreak
K_MENUmenu
K_POWERpower
K_EUROEuro

Направленное движение с помощью клавиш

Можно перемещать изображение на экране с клавиатуры, назначая клавиши для перемещений:

вверх, вниз, влево, вправо.

Создать картинку, например:

Проверить очередь событий:

Проверить, является ли полученное событие нажатием на клавиши со стрелками:

Если - да, то получмить код нажатой клавиши и сформировать новые координаты для картинки:

И нарисовать картинку в новом месте:

Управление временем

Когда создан объект clock, можно вызвать его функцию tick один раз за кадр,
которая возвращает время, прошедшее со времени предыдущего вызова в миллисекундах:

Функция tick может использовать необязательный параметр для установления максимальной частоты кадров. Этот параметр нужен, если игра запущена на рабочем компьютере и необходимо контролировать, чтобы она не использовала всю его вычислительная мощность на 100%:

# Игра будет работать со скоростью не более 30 кадров в секунду

time_passed = clock.tick (30)

Helimooduli juhtimiseks kasutatakse pygame.mixer. Ta vastutab kõigi helidega tehtavate toimingute eest.

Laadige helifail alla * .wav-vormingus

heli = pygame.mixer.Sound ("sound.wav")
(laadige enne mängutsüklit, kuna see on väga pikk operatsioon)

Vaata videot: Müstikasaade "Puuduta mind": Chandaa õpetab õnne üles leidma (September 2021).

Pin
Send
Share
Send
Send