-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtic_tac_toe.py
More file actions
76 lines (65 loc) · 2.4 KB
/
tic_tac_toe.py
File metadata and controls
76 lines (65 loc) · 2.4 KB
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
import streamlit as st
import numpy as np
st.set_page_config(page_title="Tic Tac Toe", page_icon="❌⭕", layout="centered")
# ---------- YOUR LOGIC (UNCHANGED) ----------
def print_board(b):
symbols = {0: " ", 1: "X", -1: "O"}
board_str = ""
for r in range(3):
row = " | ".join(symbols[b[r, c]] for c in range(3))
board_str += row + "\n"
if r < 2:
board_str += "---+---+---\n"
return board_str
def check_winner(b):
if 3 in np.sum(b, axis=1) or 3 in np.sum(b, axis=0):
return 'X'
if -3 in np.sum(b, axis=1) or -3 in np.sum(b, axis=0):
return 'O'
if np.trace(b) == 3 or np.trace(np.fliplr(b)) == 3:
return 'X'
if np.trace(b) == -3 or np.trace(np.fliplr(b)) == -3:
return 'O'
if not 0 in b:
return 'Draw'
return None
# -------------------------------------------
# ---------- SESSION STATE ----------
if "board" not in st.session_state:
st.session_state.board = np.zeros((3, 3), dtype=int)
st.session_state.current = 1
st.session_state.game_over = False
# ---------------------------------
st.title("❌ Tic Tac Toe ⭕")
player = "X" if st.session_state.current == 1 else "O"
st.subheader(f"Current Player: {player}")
# ---------- GAME GRID ----------
for r in range(3):
cols = st.columns(3)
for c in range(3):
symbol = " "
if st.session_state.board[r, c] == 1:
symbol = "X"
elif st.session_state.board[r, c] == -1:
symbol = "O"
if cols[c].button(symbol, key=f"{r}-{c}", disabled=st.session_state.game_over):
if st.session_state.board[r, c] == 0:
st.session_state.board[r, c] = st.session_state.current
result = check_winner(st.session_state.board)
if result:
st.session_state.game_over = True
if result == "Draw":
st.success("It's a Draw!")
else:
st.success(f"Player {result} Wins!")
else:
st.session_state.current *= -1
# --------------------------------
st.text("Board State:")
st.code(print_board(st.session_state.board))
# ---------- RESET ----------
if st.button("🔄 Restart Game"):
st.session_state.board = np.zeros((3, 3), dtype=int)
st.session_state.current = 1
st.session_state.game_over = False
# --------------------------------