Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Zapomni che i Viktor ima morski shah no negoviq e po "krasiv"
- import random# Bibliotekata chrez koqto proizvolno se izbira igracha
- def check_win(b, sym):# Funkciq chrez koqto provrqvash dali ima pobeditel
- for i in range(3):
- if b[i*3] == b[i*3+1] == b[i*3+2] == sym:# Proverqva dali horizontalite sa ravni i vrushta True
- return True
- if b[i] == b[i+3] == b[i+6] == sym:# Proverqva dali vertikalite sa ravni i vrushta True
- return True
- 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
- return True
- return False# Ako nikoe ne e vqrno vrushta False
- def board_full(b):# Proverqva dali duskata e pulna
- return all(cell != " " for cell in b)# Funkciqta all proverqva dali elementi na opredeleno mqsto sa ednakvi
- # Suotvetno tova proverqva dali vsichki prazni mesta sa zaeti
- def print_board(b):# Tazi funkciq printi duskata
- for i in range(0, 9, 3):#0 3 6 9
- print(b[i], b[i+1], b[i+2])# printi go 3x3 3 reda na 3 koloni
- def log_result(result):# Tazi funkciq zapisva rezultata v textov file na ime tictactoe_results.txt
- try:
- with open("tictactoe_results.txt", "a") as f:# Suzdavash ili dopulvash dadeniq file
- f.write(result + "\n")# Vkarvash rezultata vutre
- except Exception as e:# Ako stane problem printi tova dolu
- print("Couldn't write to file:", e)
- # Setup
- board = [" " for _ in range(9)]# Tova e kak izglejda duskata
- players = ["X", "O"]# Dvata igracha ochevidno
- turn = random.choice(players)# Izpolzvaiki bibliotekata proizvolno se izbira koi e purvi
- print(f"{turn} starts the game.")
- # Game loop
- while True:# Zapochvame bezkraen cikul
- print("Board:")
- print_board(board)# printish duskata
- try:#Opitvash se da napravish tova dolu
- 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:
- """"Taka ti izglezhda reshetkata
- 0 1 2
- 3 4 5
- 6 7 8
- """
- if move < 0 or move > 8:# Proverqva dali hoda ti e nevaliden( po maluk ot 0 ili po golqm ot 8)
- print("Move must be between 0 and 8.")
- continue#Produljavash si
- if board[move] != " ":# Ako opitash hod na koito veche ima simvol ti printi tova dolnoto
- print("That spot is taken.")
- continue
- except ValueError:#Ako neshto vuvedesh ne kato horata printi tova dolu
- print("Please enter a valid number.")
- continue
- board[move] = turn# Tova izpulnqva hoda
- if check_win(board, turn):#Proverqva dali ima pobeda
- print_board(board)
- print(f"{turn} wins!")
- 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
- break#Prekusvash programata
- if board_full(board):#Proverqva dali duskata e pulna i dali nqma pobeditel
- print_board(board)
- print("It's a draw.")
- 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
- break
- turn = "X" if turn == "O" else "O"# Tova promenq hodovete sprqmo koj e igral
Advertisement
Add Comment
Please, Sign In to add comment