from random import randrange
board = []
row = 3
column = 3
number = 1
counter = 1
def preper_board():
# przygotowanie tablicy przy uruchomieniu programu
global board
board = [[1 + i + 3*j for i in range(column)]for j in range(row)]
board[1][1] = "X"
def display_board(board):
# Funkcja, która przyjmuje jeden parametr zawierający bieżący stan tablicy
# i wyświetla go w oknie konsoli.
for i in range(row):
for j in range(1):
print("+" + 3*"-------+")
print("|" + 3*" |")
print("|",board[i][j],"|",board[i][j+1],"|",board[i][j+2],"|", sep=" ")
print("|" + 3*" |")
print("+" + 3*"-------+")
def enter_move(board):
#
# Funkcja, która przyjmuje parametr odzwierciedlający biężący stan tablicy,
# prosi użytkownika o wykonanie ruchu,
# sprawdza dane wejściowe i aktualizuje tablicę zgodnie z decyzją użytkownika.
#
move = 0
lista = []
lista_numerow = []
while True:
try:
move = int(input("Wykonaj swój ruch: "))
lista = make_list_of_free_fields(board)
lista_numerow = [x[i+1] + 1 + 3*x[i] for x in lista for i in range(1)]
if move not in lista_numerow:
raise ValueError
break
except ValueError:
print("Tylko liczby całkowitę dostępne do wyboru")
except:
print("Wprowadź liczbę całkowitą")
# wprowadznie parametru do tablicy
put_user_choice(board, move)
display_board(board)
victory_for(board, "O")
def put_user_choice(board, move):
for x in board:
for i in range(column):
if x[i] == move:
x[i] = "O"
def put_computer_choice(board, move):
for x in board:
for i in range(column):
if x[i] == move:
x[i] = "X"
def make_list_of_free_fields(board):
#
# Funkcja, która przegląda tablicę i tworzy listę wszystkich wolnych pól;
# lista składa się z krotek, a każda krotka zawiera parę liczb odzwierciedlających rząd i kolumnę.
#
list_free = [(i, j) for i in range(row) for j in range(column) if board[i][j] != "O" and board[i][j] != "X"]
return list_free
def victory_for(board, sign):
#
# Funkcja, która dokonuje analizy stanu tablicy w celu sprawdzenia
# czy użytkownik/gracz stosujący "O" lub "X" wygrał rozgrywkę.
#
dic = {}
for i in range(row):
for j in range(column):
dic[j+1+3*i] = board[i][j]
if dic[1] == sign and dic[4] == sign and dic[7] == sign or \
dic[2] == sign and dic[5] == sign and dic[8] == sign or \
dic[3] == sign and dic[6] == sign and dic[9] == sign or \
dic[1] == sign and dic[2] == sign and dic[3] == sign or \
dic[4] == sign and dic[5] == sign and dic[6] == sign or \
dic[7] == sign and dic[8] == sign and dic[9] == sign or \
dic[1] == sign and dic[5] == sign and dic[9] == sign or \
dic[3] == sign and dic[5] == sign and dic[7] == sign:
if sign == "O":
print("Wygrałeś!")
return False
else:
print("Wygrywa komputer")
return False
elif counter < 9:
if sign == "O":
draw_move(board)
return True
else:
enter_move(board)
return True
else:
print("No to mamy remis :)")
return False
def draw_move(board):
#
# Funkcja, która wykonuje ruch za komputer i aktualizuje tablicę.
#
lista = make_list_of_free_fields(board)
lista_numerow = [x[i+1] + 1 + 3*x[i] for x in lista for i in range(1)]
while True:
move = 1 + randrange(8)
if move is lista_numerow:
continue
else:
put_computer_choice(board, move)
break
display_board(board)
victory_for(board, "X")
def main():
preper_board()
display_board(board)
flag = True
while True:
enter_move(board)
main()