32
Učenje programiranja programiranjem igara u Pythonu Nakon naučenih osnova o računalnom sustavu u prvom razredu srednje škole tokom nastave informatike, uslijedio je drugi razred i prvi naš susret s procesom programiranja. Ove godine radili smo Python, što smatram izuzetno poticajnim i motivirajućim s obzirom na prirodu ovog programskog jezika, a pod time mislim na sveopću primjenjivost istog. Pa za početak nekoliko riječi o samom Pythonu. Python je programski jezik opće namjene, interpretiran i visoke razine kojeg je stvorio Guido van Rossum 1990. godine (prva javna inačica objavljena je u veljači 1991. godine), ime dobiva po televizijskoj seriji Monty Python's Flying Circus. Po automatskoj memorijskoj alokaciji, Python je sličan programskim jezicima kao što su Perl, Ruby, Smalltalk itd. Python dopušta programerima korištenje nekoliko stilova programiranja. Objektno orijentirano, strukturno i aspektno orijentirano programiranje stilovi su dopušteni korištenjem Pythona te ova fleksibilnost čini Python programski jezik sve popularnijim. Python se najviše koristi na Linuxu, no postoje i inačice za druge operacijske sustave. Ono što je meni osobno, najviše dojmljivo u okviru Pythona jest upravo ta njegova primjenjivost i to recimo baš u okviru bioinformatike. Svaka osoba, minimalnog interesa za znanost, prije ili kasnije doći će do potrebe za implementacijom nekog programskog jezika u svoju praksu. Pa zašto to ne bi bio, opće- korišteni, a kvalitetni Python? 1

Učenje programiranja programiranjem igara u Pythonu

  • Upload
    someone

  • View
    123

  • Download
    11

Embed Size (px)

DESCRIPTION

učenje programiranjem

Citation preview

Page 1: Učenje programiranja programiranjem igara u Pythonu

Učenje programiranja programiranjem igara u Pythonu

Nakon naučenih osnova o računalnom sustavu u prvom razredu srednje škole tokom nastave informatike, uslijedio je drugi razred i prvi naš susret s procesom programiranja. Ove godine radili smo Python, što smatram izuzetno poticajnim i motivirajućim s obzirom na prirodu ovog programskog jezika, a pod time mislim na sveopću primjenjivost istog. Pa za početak nekoliko riječi o samom Pythonu. Python je programski jezik opće namjene, interpretiran i visoke razine kojeg je stvorio Guido van Rossum 1990. godine (prva javna inačica objavljena je u veljači 1991. godine), ime dobiva po televizijskoj seriji Monty Python's Flying Circus. Po automatskoj memorijskoj alokaciji, Python je sličan programskim jezicima kao što su Perl, Ruby, Smalltalk itd. Python dopušta programerima korištenje nekoliko stilova programiranja. Objektno orijentirano, strukturno i aspektno orijentirano programiranje stilovi su dopušteni korištenjem Pythona te ova fleksibilnost čini Python programski jezik sve popularnijim. Python se najviše koristi na Linuxu, no postoje i inačice za druge operacijske sustave. Ono što je meni osobno, najviše dojmljivo u okviru Pythona jest upravo ta njegova primjenjivost i to recimo baš u okviru bioinformatike. Svaka osoba, minimalnog interesa za znanost, prije ili kasnije doći će do potrebe za implementacijom nekog programskog jezika u svoju praksu. Pa zašto to ne bi bio, opće-korišteni, a kvalitetni Python? No, pitanje koje si mora postaviti svaki informatičar, poglavito ako se radi o profesoru dotičnog predmeta jest, što učenici tijekom programiranja prvo zamjete tj. na što odlazi najveća količina njihove pažnje?! Trebamo si priznati vrlo jednostavnu faktografsku činjenicu, koja kaže kako je za većinu učenika programiranje svega jedan puki kod na crno-bijeloj pozadini, kojeg ne mogu najbolje niti razumjeti.

1

Page 2: Učenje programiranja programiranjem igara u Pythonu

Sve to može se vrlo jednostavno promjeniti. Ako samo pokažemo “aplikabilnost” dotičnog programa. Spomenete li učeniku računalnu igricu, složit ćete se kako će prema istoj pokazati daleko više afiniteta nego prema zapisanom kodu – i upravo je to riješenje problema.

Za svaku našu lekciju koju smo obradili, počevši od jednostavnih aritmetičkih funkcija pa do npr. lista, modula, različitih funkcija i sl., postoji uvijek neki “aplikabilni” program, odnosno, jednostavna igra ili pak neka druga vrsta zanimljive interaktivne aktivnosti koju učenicima možemo prezentirati. Moj će cilj u ovom jednostavnom pregledu biti pokazati upravo to, primjenjivost programskog koda u svrhu izrade jednostavne, ali još uvijek zanimljive, igre. Bitno je napomenuti kako se pri tim zanimljivim procesima u učeničkom procesu učenja ništa ne gubi, odnosno, primjenjivost logike i što efikasnijeg rješavanja problema i dalje je i više nego zastupljena, a to i jest krajnji cilj učenja programiranja uopće.

2

Page 3: Učenje programiranja programiranjem igara u Pythonu

Pa krenimo sa primjerima:

Prije nego što nešto složenije operacije prezentiram u okviru različitih zanimljivih aktivnosti ili jednostavnih igara, bilo bi dobro proći, upravo kroz te osnovne funkcije, koje kasnije jednostavnom kombinatorikom, postaju nešto složenije tvoreći neku aktivnost (# napomena - neki su primjeri izneseni vodeći se uzorom nekih referentnih i relativno poznatih primjera s engleskog jezika, pa su dotični također i ostavljeni u originalnom obliku na engleskom jeziku zbog autentičnosti i neprikladnosti prijevoda):

1. Output (izlazna informacija):

print “ Hello, world! ”

2. Input, assignment (ulazna informacija, zadatak):

ime = raw_input ( “ Kako se zoveš? “ )print “ Bok, moje je ime ”

3. For loop, built-in enumerate function, new style formatting (za petlje, funkciju nabrajanja i novi stil formatiranja):

prijatelji = ( “Marina”, “Ivan”, “Lucija”, “Dora” )for i, ime in enumerate (prijatelji) : print "iteration {iteration} is {ime}".format(iteration=i, ime=ime)

4. Fibonacci, tuple assignment:

roditelji, djeca = (1, 1) while djeca < 100: print 'Ova generacija ima {0} djece'.format(djeca)roditelji, djeca = (djeca, roditelji + djeca)

5.Functions (funkcije):

def pozdrav(ime): print 'Bok', ime pozdrav('Dora')

3

Page 4: Učenje programiranja programiranjem igara u Pythonu

pozdrav('Igor') pozdrav('Marina')

6. Import, regular expressions (unos, regularni izrazi):

import re for test_string in ['555-1212', 'ILL-EGAL']: if re.match(r'^\d{3}-\d{4}$', test_string): print test_string, “je ispravan USA lokalni telefonski broj” else: print test_string, 'odbijeno'

7. Dictionaries, generator expressions (riječnici, izrazi ):

cijene = {'jabuka': 0.40, 'banana': 0.50} moja_kupnja = { 'jabuka': 1, 'banana': 6} račun kupnje = sum(cijena[voće] * moja_kupnja [voće] for voće in moja kupnja)print 'ja dugujem prodavaču $%.2f' % račun kupnje

8. Command line arguments, exception handling (naredbeni argumenti, iznimke):

import sys try: total = sum(int(arg) for arg in sys.argv[1:]) print 'sum =', total except ValueError: print “Treba zadovoljiti cjelobrojne argumente”

4

Page 5: Učenje programiranja programiranjem igara u Pythonu

9. Opening files (otvaranje daktoteka):

python_files = glob.glob('*.py') for file_name in sorted(python_files): print ' ------' + file_name

with open(file_name) as f: for line in f: print ' ' + line.rstrip()

print

10. Time, conditionals, from..import, for..else (vrijeme, kondicionali, od…do (unos), for…else fukcije):

from time import localtime

aktivnosti = {8: 'Spavanje', 9: 'Putovanje na posao', 17:'Rad', 18:'Putovanje s posla', 20:'Jedenje', 22:'Odmaranje'}

time_now = lokalnovrijeme() hour = time_now.tm_hour

for activity_time in sorted(activities.keys()): if hour < activity_time: print activities[activity_time] break else: print 'Unknown, AFK or sleeping!'

5

Page 6: Učenje programiranja programiranjem igara u Pythonu

11. Triple-quoted strings, while loop (“tro-citirani” stringovi, while petlja):

REFRAIN = '''%d bottles of beer on the wall,%d bottles of beer,take one down, pass it around,%d bottles of beer on the wall!'''bottles_of_beer = 99while bottles_of_beer > 1: print REFRAIN % (bottles_of_beer, bottles_of_beer, bottles_of_beer - 1) bottles_of_beer -= 1

12. Classes (razredi):

class BankovniRačun(object): def __init__(self, initial_balance=0): self.balance = initial_balance def deposit(self, amount): self.balance += amount def withdraw(self, amount): self.balance -= amount def overdrawn(self): return self.balance < 0my_account = BankovniRačun(15)my_account.withdraw(5)print my_account.balance

13. Unit testing with unittest (anketna jedinica/jedinica za ispitivanje):

import unittestdef median(pool): copy = sorted(pool)

6

Page 7: Učenje programiranja programiranjem igara u Pythonu

size = len(copy) if size % 2 == 1: return copy[(size - 1) / 2] else: return (copy[size/2 - 1] + copy[size/2]) / 2class TestMedian(unittest.TestCase): def testMedian(self): self.failUnlessEqual(median([2, 9, 9, 7, 9, 2, 4, 5, 8]), 7)if __name__ == '__main__': unittest.main()

14. Doctest-based testing (test na temelju ispitivanja):

def median(pool): '''Statistical median to demonstrate doctest. >>> median([2, 9, 9, 7, 9, 2, 4, 5, 8]) 7 ''' copy = sorted(pool) size = len(copy) if size % 2 == 1: return copy[(size - 1) / 2] else: return (copy[size/2 - 1] + copy[size/2]) / 2if __name__ == '__main__': import doctest doctest.testmod()

15. Itertools (alati):

from itertools import groupbylines = '''This is thefirst paragraph.

This is the second.'''.splitlines()for has_chars, frags in groupby(lines, bool): if has_chars:

7

Page 8: Učenje programiranja programiranjem igara u Pythonu

print ' '.join(frags)

16. Csv module, tuple unpacking, cmp() built-in (csv modul, cmp () funkcija …):

import csv

writer = csv.writer(open('stocks.csv', 'wb', buffering=0))writer.writerows([ ('GOOG', 'Google, Inc.', 505.24, 0.47, 0.09), ('YHOO', 'Yahoo! Inc.', 27.38, 0.33, 1.22), ('CNET', 'CNET Networks, Inc.', 8.62, -0.13, -1.49)])stocks = csv.reader(open('stocks.csv', 'rb'))status_labels = {-1: 'down', 0: 'unchanged', 1: 'up'}for ticker, name, price, change, pct in stocks: status = status_labels[cmp(float(change), 0.0)] print '%s is %s (%s%%)' % (name, status, pct)

17. 8-Queens Problem

BOARD_SIZE = 8

def under_attack(col, queens): left = right = col

for r, c in reversed(queens): left, right = left - 1, right + 1

if c in (left, col, right): return True return False

def solve(n): if n == 0: return [[]]

8

Page 9: Učenje programiranja programiranjem igara u Pythonu

smaller_solutions = solve(n - 1)

return [solution+[(n,i+1)] for i in xrange(BOARD_SIZE) for solution in smaller_solutions if not under_attack(i+1, solution)]for answer in solve(BOARD_SIZE): print answer

18. Prime numbers sieve w/fancy generators (“sita” primarnih brojeva / ukrasni generatori):

import itertools

def iter_primes(): numbers = itertools.count(2)

while True: # get the first number from the iterator (always a prime) prime = numbers.next() yield prime

# this code iteratively builds up a chain of # filters...slightly tricky, but ponder it a bit numbers = itertools.ifilter(prime.__rmod__, numbers)

for p in iter_primes(): if p > 1000: break print p

9

Page 10: Učenje programiranja programiranjem igara u Pythonu

19. XML/HTML parsing (using Python 2.5 or third-party library) – (XML/HTML raščlanjivanje):

dinner_recipe = '''<html><body><table><tr><th>amt</th><th>unit</th><th>item</th></tr><tr><td>24</td><td>slices</td><td>baguette</td></tr><tr><td>2+</td><td>tbsp</td><td>olive oil</td></tr><tr><td>1</td><td>cup</td><td>tomatoes</td></tr><tr><td>1</td><td>jar</td><td>pesto</td></tr></table></body></html>'''

# In Python 2.5 or from http://effbot.org/zone/element-index.htmimport xml.etree.ElementTree as etreetree = etree.fromstring(dinner_recipe)

# For invalid HTML use http://effbot.org/zone/element-soup.htm# import ElementSoup, StringIO# tree = ElementSoup.parse(StringIO.StringIO(dinner_recipe))

pantry = set(['olive oil', 'pesto'])for ingredient in tree.getiterator('tr'): amt, unit, item = ingredient if item.tag == "td" and item.text not in pantry: print "%s: %s %s" % (item.text, amt.text, unit.text)

10

Page 11: Učenje programiranja programiranjem igara u Pythonu

Nakon prezentiranih osnovnih matematičkih - precizirano aritmetičkih aktivnosti tj. operacija poput (+ - */), osnovnih varijabli, modula te funkcija, možemo započeti sa slijedećim zanimljivim, ali još uvijek jednostavnim aktivnostima:

print “ Pozdrav svijetu! ”print “ Kako se zoveš? ”mojeIme = raw_input ( )print “ Drago mi je upoznati te, ” + mojeIme

print “ Reci mi koja je tvoja najdraža boja. ”najdražaBoja = raw_input ( )

print “ Reci mi koja je tvoja najdraža životinja. ”najdražaŽivotinja = raw_input ( )

print “ Reci mi koja je tvoja najdraža hrana. ”najdražaHrana = raw_input ( )

# display najdraže stvariprint “ Napisao si: ” + najdražaHrana + ! “ ” + najdražaŽivotinja + “ ” + najdražaBoja# print “ Ovdje je lista tvojih najdražih stvari. ”print “ Boja: ” + najdražaBojaprint “ Životinja” + najdražaŽivotinjaprint “ Hrana: ” + najdražaHrana

11

Page 12: Učenje programiranja programiranjem igara u Pythonu

Ako koristimo malo složenije funkcije od prethodnog, odnosno poslužimo se str te random.randit (funkcijom), različitim uvjetima, te while petljom, možemo izraditi još jednu jednostavnu aktivnost, koja simulira određene karakteristike jedne kviz-igre:

import random print ("Dobrodošli u igru \"Mali Matematičar\" ")print ("Pokušajte izračunati zbroj nasumično zadanih brojeva")

a = random.randint(1,1000)b = random.randint(1,1000) print("\nOk, izvoli dva broja , izračunaj zbroj")print(a,b)c = int(input("Zbroj je: ")) while c != a+b: print ("Ne , to nije točno pokušaj ponovno") c=int(input("Zbroj je: ")) print("Bravo pogodio/la si rješenje")

input ("\n\nPritisni enter kako bi izašao") import random

Ili malo drugačija verzija:

Import random

isprobaniPokušaji = 0

print “ Bok! Kako se zoveš? ”mojeIme = raw_input ( )

broj = random.randit (1, 20)print “ Pa, ” + mojeIme + “, Ja razmišljam o broju između 1 and

12

Page 13: Učenje programiranja programiranjem igara u Pythonu

20.”

While isprobaniPokušaji < 6 : print “ Pokušaj pogoditi . ” pokušaj = raw_input ( ) pokušaj = int (pokušaj)

isprobaniPokušaji = isprobaniPokušaji + 1

if pokušaj < number : print “ Tvoj pokušaj je pre-nizak. ”

if pokušaj > number : print “ Tvoj pokušaj je pre-visok. ”

if pokušaj == number: break

If pokušaj == number: isprobaniPokušaji = str (isprobaniPokušaji) print “ Dobar posao, ” + mojeIme + “ ! Pogodio si moj broj u “ + isprobaniPokušaji + “ pokušaji ! ”

if pokušaj != number : number = str(number) print “ Ne. Broj na koji sam mislio je bio “ + number

Ovakva jednostavna kviz-igra može imati beskrajno puno verzija. Nije teško zaključiti kako je ograničava nekoliko parametara gledanih iz pozicija količine pokušaja pogađanja od strane igrača te ograničenost na raspon brojeva, između kojih možemo razabrati. Ta dva ograničenja, čine se i jesu vrlo banalna, baš kao i data kviz-igra, no upravo ona omogućavaju beskrajno puno kombinatorike unutar same aktivnosti. S obzirom da je ovo prva prikazana aktivnost koju se može nazvati i kvizom te bez obzira na svoju primitivnost, zahtjeva razumijevanje i primjenu prvih “složenijh” funkcija, prilažem link, na kojem je u vrlo jednostavnom videu prikazana izrada upravo ovakve aktivnosti, što definitivno olakšava razumijevanje i demistificira eventualnu apstraktnost: http://www.youtube.com/watch?v=dvBWJ7MLu0s

13

Page 14: Učenje programiranja programiranjem igara u Pythonu

Nakon toga valja znati primjeniti naučeno znanje o stringovima i ostalim podatkovnim zbirkama, kao što su: liste, rječnici, itd.; ovdje također imam jedan zanimljiv primjer:

print(“Što raste iz zemlje kad ne vidi nitko, od drveća više, uvis, uvis ide, a ne raste nikad? ”)input()print('Planine!')print()print(“Kutija bez šarki, ključa i vrata, a unutra skriven sadržaj od zlata.”)input()print(“Jaje!”)print()print(“Ova stvar sve će uništiti: ptice, zvijeri, cvijeće, željezo glođe, čelik grize, tvrdi kamen u prah melje. Sruši grad, uništi kralja, a planine u dol valja?”)input()print("Vrijeme!")

Za neke već, lagano složenije operacije, za koje moramo poznavati funkcije poput npr: time.sleep (), različitih grafičkih funkcija, koje ćemo tek naučiti i sl. možemo primjenjiti slijedeće:

import randomimport time

def Uvod(): print('U zemlji si punoj zmajeva. Ispred sebe vidiš dvije pećine') print(“U jednoj pećini živi dobroćudni zmaj”) print(“I podijelit će svoje blago sa tobom. Drugi zmaj”) print(“je pohlepan i gladan i odmah će te pojesti”) print()

def Odaberipećinu(): pećina = ''

14

Page 15: Učenje programiranja programiranjem igara u Pythonu

while pećina!= '1' and pećina!= '2': print(“U koju ćeš pećinu ući? (1 or 2)”) pećina = input()

return pećina

def provjeripećinu(odabranapećina): print('Približavaš se pećini...') time.sleep(2) print('Tamna je i jeziva...') time.sleep(2) print('Veliki zmaj iskače ispred tebe! Otvara svoja usta...') print() time.sleep(2)

prijateljskapećina = random.randint(1, 2)

if odabranapećina ==str(prijateljskapećina): print('…I daje ti svoje blago!') else: print('Progutao te u jednom zalogaju!')

igrajponovno = 'da'while igrajponovno == 'da' or igrajponovno == 'y':

Uvod()

brojpećine = odaberipećinu()

provjeripećinu(brojpećine)

print('Želiš li igrati ponovno? (da or ne)') igrajponovno = input()

15

Page 16: Učenje programiranja programiranjem igara u Pythonu

Ovdje donosim, primjer aktivnosti, koja si čak može uzeti za pravo nazvati se igrom. Ona objedinjuje jako puno toga otprije naučenog (stringovi, varijable, mnogostruke varijable, liste, “in operator”, del izjava, “len () funkcija”, “range funkcija”, petlje, stringovi koji se ponašaju kao liste, elif izjava, riječnici…), a stavlja i određenu nadogradnju u obliku dijagrama toka, kojeg bi bilo dobro izraditi neposredno prije pisanja koda. Prilikom pisanja ovakvog koda, potrebno je posvetiti dovoljnu količinu pažnje i koncentracije, kako bi se izbjegle eventualne pogreške ili propusti. Ovo je doista poznata igra vješala odnosno na engleskom jeziku hangman:

import random

HANGMANPICS = ['''

+------+ | | | | | | | | | | | | ==============''', '''

+------+ | | | | O | | | | | | | ==============''', '''

+------+ | | | |

16

Page 17: Učenje programiranja programiranjem igara u Pythonu

O | | | | | | | | | ==============''', '''

+------+ | | | | O | /| | / | | | | | | | | ==============''', '''

+------+ | | | | O | /|\ | / | \ | | | | | | | ==============''', '''

+------+ | | | | O | /|\ | / | \ |

17

Page 18: Učenje programiranja programiranjem igara u Pythonu

| | / | / | | | ==============''', '''

+------+ | | | | O | /|\ | / | \ | | | / \ | / \ | | | ==============''']

words = 'ant baboon badger bat bear beaver beetle bird camel cat clam cobra cougar coyote crab crane crow deer dog donkey duck eagle ferret fish fox frog goat goose hawk iguana jackal koala leech lemur lion lizard llama mite mole monkey moose moth mouse mule newt otter owl oyster panda parrot pigeon python quail rabbit ram rat raven rhino salmon seal shark sheep skunk sloth slug snail snake spider squid stork swan tick tiger toadtrout turkey turtle wasp weasel whale wolf wombat worm zebra'.split()

def getRandomWord(wordList): # This function returns a random string from the passed list of strings. wordIndex = random.randint(0, len(wordList) - 1) return wordList[wordIndex]def displayBoard(HANGMANPICS, missedLetters, correctLetters, secretWord): print HANGMANPICS[len(missedLetters)] print

18

Page 19: Učenje programiranja programiranjem igara u Pythonu

print 'Missed letters:', for letter in missedLetters: print letter, print

blanks = '_' * len(secretWord)

for i in range(len(secretWord)): # replace blanks with correctly guessed letters if secretWord[i] in correctLetters: blanks = blanks[:i] + secretWord[i] + blanks[i+1:]

for letter in blanks: # show the secret word with spaces in between each letter print letter, print

def getGuess(alreadyGuessed): # Returns the letter the player entered. This function makes sure the player entered a single letter, and not something else. while True: print 'Guess a letter.' guess = raw_input() guess = guess.lower() if len(guess) != 1: print 'Please enter a single letter.' elif guess in alreadyGuessed: print 'You have already guessed that letter. Choose again.' elif guess not in 'abcdefghijklmnopqrstuvwxyz': print 'Please enter a LETTER.' else: return guess

def playAgain(): # This function returns True if the player wants to play again, otherwise it returns False.

19

Page 20: Učenje programiranja programiranjem igara u Pythonu

print 'Do you want to play again? (yes or no)' return raw_input().lower().startswith('y')print 'H A N G M A N' missedLetters = '' correctLetters = '' secretWord = getRandomWord(words) gameIsDone = False

while True: displayBoard(HANGMANPICS, missedLetters, correctLetters, secretWord)

# Let the player type in a letter. guess = getGuess(missedLetters + correctLetters)

if guess in secretWord: correctLetters = correctLetters + guess

# Check if the player has won foundAllLetters = True for i in range(len(secretWord)): if secretWord[i] not in correctLetters: foundAllLetters = False break if foundAllLetters: print 'Yes! The secret word is "' +secretWord + '"! You have won!' gameIsDone = True else: missedLetters = missedLetters + guess

# Check if player has guessed too many times and lost if len(missedLetters) == len(HANGMANPICS) - 1: displayBoard(HANGMANPICS, missedLetters, correctLetters, secretWord) print 'You have run out of guesses!\nAfter ' + str(len(missedLetters)) + ' missed guesses and ' + str(len(correctLetters)) + ' correct guesses, the word was "' + secretWord + '"'

20

Page 21: Učenje programiranja programiranjem igara u Pythonu

gameIsDone = True

# Ask the player if they want to play again (but only if the game is done). if gameIsDone: if playAgain(): missedLetters = '' correctLetters = '' gameIsDone = False secretWord = getRandomWord(words) else: break

Ako se bolje promotri ovakav tip igre, njen kod zapravo uopće nije složen i ne zahtjeva nikakvu vrstu kompliciranosti, te rekla bih da je u njemu najizraženija potreba za osnovnom “programibilnom” logikom i strpljenjem prilikom pisanja samog koda. Osim ovako jednostavne igre, po sličnoj shemi možemo stvarati i mnoge druge. Naime, ako se koristimo bazičnom umjetnom inteligencijom računala, uz primjenu ovih svih dosada naučenih operacija, možemo stvarati i igre poput križić-kružića, nešto složenijih kvizova i tomu slično. Dobro je napomenuti kako postoje i igre koje osim primjene svih ovih programskih funkcija, zahtjevaju i primjenu matematičkih znanja. To su i dalje, vrlo jednostavna znanja, ali ipak nešto složenija od primjene osnovnih aritmetičkih znakova. Pa tako poznavanjem i primjenom znanja o koordinatnom sustavu, različitim skupovima brojeva, jednostavnoj kombinatorici i sl., možemo stvoriti igre poput šaha ili drugih logičkih igara.

Ako svemu netom spomenutom, dodamo i “bool () funkciju”, te već naučene “chr (), ord () funkciju i round () funkciju”, kao i znanje o računalnoj kriptografiji odnosno tzv. šifriranju, možemo stvoriti poznatu igru poput ove:

21

Page 22: Učenje programiranja programiranjem igara u Pythonu

Čitav njen ispisani kod, može se vidjeti na slijedećoj poveznici: http://inventwithpython.com/reversi.py

Samu simulaciju igre, moguće je pogledati na slijedećoj poveznici:https://www.youtube.com/watch?feature=player_embedded&v=WfjboHXfWZ8

Igre poput ove ili šaha koriste tzv. umjetnu inteligenciju jer se aktivni igrač (čovjek) suprostavlja odnosno igra protiv računala. Kod takvih igara moguće su tri kombinacije. Aktivni igrač igra protiv računala (kakvu ovdje imamo); aktivni igrač igra protiv drugog aktivnog igrača (čovjek-čovjek); te računalo igra samo protiv sebe. Sve se kombinacije izvršavaju kombinacijom dvaju funkcija: getPlayerMove () i getComputerMove ().

Svi prikazani primjeri su isključivo jednostavna primjena naučenih znanja i to isključivo u samom početku učenja programiranja. Programeri koji se duži vremenski interval bave ovim jezikom sposobni su razviti daleko složeniji primjer igre putem Python-a integrirajući daleko složenije funkcije i module. Pa tako za napredne korisnike postoji i jedna “moderna inačica” i dodatak istom, tzv. Pygame, koji je dodatni modul i zahtjeva dodatnu instalaciju. Pygame nije predmet proučavanja unutar školskog programa i aposulutno nije esencijalan za promatranje baze primjera koji su sama intencija ovakvog oblika word-pregleda, no kada bi se ovakav “pregled” nalazio u knjizi, dio o pygame-u zauzeo bi poglavlje – za one koji žele znati više Pa tako…

22

Page 23: Učenje programiranja programiranjem igara u Pythonu

Pygame je skup Python modula koji su napravljeni za programiranje igrica. Pygame proširuje funkcionalnosti SDL biblioteke. Na taj način omogućuje izradu igrica i multimedijskih aplikacija u programskom jeziku Python. Pygame, kao i Python, je kompatibilan sa skoro svim platformama i operacijskim sustavima. Pygame je preuzet milijunima puta te je imao nekoliko milijuna posjeta njihovim web stranicama. Pygame je besplatan i izdan je pod GPL licencom. Stoga s pygame-om možete izraditi besplatne ili komercijalne igrice, igrice otvorenog koda itd. Za upoznavanje s Pygame modulom namijenjen je - line by line chimp (http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html) tutorijal te jedna online knjiga (http://inventwithpython.com/chapters/).

Neke od značajki Pygame modula:

1.Kompatibilan je s mnogim platformama - Podržava Linux (dolazi s mnogo značajnih Linux distribucija), Windows (95, 98, me, 2000, XP, Vista, 64-bit Windows itd.), BeOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX i QNX. Također se može koristiti na prijenosnim uređajima, igraćim konzolama i slično.

2.Koristi optimizirani C kod te asemblerski kod za ključne funkcije - C je često brži od Python-a 10 do 20 puta, dok je Asembler 100 i više puta brži.

3.Jednostavan je i lako ga je koristiti - Pygame mogu koristiti odrasli, ali i djeca.

4.Ne zahtjeva korištenje GUI-a za sve funkcije - Pygame se može koristiti i bez zaslona ukoliko želimo samo procesuirati slike, učitavati kontrole joysticka ili reproducirati razne zvukove.

5.Brz odaziv na prijave o greškama u kodu - Neke greške su ispravljene unutar sat vremena otkada su prijavljene. Nekada se pojave i problemi, no uglavnom ispravljanje grešaka protekne bezbolno. Danas skoro da i nema prijava o greškama u kodu jer je velika većina grešaka ispravljena.

23

Page 24: Učenje programiranja programiranjem igara u Pythonu

Mala količina koda - Pygame modul ne sadrži stotine tisuća linija koda kojeg većina korisnika neće nikad koristiti. Sadrži ključne stvari, dok se dodatne stvari razvijaju izvan Pygame modula.Dodala bih još za kraj, “link” još jednog videa, predavanja profesionalnog programera igara i to upravo u Pythonu, koji osim uvođenja u Pygame modul, govori i o samom užitku programiranja, njegovoj logici te Pythonu općenito. Predavanje je opširno te mu treba posvetiti veliku količinu vremena i pažnje, no meni je puno pomoglo, stoga: http://www.youtube.com/watch?v=mTmJfWdZzbo

Nakon svega rečenog, valja zaključiti nekoliko krucijalnih stvari. Za početak, ne diskutabilna je činjenica kako je programiranje u 21. st neophodno znanje sadašnjice, ali i budućnosti. Njime svatko od nas treba ovladati, a poglavito mladi ljudi koji će jednoga dana konkurirati na tržištu rada. Open source programi, kao što je Python, posebno su “zahvalni” i korisni zbog svoje široke primjenjivosti, ali i jednostavnosti, koja nas uči početnoj programibilnoj logici i interpretaciji. No zaključak jest također, kako proces učenja programiranja, može biti vrlo zabavan, inspirativan i efikasan samo ako se malo potrudimo i prezentiramo zanimljive aktivnosti i programe. Zato programirajmo, ali kroz svijet famoznih igara

Dorotea Šušak, 2.a

24