Zavod sv. Stanislava Škofijska klasična gimnazija Programiranje v Pythonu: računalniška igra»kača«maturitetna seminarska naloga iz informatike Avtor:

Podobni dokumenti
Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

BYOB Žogica v vesolju Besedilo naloge Glavna ideja igre je paziti, da žoga ne pade na tla igralne površine, pri tem pa zbrati čim več točk. Podobno ig

Zavod sv. Stanislava Škofijska klasična gimnazija Programiranje v Pythonu Program za računanje Maturitetna seminarska naloga iz informatike Kandidat:

Space Invaders Opis igre: Originalna igra: Space Invaders je arkadna igra, ki so jo ustvarili leta Bila je ena izmed prvih streljaških iger, v k

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str

INFORMATOR BIROKRAT 1/2011

Računalniški praktikum Projektna naloga - Izdelava spletne strani Avtor: Matej Tekavčič Skupina: Matej Tekavčič - koordinator Simon Vrhovnik Tine Kavč

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

Strojna oprema

Microsoft Word - UP_Lekcija04_2014.docx

Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nas

Microsoft Word - CN-BTU4 Quick Guide_SI

Spoznajmo PowerPoint 2013

GHOSTBUSTERS navodila za učitelje O PROJEKTU S tem projektom se učenci sami naučijo izdelati igro. Ustvariti morajo več ikon (duhcov ali kaj drugega)

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

Gimnazija Bežigrad Peričeva Ljubljana OPERACIJSKI SISTEM Predmet: informatika

Microsoft Word - M docx

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

PowerPointova predstavitev

Nameščanje Adopt Open Java Development Kit 8

Zavod svetega Stanislava Škofijska klasična gimnazija Programiranje v Pythonu Računalniška igra kača Maturitetna seminarska naloga iz Informatike Kand

ISOFT , računalniški inženiring

(Microsoft Word - U\350enje telegrafije po Kochovi metodi.doc)

scratch

Nameščanje Adopt Open Java Development Kit 8

Microsoft Word - IPIN slovenska navodila za pridobitev

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

Microsoft Word - M docx

Zadeva: Ponudba

Microsoft Word - CNR-MPV2 Quick Guide_SI

Upravljanje sistema COBISS Navodila za uporabo tiskalnika CITIZEN S310II V1.0 VIF-NA-27-SI

IJS EDS IJS Elektronski Dokumentni Sistem Osnovna uporaba sistema uporabniška navodila Institut "Jožef Stefan" Ljubljana

CODEKS IP KAMERA

Navodila za uporabo programske opreme OTRS verzija Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte

Microsoft Word - Trust-CDsize-12052_12579_14070-al-cp_v5.0.doc

Diapozitiv 1

Microsoft Word - M docx

(Microsoft Word - MSDN AA Navodila za \232tudente FS.doc)

NAVODILA ZA UPORABO Smart watch JW018 POZOR! Ura vsebuje magnetne sestavine. Osebe z vgrajenim srčnim spodbujevalnikom (pacemaker) ali kakršnimi drugi

Navodila za nastavitev mail odjemalca na ios in Android napravah TELEFONI iphone (ios 12) Predlagamo, da do svoje študentske e-pošte dostopate s pomoč

IZGRADNJA PREDSTAVITVENE SPLETNE STRANI GLUCOWATCH Avtor: Marko Zajko Projekt delno financira Evropska unija, in sicer iz Evropskega socialnega sklada

Navodila za uporabo Mini prenosna HD kamera s snemalnikom

PowerPoint Presentation

Microsoft PowerPoint _12_15-11_predavanje(1_00)-IR-pdf

PowerPoint Presentation

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje:

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov

Linksys PLEK500 User Guide

Navodila Trgovina iCenter

DCS-2330L_A1_QIG_v1.00(EU).indd

Slide 1

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr

VIDEOANALIZA GIBANJ Za kratke projektne naloge lahko dijaki z domačimi digitalnimi fotoaparati posnamejo nekaj sekundne videofilme poljubnih gibanj. U

Sledilna ploščica in tipkovnica Uporabniški priročnik

PowerPointova predstavitev

Kazalne naprave in tipkovnica Vodnik za uporabnike

Microsoft Word - CNC obdelava kazalo vsebine.doc

Navodila za uporabo Mini snemalnik

Oblikovanje in razvijanje spletnih strani

Analiza vpliva materiala, maziva in aktuatorja na dinamiko pnevmatičnega ventila

PowerApps

AKCIJSKO RAZISKOVANJE INOVACIJSKI PROJEKT ZA ZNANJE IN SPOŠTOVANJE Udeleženci: Učenci 2. c Razredničarka: Irena Železnik, prof. Učni predmet: MAT Učna

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru

Excel 2016

Microsoft Word - ELEKTROTEHNIKA2_ junij 2013_pola1 in 2

Si.mobil Si.most Najkrajša pot do vaših strank. Ljubljana,

Navodilo Telemach

SETCCE Uporabniška navodila za namestitev in upravljanje komponente SETCCE proxsign v2.0.5 za MAC OS X [Nova generacija komponent SETCCE proxsign ] Id

Microsoft Word - Navodila za uporabo 1.1.doc

INFORMATOR BIROKRAT 1/2011

PowerPoint Presentation

Vaja04_Ver02

_ _BDA_CapitalSports_CS-Timer.indd

Diapozitiv 1

Orodje za izvoz podatkov

NAVODILA ZA IZPOLNJEVANJE ELEKTRONSKEGA OBRAZCA ZA PRIJAVO IN PREKLIC DIGITALNIH POTRDIL Verzija Datum Opis sprememb dokumenta dokumenta

COBISS3/Medknjižnična izposoja

Delavnica Načrtovanje digitalnih vezij

Prekinitveni način delovanja PLK Glavni program (OB1; MAIN) se izvaja ciklično Prekinitev začasno ustavi izvajanje glavnega programa in zažene izvajan

ACAD-BAU-Analiza-prostorov

Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX Dodajanje uporabnikov vajexx v skupino Vaje

POMOČ PREDSTAVITEV EKOSKLADOVNICE UPORABLJENA TERMINOLOGIJA REGISTRACIJA V EKOSKLADOVNICO PRIJAVA V EKOSKLADOVNICO OBJAVA PRISPEVKA ISKANJE PRISPEVKOV

Poročanje izdanih računov pri gotovinskem poslovanju

HEXA_design_StanovanjeY_2018.cdr

Watch 40_MT40X_UM_SL.pdf

Vostro 430 Informacijski tehnični list o namestitvi in funkcijah

Safety and Regulatory Information

SLO - NAVODILO ZA NAMESTITEV IN UPORABO Št. izd. : HD AKCIJSKA KAMERA MIDLAND XTREME XTC 200 Št. izdelka:

Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se

PowerPointova predstavitev

predstavitev fakultete za matematiko 2017 A

Microsoft Word - ELEKTROTEHNIKA2_11. junij 2104

Slide 1

Najprej si poglejmo učilnico. Za vse začetnike lahko tukaj najdete čudovito knjigo Python za programiranje. Poda odlično iztočnico za učenje. Priporoč

Ime in priimek

NETGEAR R6100 WiFi Router Installation Guide

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij

Transkripcija:

Zavod sv. Stanislava Škofijska klasična gimnazija Programiranje v Pythonu: računalniška igra»kača«maturitetna seminarska naloga iz informatike Avtor: Žan Kogovšek Mentorica: prof. Helena Starc Grlj Šolsko leto: 2018/2019 Ljubjana, april 2019

Povzetek V sklopu seminarske naloge sem se odločil narediti računalniško igro v programskem jeziku Python, temelječo na klasični igri kača, s pomočjo modula pygame. Pred samim programiranjem sem si zamislil potek igre, ustvaril algoritem in se spoznal z modulom pygame. Med pisanjem kode sem program stalno sproti preverjal, tako da se je skladal z mojimi željami. Ko je bil program dokončan, sem si zamislil še nekaj izboljšav, ki bi ga v bodoče popeljale na višjo raven. Abstract For this project I have decided to create a simple computer game in Python with the use of the pygame module. The game is based on the popular game from the 70s - the Snake game. Before I started programming I devised a simple plan for the game and then created an algorithm for it. After reading some material on the module pygame I began programming. It consisted of constantly checking whether the program worked as I intended it to. When the program was finished I thought up a few improvements to take it to the next level. Ključne besede Računalniška igra, Python, modul pygame, programiranje, razvoj iger 2

Kazalo vsebine 1 Uvod...6 2 Teoretični del...7 2.1 Kača...7 2.2 Python...8 2.3 Modul pygame...8 2.4 Objektno programiranje...9 2.5 Cilji naloge...9 2.5.1 Začetni zaslon...9 2.5.2 Potek igre... 10 3 Praktični del... 12 3.1 Program... 12 3.2 Pretvorba v.exe... 17 3.3 Kako igrati?... 18 4 Zaključek... 19 4.1 Možne izboljšave... 20 5 Viri... 21 3

Stvarno kazalo exe, 17, 18 grafični uporabniški vmesnik, 8 grafika, 8, 9, 12 igra, 6, 7, 8, 9, 11, 16, 19 kača, 7, 11, 12, 13, 18 modul, 2, 8, 11, 19 Objektno programiranje, 9 program, 9, 11, 15, 17, 19 Pygame, 2, 8, 21 Python, 2, 8, 21 4

Kazalo slik Slika 1: Igra Blockade iz leta 1976...7 Slika 2: Kača iz leta 1997 Slika 3: Kača iz leta 2000...7 Slika 4: Inštalacija vmesnika pygame...8 Slika 5: Ukazi za omogočanje delovanja modula pygame...8 Slika 6: Začetni zaslon brez ozadja...9 Slika 7: Diagram poteka igre... 10 Slika 8: Del programa - 1... 12 Slika 9: Del programa - 2... 13 Slika 10: Del programa 3... 13 Slika 11: Del programa 4... 14 Slika 12: Del programa 5... 14 Slika 13: Del programa 6... 15 Slika 14: Del programa 7... 15 Slika 15: Del programa 8... 16 Slika 16: Del programa 9... 16 Slika 17: Del programa 10... 17 Slika 18: Inštalacija programa za pretvorbo.py v.exe... 17 Slika 19: Zagon programa auto-py-to-exe... 18 Slika 20: Program auto-py-to-exe... 18 Kazalo grafov Graf 1: Porazdelitev časa... 19 5

1 Uvod Sam sem že od nekdaj velik navdušenec nad igranjem računalniških iger, tako novejših, kot starejših, tako imenovanih retro iger. Danes je razvijanje iger v vedno večjem razcvetu, saj je igranje le-teh vedno bolj popularno in dostopno. Sama zgodovina računalniških iger sega v zgodnja 70. leta prejšnjega stoletja, ko je podjetje Atari naredilo prvo video igro z imenom Pong. Sam te igre nisem nikoli igral, saj nisem imel konzole, na kateri bi igra delovala. Kljub temu, da je bila to prva računalniška igra, pa je v mnogih ljudeh vzbudila veliko zanimanja in je bila zelo pozitivno sprejeta. Prva igra, ki sem jo sam kdarkoli igral, je bila Kača na telefonu. Koncept igre je zelo preprost, in sicer zrasti v čim daljšo kačo in pri tem paziti, da se ne zaletiš. Toda težavnost igre se poveča vsakič, ko zrasteš, saj je kačo težje nadzorovati zaradi njene velikosti. Ta igra je v meni vzbudila zanimanje nad tehnologijo in računalniškimi igrami. Ampak nikoli se nisem veliko ukvarjal z ozadjem iger in kako delujejo, temveč sem le užival ob igranju. Prav zato sem se odločil, da se bom še sam spopadel z izzivom ustvarjanja lastne igre in sprogramiral igro, ki je v meni zanetila željo po igranju video iger. Za programiranje kače pa sem se odločil tudi iz razloga, da jo bo enostavnejše sprogramirati kot kakšno modernejšo igra, katere že sam koncept je zelo zapleten. Hkrati pa igra ne bo potrebovala močnega sistema in bo lahko igrana na vsakem sistemu, ne glede na to, kakšne specifikacije ta ima. Nikoli nisem veliko programiral, saj sem do sedaj ustvaril le osebno spletno stran v HTML-ju in CSSju, ki pa nista programerska jezika, temveč sta le markup jezika. To pomeni, da prebereta zaporedje ukazov, ki preberejo, kako naj se predstavitvena stran prikaže. Prav tako nisem nikoli sprogramiral nobene aplikacije, tako da bo to moj prvi večji projekt, v katerem bom zares programiral. Učenje programiranja pa mi bo seveda tudi zelo pomagalo v moji nadaljni karieri, saj se nameravam vpisati na Fakulteto za računalništvo in informatiko, Univerze v Ljubljani, kjer je seveda velik poudarek na programiranju. Tabela 1: Uporabljena strojna oprema Procesor Ryzen 5 1600 RAM 16 GB DDR4 Grafična kartica Nvidia GeForce GTX 1080 Tabela 2: Uporabljena programska oprema Brskalnik Operacijski sistem Google Chrome Windows 10 Pro N Program za pisanje programa Sublime 3 Program za prenos datotek FilleZilla 6

2 Teoretični del 2.1 Kača Prvi zametki te igre segajo v leto 1976, ko je bila ustvarjena igra z imenom Blockade. To je bila arkadna igra, ki je bila narejena za dva igralca. Vsak od igralcev je nadzoroval kačo, ki je za sabo puščala zaporo in če si se v le-to zaletel, si izgubil. Zmagovalec je tisti, ki se dalj časa ne zaleti. Glavna razlika med to igro in kačo je v tem, da je bila ta igra načrtovana za dva igralca in jo je bilo nemogoče igrati sam. Leta 1997 je podjetje Nokia v svoj telefon implementirala igro z imenom kača. Toda ta kača ni tista, ki jo pod tem imenom poznamo danes, saj je bila kača sestavljena zgolj iz kvadratkov. Čez tri leta, torej leta 2000 je Nokia naredila igro, kot jo poznamo še danes. Kača je končno dobila spodobno obliko in dodali so cikličnost, kar pomeni, da lahko greš v steno in prideš ven na drugi strani. Slika 1: Igra Blockade iz leta 1976 Slika 2: Kača iz leta 1997 Slika 3: Kača iz leta 2000 7

2.2 Python Svojo prvo igro bom sprogramiral v programskem jeziku Python. Jezik je ustvaril Guido van Rossum v poznih 80. letih prejšnjega stoletja. Ime je dobil po slavni britanski oddaji Monty Python. Prva verzija Python 0.9.0 je izšla leta 1991, nato je leta 2000 izšel Python 2.0, nazadnje, leta 2008, pa je izšel Python 3.0, v katerem bom programiral tudi sam. Python se v glavnem uporablja za računalniško analitiko, izdelavo video iger in razvoj programske opreme. Med najbolj znanimi programi, ki so nastali v jeziku Python so: Instagram, YouTube in Spotify. Python pa za delovanje uporablja tudi različne module, sam bom uporabljal modul pygame za grafiko in grafični uporabniški vmesnik. 2.3 Modul pygame Modul pygame je prosti in odprtokodni modul za Python, ki je namenjen izdelavi multimedijskih aplikacij, na primer video iger. Hkrati pa omogoča tudi programiranje grafičnih uporabniških vmesnikov. Ta modul je ustvaril Pete Shinners leta 2000. Inštalacija modula je dokaj zapletena. Uporabnik mora najprej naložiti iz interneta paket za modul, ki ga bo kasneje namestil. Nato s pomočjo Python PIP, ki je že vnaprej nameščen v sodobnejših verzijah, ta paket inštaliramo. To storimo preko ukazne vrstice z ukazom»pip install pygame (v našem primeru)«. Modul moramo na začetku najprej uvoziti, kar storimo z ukazom»import pygame«. Predno pa lahko še karkoli s tem modulom počnemo, ga moramo najprej inicializirati, kar pa storimo z ukazom»pygame.init()«. Slika 4: Inštalacija vmesnika pygame Slika 5: Ukazi za omogočanje delovanja modula pygame 8

2.4 Objektno programiranje V svojem programu sem uporabil objektno programiranje, ki je stil programiranja, v katerem je osnovni gradnik objekt. Tega sestavljajo lastnosti, to so atributi oz. spremenljivke objekta, in metode, to pa so funkcije, ki delajo s podatki objekta. Tako je objekt neka celota podatkov in metod. Vsak objekt pripada nekemu razredu, ki definira obnašanje objekta. Pri objektnem programiranju moramo paziti tudi na to, da ob klicanju neke funkcije znotraj razreda pred funkcijo napišemo tudi razred, kateremu pripada, saj v nasprotnem primeru program željene funkcije ne bo našel. Za objektno programiranje je tudi značilna funkcija init, ki je nekakšna osnova razreda in ga»postavi na noge«. Prav tako pa vsaki funkciji dodamo spremenljivko self, ki poskrbi za to, da se funkcija ve kateremu razredu oz. objektu pripada. 2.5 Cilji naloge Cilj te projektne naloge je računalniška igra, ki bo delovala na podoben način kot igra Kača. Igra bo zelo podobno delovala kot Kača iz leta 2000, le da bom grafiko poskušal modernizirati in narediti uporabniku bolj prijazno na pogled. 2.5.1 Začetni zaslon Ob pričetku igre se bo pojavil začetni zaslon, v katerem bo igralec lahko pritisnil tipko»play«za igranje, ali pa igro zaprl s pritiskom na gumb»quit«. Reševanja tega problema se bom lotil s pomočjo Pythona in modula pygame. Za začetni zaslon bom ustvaril več funkcij, in sicer funkcijo zacetni_zaslon, znotraj katere bom ustvaril okno spodobne velikosti in na sredino napisal Kača. Znotraj te funkcije bom tudi ustvaril dva gumba, ki bosta ležala pod naslovom igre. Prvi bo na levi strani z napisom»play«, drugi pa na levi in bo na njem pisalo»quit«. Za delovanje teh gumbov bom spisal funkcijo gumb, ki bo v primeru pritiska na gumb»play«odprl igro, v primeru pritiska na gumb»quit«pa se bo program zaprl. Ozadje bom ustvaril s pomočjo modula pygame, saj v njem lahko delam z grafiko. Slika 6: Začetni zaslon brez ozadja 9

2.5.2 Potek igre Slika 7: Diagram poteka igre 10

Ko igralec pritisne tipko»play«na začetnem zaslonu, bo program najprej določil začetno lego kače, smer, v katero se premika, in njeno začetno velikost. Nato se bo kača pričela premikati in program bo hkrati pričel z generiranjem jabolk na naključnih mestih v prostoru. Za to bo poskrbel modul random, ki bo omogočil nepredvidljivo pojavljanje jabolk na zaslonu. Kačo in jabolko bom zrisal s pomočjo Pythona in modula pygame. V primeru, da kača poje jabolko, se bo njena velikost povečala za eno enoto in bo nadaljevala v isti smeri kot prej. Če bo igralec pritisnil na eno izmed puščic na tipkovnici, bo program izračunal novo smer, v nasprotnem primeru, pa bo kača ohranila smer. Igra se zaključi le v primeru, da kača trči sama vase, ker sem se odločil za ciklično strukturo. To pomeni, da če bo kača prišla v stik z zidom, igre še ne bo konec, temveč se bo nadaljevala na nasprotni strani v isti smeri. Ko pa se igralec zaleti, se bo igra končala in program bo izpisal doseženo velikost kače, čas igranja in besedno zvezo»game Over«. Čas igre bom izračunal z modulom time, in sicer bom izračunal razliko med časom ob kliku na gumb»play«in časom, ko se igralec zaleti in konča igro. Nato bo program igralca vrnil na začetni zaslon, od koder bo igralec ponovno imel izbiro med»play«in»quit«. 11

3 Praktični del 3.1 Program Slika 8: Del programa - 1 Na začetku programa sem uvozil vse module, ki jih bom potreboval. To so pygame, na katerem moja igra temelji in skrbi za grafiko, random, da bom lahko generiral jabolka na naključnih mestih in nazadnje tudi math, za lažje računanje. Pričel sem z razredom Kača, znotraj katerega sem definiral funkcije, ki jih bom uporabljal za svojo kačo. Pričel sem z določitvijo barve kače, nato sem pa ustvaril funkcijo init in reset. V slednji sem definiral začetni položaj kače in smer. Nato sem spisal funkcijo sprememba smeri, v kateri sem programu določil naslednjo smer kače in poskrbel, da ni nepravilnosti, npr. da kača ne more gor, če gre že dol. 12

Slika 9: Del programa - 2 Sledila je funkcija premik, kjer sem spisal, kaj se mora zgoditi, če pride do spremembe smeri, in sicer sem položaj kače premaknil za 10 pikslov v željeno smer. Tej funkciji sem dodal vrstico, kjer sem opisal, kaj se zgodi v primeru, da kača pride do jabolka. V takšnem primer funkcija preprosto vrne število 1. Da pa se kača ne bi večala, ko ni pojedla jabolko, pa sem if stavku dodal vrstico else, ki zbriše zadnji del kače, v primeru, da kača jabolka ni pojedla. Slika 10: Del programa 3 Razred Kača sem tu že skoraj dokončal, saj sem moral spisati le še funkcijo Trk. V tej sem definiral, kdaj naj funkcija vrne 1. To se zgodi v primeru, da Kača preseže igralno polje. Tu sem opustil ciklično strukturo, saj je bila igra z njo preveč enostavna. Igra se konča tudi, če se kača zaleti sama vase. To sem naredil s pomočjo for zanke, in sicer za vsak del telesa sem preveril, če sovpada s položajem kače. Za konec razreda Kače pa sem še definiral funkcijo, ki preprosto vrne položaj telesa. To sem storil za kasnejše izrisovanje kače. 13

Slika 11: Del programa 4 Po razredu Kača sem se odločil sprogramirati tudi razred Jabolko, ki se prav tako začne s funkcijo init. Naslednja funkcija znotraj razreda Jabolko je polozi_jabolko, ki določi koordinate jabolka in zabeleži, da je jabolko postavljeno. Tej funkciji sledi funkcija generiraj_jabolko, ki v primeru, da jabolko ni postavljeno, izvede funkcijo polozi_jabolko. Za konec razreda Jabolko sem samo dodal funkcijo jabolko_postavljeno, ki jabolku določi vrednost postavljeno. Slika 12: Del programa 5 V tem delu programa sem pričel pisati funkcije tekst, znotraj_gumba in gumb, ki jih bom uporabljal predvsem pri grafičnih vmesnikih. Funkcija tekst vrne tekst, ki ga želimo prikazati. Funkcija znotraj_gumba beleži, kdaj je miška znotraj dimenzij gumba. Funkcija gumb izriše gumb in določi barvo glede na to, ali je miška v območju gumba ali ne. Prav tako pa v funkciji gumb napišemo besedilo, ki ga želimo v gumbu imeti. 14

Slika 13: Del programa 6 Nadaljeval sem s pisanjem začetnega zaslona, ki se prižge ob zagonu igre. Nastavil sem začetno okno in njegovo barvo, dodal sem še besedilo in dva gumba. Ob kliku z miško na enega izmed njijju funkcija vrne 1 in ob pritisku na drugega se igra zapre. Prav tako sem dodal vrstico, ki zapre program, če uporabnik klikne na rdeč gumb v zgornjem desnem kotu. Če pa ni pritisnjen nobeden izmed gumbov, pa igra vrne 0. Slika 14: Del programa 7 Po začetnem zaslonu sem ustvaril funkcijo končni zaslon, kjer sem prav tako kot pri začetnem zaslonu nastavil velikost okna, barvo in tekst. Nato sem dodal še dva gumba, kjer pritisk na prvega vrne 15

1, pritisk na drugega pa zapre igro. Prav tako sem pa dodal še vrstico, ki zapre igro ob pritisku na x v zgornjem levem kotu. Če pa ni pritisnjen nobeden izmed gumbov, pa funkcija vrne 2. Slika 15: Del programa 8 V tem delu programa sem pričel s pisanjem funkcije mainloop. Na začetku sem določil število sličic na sekundo, in sicer 20. Nato sem napisal for zanko, ki beleži vsak pritisk na puščice na tipkovnici in kliče funkcijo sprememba_smeri iz razreda Kaca ter ji pove novo smer. Potem sem klical funkcijo generiraj_jabolko iz razreda Jabolko in tudi določil polmer jabolka. Nato sem poskrbel za to, da se jabolko izbriše, če ga kača poje in da se števec za točke poveča za 1. To sem storil tako, da sem celo okno prebarval z začetno barvo, nanj pa sem zrisal pravokotnik zelene barve za vsak del telesa v kaca.telo v razredu Kaca. Slika 16: Del programa 9 Po izrisu kače sem narisal tudi jabolko na koordinatah, ki jih določi funkcija postavi_jabolko v razredu Jabolko. Za konec sem preveril, ali funkcija Trk vrne število 1 in v tem primeru funkcija 16

mainloop vrne število 2. Če pa trka ni bilo, potem funkcija vrne število 1. S tem sem končal z vsemi funkcijami v programu, ostalo mi je samo še glavno igralno polje in pa neskončni game-loop. Najprej sem določil velikost igralne površine in njeno barvo. Nato sem nastavil spremenljivki za lažje klicanje razredov in spremenljivki tocke ter stopnja, ki sem jima obema določil vrednost 0. Po vsakem novem izrisu na ekranu program osveži zaslon z ukazom pygame.display.update(). Slika 17: Del programa 10 Za konec programa sem naredil še neskončen game-loop s pomočjo ukaza while True, in sicer sem naredil par if stavkov, ki v primeru, da je stopnja 0, zažene funkcijo zacetni_zaslon. Če je stopnja enaka 1, potem zažene funkcijo mainloop, drugače pa zažene funkcijo konec_igre. Zato, da se v ukazni vrstici ne izpiše napaka, sem naredil izjemo, in sicer v primeru, da bi se izpisala napaka pygame.error prikaže prazen prostor. 3.2 Pretvorba v.exe Slika 18: Inštalacija programa za pretvorbo.py v.exe Za pretvorbo iz.py formata v.exe format sem moral s pomočjo ukaznega poziva namestiti poseben program. Pred tem sem program prenesel s spleta in ga namestil z ukazom pip install autopy-to-exe. Nato sem zagnal program tako, da sem v mapi, v kateri je program, zagnal ukazni poziv v tej mapi in napisal ukaz python run.py. 17

Slika 19: Zagon programa auto-py-to-exe V odprtem programu sem enostavno izbral datoteko za pretvorbo iz formata.py v.exe. V tem koraku sem dodal še ikono programa. Slika 20: Program auto-py-to-exe 3.3 Kako igrati? Igra se zažene s pomočjo dvojnega klika na datoteko Kača.exe, ki ima rumeno ikono. Na začetku pritisnemo zeleni gumb»play«za igranje oziroma»quit«, če ne želimo igrati. Nato igramo s pomočjo štirih puščic na tipovnici, ki kačo nadzorujejo v željeni smeri. Torej v primeru, da pritisnemo levo, se bo kača pričela premikati levo, pod pogojem, da se trenutno ne premika desno. 18

4 Zaključek Projekt je bil zahteven in je vzel tudi veliko časa. Obenem pa je bil tudi zelo poučen, saj sem se naučil zares ogromno stvari, na primer objektno programiranje. Poleg tega sem se naučil uporabljati modul pygame, ki se je izkazal za enostavnega za uporabo. Seveda po tem, ko sem prebral navodila za njegovo uporabo. Celotna izkušnja je bila kar zabavna, razen delov, ko program po že mnogih popravkih še vedno ni deloval. Za programiranje sem porabil 50 ur, za učenje o modulu pygame in objektnem programiranju 10 ur in za pisanje dokumentacije 20 ur. Skupaj je celotna naloga trajala približno 76 ur, s čimer sem kar zadovoljen, saj sem mislil, da bo trajalo veliko dlje, da bom ustvaril delujočo igro, ki bo dosegla moje zahteve. Kot je razvidno iz grafa sem skoraj dve tretjini časa, ki sem ga potreboval za izdelavo naloge, porabil za programiranje. Malo več kot 10% vsega časa sem porabil, da sem se podučil o modulu pygame in objektnem programiranju, četrtino časa pa sem pisal dokumentacijo, tako teoretični del, kjer sem zasnoval koncept igre, kot tudi praktični del, kjer sem podrobneje opisal svoj program. Ob programiranju sem napravil nekaj sprememb v prvotnemu načrtu. Odstranil sem ciklično zgradbo, saj se mi je zdela igra z le-to preveč enostavna. Prav tako sem se tudi odločil, da ne bom dodal časa igranja, saj točke, ki jih igralec doseže in čas, ki ga igralec porabi za igro, nista sorazmerna in ni smiselno dodajati obeh komponent v končni zaslon. Porazdelitev časa 13% 25% 62% Programiranje Pisanje dokumentacije Učenje modula pygame Graf 1: Porazdelitev časa 19

4.1 Možne izboljšave Pri svoji nalogi vidim še mnogo prostora za izboljšave. Kar se tiče poteka igre, sem z njim izredno zadovoljen in sem edino pomanjkljivost opazil v sistemu, ki prepozna, kdaj se igra zaključi. Središče kače sem namreč definiral v sredini glave, namesto na njunih robovih, saj sem s tem poskrbel za gladko pobiranje jabolk brez vizualnih napak. S tem se je pojavila napaka pri interakciji kače z zidovi. Če namreč igralec spremeni smer kače dovolj hitro, tako da središče glave še ne pride v stik s steno, potem je polovica kače v igri in polovica kače nevidna ter se igra ne zaključi. Prav tako bi lahko kači dodal enostaven obraz in animacijo vsakič, ko poje jabolko, za bolj vizualen prikaz dogajanja. Hkrati pa se igralec ob začetku igre, ko kača še stoji pri miru, ne bi zmotil z orientacijo le-te in bi bila igra lažje razumljiva za nove igralce. Zamislil sem si tudi sistem, ki bi največje število točk beležil v datoteki na računalniku. S tem bi vedno, ko igralec doseže novo največje število točk, računalnik to igralcu sporočil in program bi zabeležil nov dosežek. V igro kača bi potem lahko tudi vnesel števec, ki bi odšteval število jabolk, ki jih igralec še potrebuje, da doseže nov rekord. Na žalost pa tega znanja še nisem osvojil in bom program lahko posodobil šele, ko pridobim več znanja programiranja. Igro sem po njeni težavnosti prilagodil novejšim igralcem, da jih ne bi neznanje iger oviralo pri zabavi. Zato bi bila zelo dobra izboljšava tudi, da bi v program dodal več težavnosti, ki bi tistim že bolj izkušenim v svetu računalniških iger, igro popestrilo. To bi naredil tako, da bi na višjih nivojih kača potovala hitreje, prav tako pa bi se na ozemlju podobno kot jabolka na naključnih mestih nastavile ovire, ki bi končale igro v primeru, da se kača vanje zaleti. Stopnje težavnosti bi dodal na začetni in končni zaslon poleg gumbov»play«in»quit«. V igri sem se držal klasične zelene barve, ki je za to igro že od nekdaj značilna. Uporabniku pa bi lahko tudi omogočil izbiro barve s tem, da bi v grafični vmesnik preprosto dodal še gumb barve, kjer bi igralec izbral eno izmed desetih že vnaprej določenih barv in program bi mu nemudoma pokazal, kako kača izgleda. 20

5 Viri Python (online) [uporabljeno 2. 3. 2019], dostopno na: https://www.learnpython.org/ Python (online) [uporabljeno 2. 3. 2019], dostopno na: https://www.codecademy.com/learn/learn-python Krebelj, P., 2016. Spoznavamo programski jeik python. Ljubljana: Atelje Doria David Clark, Pygame (online) [uporabljeno 2. 3. 2019], dostopno na: https://www.pygame.org/docs/ 21