from random import shuffle """ board - 2D pole (seznam) reprezentující hrací desku vytiskne stav hraci desky -- tedy desku a figury na ni umístěné """ def print_board(board): pass """ board - hrací plán vráti True, pokud nekdo vyhrál, jinak False """ def check_somebody_won(board): # postupně zkouší zda se nenajde horizontální, vertikální či čtvercová skupina figurek pass """ list_of_4_figures - seznam 4 figurek, reprezentujících figurky patřící do nějaké skupiny funkce vrací True, pakliže mají všechny figurky nějakou totožnou vlastnost, jinak False """ def check_group_winning(list_of_4_figures): # pomocná funkce, volaná z check_win_... pass """ Pomocné funkce pro check_somebody_won, slouži jako wrappery pro check_group_winning, vybírající testované figurky """ def check_win_horizontal(board, row_id): figures = board[row_id] return check_group_winning(figures) def check_win_vertical(board, col_id): # figures = [] # ... # return check_group_winning(figures) pass def check_win_square(board, top_left_x, top_left_y): # figures = [] # ... # return check_group_winning(figures) pass """ user_input_figure - vstup od uzivatele, obsahuje figurku zapsanou stejnym zpusobem, jako vyse. Vstup může odkazovat již použitou figurku (v takovém případě figurku považujte za neplatnou). list_of_free_figures - seznam figurek, které ještě nebyly ve hře použity. Pokud uživatel zadal zatím nepoužitou figurku, je tato vrácena (vrátí se odpovídající figurka z list_of_free_figures). Pokud uživatel nevybral nepoužitou figurku, vrací None. """ def valid_figure_choice(user_input_figure, list_of_free_figures): pass """ Zvolí počáteční figuru a vyjme ji z figures """ def starting_figure(figures): pass """ Vlastní hra, včetně hlavní smyčky (cyklu). Hlavní smyčka končí, když už nezbývají figurky k umístění. player1_strategy, player2_strategy - strategie (funkce) implementující jednotlivé hráče Tato funkce také vygeneruje náhodně seřazený počáteční seznam figurek (pomocná funkce, mrk, mrk), prázdnou hrací desku a zvolí 1. hráči náhodnou počáteční figurku. player1_strategy i player2_strategy fungují jako aliasy na jména níže uvedených funkcí (human_player_strategy, computer_fcfs_strategy). Uvnitř kódu se budou tyto aliasy volat tak, jako by samy byly funkcemi: next_figure = player1_strategy(board, figure_to_place, list_of_free_figures) Strategie tedy sama umisťuje figurku na herní desku. Samotná hra (např. Počítač vs. počítač) se bude spouštět takto (>>> signalizuje výzvu shellu): >>> game_quarto(computer_fcfs_strategy, computer_fcfs_strategy) """ def game_quarto(player1_strategy, player2_strategy): # ... # strategies = [player1_strategy, player2_strategy] # player = 0 # next_figure = starting_figure(figures) # while not check_somebody_won(board): # strategy = strategies[...] # x1, y1, next_figure = strategy(...) # ... pass """ funkce implementující lidského hráče (řeší veškerou potřebnou interakci - zejména se tedy dotazuje hráče na zadání souřadnic pro umístění figurky a jakou figurkou má hrát protihráč) list_of_free_figures již neobsahuje figurku figure_to_place nemodifikuje žádný ze svých argumentů """ def human_player_strategy(board, figure_to_place, list_of_free_figures): pass """ velmi naivní strategie vybírající pro figurku první volné políčko, soupeři vybírá první nepoužitou figurku list_of_free_figures již neobsahuje figurku figure_to_place nemodifikuje žádný ze svých argumentů """ def computer_fcfs_strategy(board, figure_to_place, list_of_free_figures): pass """ vybírá pro figurku náhodné volné políčko, soupeři vybírá náhodnou nepoužitou figurku list_of_free_figures již neobsahuje figurku figure_to_place nemodifikuje žádný ze svých argumentů """ def computer_random_strategy(board, figure_to_place, list_of_free_figures): pass