Izrada jednostavne igre Tic Tac Toe u Pythonu
Hajde da zajedno kreiramo jednostavnu igru Tic Tac Toe koristeći Python. Ova vežba će vam pomoći da razvijete logičko razmišljanje u programiranju i shvatite kako da strukturirate kod na efikasan način.
Igre su oduvek bile popularan vid zabave. Možemo pronaći razne igre na internetu, mobilnim uređajima, desktop računarima i slično. Međutim, naš cilj danas nije da kreiramo kompleksnu igru. Umesto toga, fokusiraćemo se na razvoj CLI (Command Line Interface) verzije Tic Tac Toe igre koristeći Python.
Ako vam koncept Tic Tac Toe nije poznat, možete ga vizuelno istražiti ovde. Bez brige, čak i ako niste upoznati sa pravilima, sve ćemo objasniti.
Šta je Tic Tac Toe?
Ovaj vodič je organizovan u tri glavna dela. Prvo, razmotrićemo pravila i način igranja Tic Tac Toe igre. Zatim ćemo preći na algoritam koji će nam pomoći u razvijanju logike igre. Na kraju, predstavićemo strukturirani kod i njegovo detaljno objašnjenje.
Ukoliko već znate kako se igra Tic Tac Toe, možete preskočiti prvi deo.
Započnimo odmah sa prvim delom.
Kako se igra Tic Tac Toe?
U igri učestvuju dva igrača. Svaki igrač je predstavljen određenim simbolom. Najčešće korišćeni simboli su X i O. Igra se odvija na tabli sa 9 polja raspoređenih u 3×3 matricu.
Pogledajte vizuelni prikaz Tic Tac Toe table.
Tic Tac Toe tabla
Tok igre je sledeći:
- Prvi igrač postavlja svoj simbol na jedno od slobodnih polja.
- Zatim, drugi igrač postavlja svoj simbol na neko od preostalih slobodnih polja.
- Cilj je da se postave tri ista simbola u nizu, horizontalno, vertikalno ili dijagonalno.
- Igra se nastavlja dok jedan od igrača ne pobedi ili dok se tabla ne popuni bez pobednika (nerešeno).
Pogledajmo nekoliko vizuelnih primera igre.
U prikazanoj igri, igrač koji koristi simbol X je pobednik. Svi simboli X su raspoređeni dijagonalno. Time je igrač sa simbolom X ostvario pobedu.
Postoji ukupno 8 kombinacija za postizanje pobede. Pogledajmo sve te kombinacije.
U slučaju da se tabla popuni bez pobedničke kombinacije, igra se završava nerešenim rezultatom. Nadamo se da sada razumete kako se igra Tic Tac Toe.
Sada možete posetiti ovaj link i isprobati igru sami kako biste u potpunosti razumeli pravila. Ukoliko ste već upoznati sa igrom, slobodno pređite na sledeći odeljak.
Algoritam
U ovom delu ćemo detaljno razmotriti algoritam koji će nam pomoći u pisanju koda. Algoritam se može implementirati u bilo kom programskom jeziku po vašem izboru. Pogledajmo kako to funkcioniše.
- Kreirajte tablu koristeći dvodimenzionalni niz i inicijalizujte svaki element kao prazan.
- Možete koristiti bilo koji simbol za predstavljanje praznog polja. Mi ćemo koristiti crticu ‘-‘.
- Napišite funkciju koja proverava da li je tabla popunjena.
- Iterirajte kroz tablu i vratite false ako tabla sadrži prazan znak, inače vratite true.
- Napišite funkciju koja proverava da li je igrač pobedio.
- Potrebno je da proverimo sve pobedničke kombinacije koje smo razmatrali u prethodnom odeljku.
- Proverite sve redove, kolone i dve dijagonale.
- Napišite funkciju koja prikazuje tablu korisniku tokom igre.
- Napišite funkciju za početak igre.
- Nasumično izaberite prvog igrača.
- Kreirajte beskonačnu petlju koja se prekida kada se igra završi (pobeda ili nerešen rezultat).
- Prikažite tablu korisniku kako bi mogao odabrati poziciju za svoj sledeći potez.
- Zatražite od korisnika da unese broj reda i kolone.
- Ažurirajte tablu simbolom igrača na izabranoj poziciji.
- Proverite da li je trenutni igrač pobedio.
- Ako je trenutni igrač pobedio, ispišite poruku o pobedi i prekinite beskonačnu petlju.
- Proverite da li je tabla popunjena.
- Ako je tabla popunjena, ispišite poruku o nerešenom rezultatu i prekinite beskonačnu petlju.
- Na kraju, prikažite korisniku konačni izgled table.
Možda možete zamisliti kako će se sve odvijati. Ne brinite ako niste sve u potpunosti razumeli. Kada vidite kod, sve će vam biti jasnije.
Pređimo sada na deo sa kodom. Pretpostavljamo da imate instaliran Python na svom računaru da biste mogli isprobati kod.
Kod
Pregledajte kod ispod.
import random class TicTacToe: def __init__(self): self.board = [] def create_board(self): for i in range(3): row = [] for j in range(3): row.append('-') self.board.append(row) def get_random_first_player(self): return random.randint(0, 1) def fix_spot(self, row, col, player): self.board[row][col] = player def is_player_win(self, player): win = None n = len(self.board) # Provera redova for i in range(n): win = True for j in range(n): if self.board[i][j] != player: win = False break if win: return win # Provera kolona for i in range(n): win = True for j in range(n): if self.board[j][i] != player: win = False break if win: return win # Provera dijagonala win = True for i in range(n): if self.board[i][i] != player: win = False break if win: return win win = True for i in range(n): if self.board[i][n - 1 - i] != player: win = False break if win: return win return False def is_board_filled(self): for row in self.board: for item in row: if item == '-': return False return True def swap_player_turn(self, player): return 'X' if player == 'O' else 'O' def show_board(self): for row in self.board: for item in row: print(item, end=" ") print() def start(self): self.create_board() player = "X" if self.get_random_first_player() == 1 else 'O' while True: print(f"Igrač {player} je na potezu") self.show_board() # Uzimanje korisničkog unosa row, col = list(map(int, input("Unesite broj reda i kolone: ").split())) print() # Postavljanje simbola na tabli self.fix_spot(row - 1, col - 1, player) # Provera da li je igrač pobedio if self.is_player_win(player): print(f"Igrač {player} je pobedio!") break # Provera da li je igra nerešena if self.is_board_filled(): print("Nerešen rezultat!") break # Zamena igrača player = self.swap_player_turn(player) # Prikaz konačnog stanja table print() self.show_board() # Pokretanje igre tic_tac_toe = TicTacToe() tic_tac_toe.start()
Pogledajte primer izlaznog rezultata.
$ python tic_tac_toe.py Igrač X je na potezu - - - - - - - - - Unesite broj reda i kolone: 1 1 Igrač O je na potezu X - - - - - - - - Unesite broj reda i kolone: 2 1 Igrač X je na potezu X - - O - - - - - Unesite broj reda i kolone: 1 2 Igrač O je na potezu X X - O - - - - - Unesite broj reda i kolone: 1 3 Igrač X je na potezu X X O O - - - - - Unesite broj reda i kolone: 2 2 Igrač O je na potezu X X O O X - - - - Unesite broj reda i kolone: 3 3 Igrač X je na potezu X X O O X - - - O Unesite broj reda i kolone: 3 2 Igrač X je pobedio! X X O O X - - X O
Nekoliko ključnih tačaka koje će vam pomoći da razumete strukturu koda:
- Koristili smo klasu da bismo sve metode imali na jednom mestu. Ovo omogućava jednostavno ponovno korišćenje u drugim projektima.
- Zatim smo definisali posebne funkcije za svaku pojedinačnu odgovornost, čak i za manje zadatke. Ovo olakšava održavanje koda.
- Gornja dva pristupa omogućavaju laku nadogradnju aplikacije ako želimo da poboljšamo igru.
Slobodno prilagodite strukturu i poboljšajte je prema vašim potrebama. Struktura koda nije ograničena.
Zaključak
Čestitamo! 😎 Uspešno ste kreirali igru od početka. Iako ovo nije vizuelna igra koju svakodnevno igramo, ona vam pomaže da razvijete logičko razmišljanje i održavate čistu strukturu u kodu. Pratite slične smernice da biste kreirali zanimljive igre poput ove. Možete pronaći inspiraciju u igrama koje ste igrali u detinjstvu.
Srećno kodiranje! 👩💻
Zatim istražite kako da kreirate igru pogađanja brojeva i kako da testirate kod uz pomoć Python unit test modula.
Da li vam se dopao ovaj članak? Podelite ga sa drugima!