File size: 3,045 Bytes
fddaa62
 
 
 
 
0525c42
 
 
fddaa62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import streamlit as st
import numpy as np

# Function 1: Load game assets
def load_game_assets():
    x_image = np.array(Image.open('Aaron_Wacker_2D_RPG_topdown_tilesets_09f726d6-dd76-4462-b5c4-89f608db6995.png'))
    o_image = np.array(Image.open('Aaron_Wacker_2D_RPG_topdown_tilesets_12cd3a05-f8e7-4369-aea5-35e50d8cc09f.png'))
    blank_image = np.array(Image.open('Aaron_Wacker_2D_RPG_topdown_tilesets_f40f2d4e-8309-4e16-a0bb-25e64d9e39d2.png'))
    game_assets = {'X': x_image, 'O': o_image, 'BLANK': blank_image}
    return game_assets

# Function 2: Render game board
def render_game_board(game_state, game_assets):
    st.write('Current game state:')
    for row in game_state:
        for cell in row:
            st.image(game_assets[cell], width=100)

# Function 3: Handle player input
def handle_player_input():
    player_input = st.radio("Choose X or O", ('X', 'O'))
    return player_input

# Function 4: Update game state
def update_game_state(game_state, player_input, row, col):
    game_state[row][col] = player_input
    return game_state

# Function 5: Apply game rules
def apply_game_rules(game_state, player_input):
    # Check if player has won horizontally
    for row in game_state:
        if row.count(player_input) == 3:
            st.write(f"Player {player_input} has won!")
            return True
    
    # Check if player has won vertically
    for col in range(3):
        if game_state[0][col] == player_input and game_state[1][col] == player_input and game_state[2][col] == player_input:
            st.write(f"Player {player_input} has won!")
            return True
    
    # Check if player has won diagonally
    if game_state[0][0] == player_input and game_state[1][1] == player_input and game_state[2][2] == player_input:
        st.write(f"Player {player_input} has won!")
        return True
    elif game_state[0][2] == player_input and game_state[1][1] == player_input and game_state[2][0] == player_input:
        st.write(f"Player {player_input} has won!")
        return True
    
    # Check if the game is tied
    if all(all(cell != 'BLANK' for cell in row) for row in game_state):
        st.write("The game is tied!")
        return True
    
    return False

# Function 6: Render game rules
def render_game_rules():
    st.sidebar.markdown("""
        ### Tic Tac Toe Rules:
        - The game is played on a 3x3 grid.
        - Player 1 is X and Player 2 is O.
        - Players take turns placing their marks in empty cells.
        - The first player to get 3 of their marks in a row (horizontally, vertically, or diagonally) wins the game.
        - If all 9 cells are full and no player has won, the game is a tie.
    """)

# Main function
def main():
    st.set_page_config(page_title='Tic Tac Toe', page_icon=':game_die:', layout='wide')
    st.title('Tic Tac Toe')
    
    # Load game assets
    game_assets = load_game_assets()
    
    # Initialize game state
    game_state = [['BLANK', 'BLANK', 'BLANK'], ['BLANK', 'BLANK', 'BLANK'], ['BLANK', 'BLANK', 'BLANK']]