Untitled
unknown
python
2 years ago
4.1 kB
2
Indexable
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()
Editor is loading...