Kako napraviti igru ​​Tic Tac Toe u Python sa Code Primjer

⚡ Pametni sažetak

Križić-kružić Python je projekt prilagođen početnicima koji rekreira klasičnu igru ​​s mrežom za dva igrača. Njegovo stvaranje jača temeljne vještine poput petlji, uvjetnih izraza, popisa, funkcija i rekurzije, a istovremeno provjerava retke, stupce i dijagonale kako bi se pronašao pobjednik.

  • 🎮 Gameplay: Dva igrača označavaju X i O na kvadratnoj mreži dok jedan od njih ne završi redak, stupac ili dijagonalu.
  • 🧩 Osnovna logika: Ugniježđene liste pohranjuju ploču dok petlje i uvjeti upravljaju potezima i detektiraju pobjedu ili neriješeno.
  • 🏗️ Koraci izrade: Napravite ploču, odaberite prvog igrača, zapišite unose, označite polja, a zatim provjerite ima li pobjednika u svakom krugu.
  • 🔁 Replay: Rekurzivni poziv play() ponovno pokreće meč, a validacija ulaza blokira zauzete ili poteze izvan dometa.
  • 🤖 Relevantnost umjetne inteligencije: Ista ploča je idealno igralište za minimax algoritam i agente za učenje s potkrepljenjem.
  • 🛠️ Alati: Samo Python i urednik kao što je PyCharm su potrebni; nisu potrebne vanjske biblioteke.

Tic Tac Toe Igra in Python

Tic Tac Toe Igra in Python je zanimljiv projekt koji možete isprobati. To je sjajan i zabavan projekt rješavanja izazova i može vam pomoći da savladate osnovne koncepte u PythonStvaranje zabavne igre križić-kružić pomaže vam da razvijete svoje vještine.

Možete koristiti dobar Python urednik kao što je PyCharm ili sučelje naredbenog retka.

Kako igrati igru ​​Križić-kružić?

Križić-kružić je jednostavna igra za dva igrača koju svatko može igrati bez potrebe za pločom za igru. U njoj dva igrača označavaju različita polja dok igra ne završi pobjedom ili neriješeno.

Evo kako se igra igra Križić-kružić.

Korak 1) Igra Križić-kružić počinje s praznim poljima u kvadratnoj mreži. Ovo je ploča za Križić-kružić.

Korak 2) Oba igrača biraju između dva simbola, obično Xs ili Os. Možete koristiti bilo koji drugi jedinstveni simbol u igri.

Korak 3) Trenutni igrač naizmjenično označava ispunjavajući polja ploče križić-kružić dok ne popuni dobitnu kombinaciju. To je cijeli redak, stupac ili dijagonalu s istim znakom.

Korak 4) Neriješen rezultat igre je također moguć u slučaju da su sva polja puna bez vidljivog pobjednika.

Zahtjevi

Izgradnja križića-kružića Python projekt zahtijeva razumijevanje na početnoj razini Python programski jezik. Uključuje razumijevanje petlji i iteracija "for" te za što se koristi naredba if u Python.

Također morate imati Python a Python uređivač teksta instaliran na vašem računalu za dovršetak igre Križić-kružić Python projekt. Budući da je ovo igra križić-kružić za početnike u Python, neće vam trebati nikakva Python knjižnica.

Možda će vam trebati neke vještine otklanjanja pogrešaka kako biste pronašli rješenja za greške u svom kodu, a trebali biste imati i odgovarajuće razumijevanje komponenti igre.

Tic Tac Toe Python Algoritam

Slijedite ove korake za izradu igre Križić-kružić Python programski jezik:

Korak 1) Napravite ploču za početak igre Križić-kružić.

Korak 2) Zatražite od korisnika da odluči o dimenzijama igraće ploče.

Korak 3) Nasumično odaberite prvog igrača.

Korak 4) Počinje igra Križić-kružić.

Korak 5) Igrači igraju odabirom praznog mjesta na ploči.

Korak 6) Ispunite prazno odabrano mjesto znakom igrača.

Korak 7) Pomoću logike igre odredite pobjeđuje li igrač ili je neriješeno u igri.

Korak 8) Prikažite ploču za igru ​​nakon svake igre ako nijedan igrač ne pobijedi ili dobije neriješeno s drugim igračem.

Korak 9) Prikažite poruku o izjednačenom rezultatu ili pobjedi.

Korak 10) Završi igru ​​Križić-kružić s opcijama za početak nove igre.

Full Python kod za tic tac toe

# Guru99
# Code developed by Guru99.com
# Guru99 tic-tac-toe game
#Get input
def getInput(prompt, cast=None, condition=None, errorMessage=None):
  while True:
      try:
          val = cast(input(prompt))
          assert condition is None or condition(val)
          return val
      except:
          print(errorMessage or "Invalid input.")
# Print the game board
def printBoard(board):
  print()
  for row in board:
      print(*row)
  print()
# Check if player won using the winning combinations
def checkWin(board):
  # Check rows
  for row in range(len(board)):
      for col in range(len(board)-1):
          if board[row][col] == "_" or board[row][col+1] == "_" or board[row][col] != board[row][col+1]:
              break
      else:
          return True
  # Check column numbers
  for col in range(len(board)):
      for row in range(len(board)-1):
          if board[row][col] == "_" or board[row+1][col] == "_" or board[row][col] != board[row+1][col]:
              break
      else:
          return True
  # Check left diagonal
  for cell in range(len(board)-1):
      if board[cell][cell] == "_" or board[cell+1][cell+1] == "_" or board[cell][cell] != board[cell+1][cell+1]:
          break
  else:
      return True
  # Check right diagonal
  for cell in range(len(board)-1):
      emptyCell = board[cell][len(board)-cell-1] == "_" or board[cell+1][len(board)-cell-2] == "_"
      different = board[cell][len(board)-cell-1] != board[cell+1][len(board)-cell-2]
      if emptyCell or different:
          break
  else:
      return True
  # No win
  return False
# Play tic tac toe game
def play():
  # Introduction
  print("------------\nN-DIMENSIONAL TIC TAC TOE game by guru 99.com \n------------")
  # Set up variables
  N = getInput(prompt="Guru99 says>>> Enter N, the dimensions of the board: ",
               cast=int,
               condition=lambda x: x >= 3,
               errorMessage="Invalid input. Please enter an integer greater than or equal to 3 as explained on guru99.com")
  board = [['_'] * N for _ in range(N)]
  used = 0
  turn = 0
  # Play guru99 tic tac toe game in Python using while infinite loop
  while True:
      # Print guru99 tic tac toe game board
      printBoard(board)
      # Get user pick
      pick = getInput(prompt=f"Player {turn+1} - Pick location (row, col): ",
                      cast=lambda line: tuple(map(int, line.split(" "))),
                      condition=lambda pair: min(pair) >= 0 and max(pair) < N and board[pair[0]][pair[1]] == "_",
                      errorMessage="Invalid input. Please enter a valid, unoccupied location as an integer pair.")
      # Populate location
      board[pick[0]][pick[1]] = "X" if turn == 0 else "O"
      used += 1
      # Check for win
      #Guru99 tutorial
      if checkWin(board):
          printBoard(board)
          print(f"Game over, Player {turn+1} wins.")
          break
      # Check for tie
      elif used == N*N:
          printBoard(board)
          print("Game over. Players have tied the match.")
          print("Guru99.com tic tac toe game ")
          break
      # If no win yet, update next user
      turn = (turn+1)%2
  # Check for rematch
  playAgain = getInput(prompt="Play Guru99 tic tac toe_Game again? (y/n): ",
                       cast=str,
                       condition=lambda ans: ans.strip("\n").lower() in {"y", "n"},
                       errorMessage="Invalid input. Please enter 'y' or 'n'.")
  if playAgain == 'n':
      # End the game
      print("\nGuru99 TicTacToe game ended.")
      return
  else:
      # Rematch
      play()
# Main
if __name__ == '__main__':
  play()

Tic Tac Toe Python Code izlaz

Nakon što pokrenete gornji izvorni kod, u nastavku je očekivani izlaz za ploču Križić-kružić dimenzija 3 X 3:

------------
N-DIMENSIONAL TIC TAC TOE game by guru 99.com
------------
Guru99 says>>> Enter N, the dimensions of the board: 3

_ _ _

_ _ _

_ _ _

Player 1 - Pick location (row, col): 1 1

_ _ _

_ X _

_ _ _

Player 2 - Pick location (row, col): 0 1

_ O _

_ X _

_ _ _

Player 1 - Pick location (row, col): 1 2

_ O _

_ X X

_ _ _

Player 2 - Pick location (row, col): 0 2

_ O O

_ X X

_ _ _

Player 1 - Pick location (row, col): 1 0

_ O O

X X X

_ _ _

Game over, Player 1 wins.
Play Guru99 tic tac toe_Game again? (y/n):

Full Code Kvar

Stvaranje Križić-kružić Python je jednostavno. Analizirajmo različite funkcije u bitovima kako bismo razumjeli što se događa u svakom retku:

Tiskanje ploče

Ploča za križić-kružić je glavni zaslon igre. U Python, prozor se koristi za prikaz ploče za igru.

Evo koraka koji će vam pomoći da napravite ploču za križić-kružić Python:

Python kod za Tic Tac Toe

def getInput(prompt, cast=None, condition=None, errorMessage=None):
   while True:
       try:
           val = cast(input(prompt))
           assert condition is None or condition(val)
           return val
       except:
           print(errorMessage or "Invalid input.")
# Print the board
def printBoard(board):
   print()
   for row in board:
       print(*row)
   print()
N = getInput(prompt="Guru99 says>>> Enter N, the dimensions of the board: ",
            cast=int,
            condition=lambda x: x >= 3,
            errorMessage="Invalid input. Please enter an integer greater than or equal to 3 as explained on guru99.com")
board = [['_'] * N for _ in range(N)]
used = 0
turn = 0
printBoard(board)

Code izlaz:

------------
N-DIMENSIONAL TIC TAC TOE game by guru 99.com
------------
Guru99 says>>> Enter N, the dimensions of the board: 3

_ _ _

_ _ _

_ _ _

Igra Tic Tac Toe – dobitni raspored

Da bismo provjerili je li neki igrač pobijedio, moramo provjeriti dobitne kombinacije u recima, stupcima i dijagonalama. Ako postoji pobjednik, moramo pokazati pobjedničku poruku.

Redovi

  • Za redak funkcija uzima svaki uzastopni par stupaca i provjerava dobitnu kombinaciju.
  • Pobjeđuje onaj igrač koji prvi popuni redove. Drugi igrač tako gubi.
  • Ako su dva uzastopna stupca jednaka, onda je očito da su svi elementi unutar tog retka jednaki.
  • Ako su dva različita ili red sadrži praznu ćeliju, još uvijek nema pobjednika.
  • Zatim implementiramo uvjete gubitka i dodajemo stanku. Ako je bilo koji od ovih uvjeta za gubitak točan, nismo imali pobjednika u označenom retku.
  • Izjava else daje istinit povrat koji pokazuje da postoji pobjednik.
  • Prekid izlazi iz ove petlje kako bi prešao na sljedeći red.

Kolumne

Za stupce ponavljamo istu funkciju kao i za retke. Provjeravamo je li igrač pobijedio nakon što svaki igrač odabere svoje mjesto.

Dijagonalni red pobjeđuje

Za lijevu dijagonalu zadatak postaje jednostavniji. Uvijek ćemo uspoređivati ​​ćelije u dijagonalama. Međutim, u slučaju da nema pobjednika, možemo prijeći na sljedeću uputu.

Igraj logičku igru

Ovo je glavna funkcija igre. Za to možemo koristiti varijable koje pohranjuju informacije.

  • Prva varijabla je veličina ploče pohranjena u "N". Igra će dobiti veličinu ploče nakon što od korisnika zatraži da unese broj.
  • Dakle, kada unesete vrijednost, ona se obrađuje.
  • Također stvaramo poruku o pogrešci koja prikazuje igračima kada se upiše bilo koji nevažeći broj.
  • Zatim možemo stvoriti dvije varijable koje popunjavaju "X" ili "O" kada je ćelija ispunjena.
  • Zatim pokažite igračima ploču za igru. Nakon ovoga, saznajte unos igrača.
  • Logika će zatim označenu ćeliju označiti kao ispunjenu i provjeriti pobjedu ili remi.
  • Ako nema pobjednika, igra traži da igra sljedeći igrač. Ako dođe do pobjede ili remija, igra može pitati korisnike žele li novu igru.

Pitanja i odgovori

Da. Križić-kružić je klasični početnički projekt koji pretvara petlje, uvjete i funkcije u funkcionalnu igru. Gradi samopouzdanje, jača osnovnu sintaksu i priprema vas za veće projekte bez potrebe za vanjskim bibliotekama.

Pojačava ugniježđene liste za ploču, for petlje i while petlje za poteze, if naredbe za provjere pobjede, funkcije za strukturu i rekurziju za ponovno pokretanje. Ove osnove se izravno prenose na naprednije Python Programi.

Da. Osim konzolne verzije, biblioteke poput Tkintera i Pygamea dodaju gumbe na koje se može kliknuti, nacrtanu mrežu i unos mišem. Logika igre ostaje ista; mijenjaju se samo slojevi prikaza i unosa.

Križić-kružić je riješena igra. Kada oba igrača igraju optimalno, svaka prijetnja se može blokirati, tako da nitko ne može iznuditi pobjedu. Zato besprijekoran meč, ljudski ili računalni, uvijek završava neriješeno.

Osnovna konzolna verzija početniku traje jedan do tri sata nakon što se petlje i uvjeti upoznaju. Dodavanje validacije unosa, skalabilne ploče ili grafičkog sučelja produžuje projekt na vikend vježbe.

Zamijenite jednog igrača minimax funkcijom. Rekurzivno istražuje svaki mogući potez, zabilježivši dobitke, gubitke i neriješene rezultate, a zatim bira potez s najboljim zajamčenim ishodom. Na maloj ploči to čini računalo nemogućim za pobijediti.

Da. Agenti za učenje s potkrepljenjem poput Q-učenja poboljšavaju se igranjem tisuća igara i nagrađivanjem dobitnih poteza. Ploče se pohranjuju kao nizovi s numpy, omogućujući modelu da nauči gotovo optimalnu strategiju bez čvrsto kodiranih pravila.

Da. GitHub Copilot i slični AI asistenti mogu izgraditi ploču, okrenuti petlju i pobijediti u čekovima iz kratkog prompta. Tretirajte izlaz kao prvu verziju, a zatim sami testirajte rubne slučajeve poput neriješenih rezultata i nevažećih poteza.

Sažmite ovu objavu uz: