boyan1324

viki tic tac toe

May 27th, 2025
936
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.31 KB | None | 0 0
  1. # Zapomni che i Viktor ima morski shah no negoviq e po "krasiv"
  2. import random# Bibliotekata chrez koqto proizvolno se izbira igracha
  3.  
  4. def check_win(b, sym):# Funkciq chrez koqto provrqvash dali ima pobeditel
  5.     for i in range(3):
  6.         if b[i*3] == b[i*3+1] == b[i*3+2] == sym:# Proverqva dali horizontalite sa ravni i vrushta True
  7.             return True
  8.         if b[i] == b[i+3] == b[i+6] == sym:# Proverqva dali vertikalite sa ravni i vrushta True
  9.             return True
  10.     if b[0] == b[4] == b[8] == sym or b[2] == b[4] == b[6] == sym:# Tova proverqva dali diagonalite sa ravni i vrushta True
  11.         return True
  12.     return False# Ako nikoe ne e vqrno vrushta False
  13.  
  14. def board_full(b):# Proverqva dali duskata e pulna
  15.     return all(cell != " " for cell in b)# Funkciqta all proverqva dali elementi na opredeleno mqsto sa ednakvi
  16.     # Suotvetno tova proverqva dali vsichki prazni mesta sa zaeti
  17.  
  18. def print_board(b):# Tazi funkciq printi duskata
  19.     for i in range(0, 9, 3):#0 3 6 9
  20.         print(b[i], b[i+1], b[i+2])# printi go 3x3 3 reda na 3 koloni
  21.  
  22. def log_result(result):# Tazi funkciq zapisva rezultata v textov file na ime tictactoe_results.txt
  23.     try:
  24.         with open("tictactoe_results.txt", "a") as f:# Suzdavash ili dopulvash dadeniq file
  25.             f.write(result + "\n")# Vkarvash rezultata vutre
  26.     except Exception as e:# Ako stane problem printi tova dolu
  27.         print("Couldn't write to file:", e)
  28.  
  29. # Setup
  30. board = [" " for _ in range(9)]# Tova e kak izglejda duskata
  31. players = ["X", "O"]# Dvata igracha ochevidno
  32. turn = random.choice(players)# Izpolzvaiki bibliotekata proizvolno se izbira koi e purvi
  33. print(f"{turn} starts the game.")
  34.  
  35. # Game loop
  36. while True:# Zapochvame bezkraen cikul
  37.     print("Board:")
  38.     print_board(board)# printish duskata
  39.  
  40.     try:#Opitvash se da napravish tova dolu
  41.         move = int(input(f"{turn}'s move (0-8): "))# Igrachut trqbva da podade hoda si kato chislo ot 0 do 8 zashtoto duskata e taka:
  42.         """"Taka ti izglezhda reshetkata
  43.        0 1 2
  44.        3 4 5
  45.        6 7 8
  46.        """
  47.         if move < 0 or move > 8:# Proverqva dali hoda ti e nevaliden( po maluk ot 0 ili po golqm ot 8)
  48.             print("Move must be between 0 and 8.")
  49.             continue#Produljavash si
  50.         if board[move] != " ":# Ako opitash hod na koito veche ima simvol ti printi tova dolnoto
  51.             print("That spot is taken.")
  52.             continue
  53.     except ValueError:#Ako neshto vuvedesh ne kato horata printi tova dolu
  54.         print("Please enter a valid number.")
  55.         continue
  56.  
  57.     board[move] = turn# Tova izpulnqva hoda
  58.  
  59.     if check_win(board, turn):#Proverqva dali ima pobeda
  60.         print_board(board)
  61.         print(f"{turn} wins!")
  62.         log_result(f"{turn} won with board:\n{board[0]} {board[1]} {board[2]}\n{board[3]} {board[4]} {board[5]}\n{board[6]} {board[7]} {board[8]}")#Zapisvash duskata vuv fail
  63.         break#Prekusvash programata
  64.  
  65.     if board_full(board):#Proverqva dali duskata e pulna i dali nqma pobeditel
  66.         print_board(board)
  67.         print("It's a draw.")
  68.         log_result(f"Draw with board:\n{board[0]} {board[1]} {board[2]}\n{board[3]} {board[4]} {board[5]}\n{board[6]} {board[7]} {board[8]}")#Zapisvash duskata vuv fail
  69.         break
  70.  
  71.     turn = "X" if turn == "O" else "O"# Tova promenq hodovete sprqmo koj e igral
  72.  
Advertisement
Add Comment
Please, Sign In to add comment