File size: 4,437 Bytes
2752e5e
 
ac27494
8ea503c
 
8fb5384
 
 
 
fcc7d30
ac27494
 
e52a895
5f4fc3b
8ef9f1b
 
8060513
348a278
 
b13feb5
 
102f8ec
b13feb5
da21713
102f8ec
8ec3185
fdbcf27
 
 
ac27494
6d57342
8fb5384
 
 
b07a75e
7e8af86
 
03da642
 
7e8af86
8fb5384
7e8af86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
af15634
a890b42
 
 
d0e7795
1299992
d0e7795
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ac27494
8fb5384
63525c3
8fb5384
 
58902ba
fdbcf27
b24d917
237d5b1
b24d917
 
237d5b1
cb70215
c224d5d
 
 
7e8af86
c224d5d
e52a895
 
74695d2
 
be2b0dc
74695d2
ac27494
e52a895
 
 
fdbcf27
a890b42
fdbcf27
f222ef9
40f1b61
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import streamlit as st

#Globals
if "legal_numbers" not in st.session_state:
    st.session_state.legal_numbers = [1,2,3,4,5,6,7,8,9]
if "gridNumbers" not in st.session_state:
    st.session_state.gridNumbers = ["...", "...", "...", "...", "...", "...", "...", "...", "..."]
if "Value" not in st.session_state:
    st.session_state.Value = "X"
    

def get_userInput(): 
    input = st.number_input("Enter a number between 1 to 9 to mark " + st.session_state.Value,min_value=1,max_value=9, key="int", on_change=None)
    return input

def validate_userInput(user_input):
    #user_input = int(user_input)
        if user_input >= 1 and user_input <= 9:                
            if user_input in st.session_state.legal_numbers:
                return True
            else: 
                st.write("input is not in session " + user_input)
                return False
        else:
            st.write("input is not between 1 and 9 " + user_input)
            return False

def error_Message(msg):
    st.write(msg)

def toggleValue():
    if st.session_state.Value == "X":
        st.session_state.Value = "O"
    else:
        st.session_state.Value = "X"

def display_guide():
    st.text("How to play: Enter the grid number as shown below to mark 'X' or 'O'. \n"+
    "Kindly pick any number shown in Legal Numbers. \n" +
    "Number cannot be repeated more than twice.")
    
    col1, col2, col3 = st.columns(3)
    col4, col5, col6 = st.columns(3)
    col7, col8, col9 = st.columns(3)    
    with col1:
        st.text("1")
    with col2:
        st.text("2")
    with col3:
        st.text("3")
    with col4:
        st.text("4")
    with col5:
        st.text("5")
    with col6:
        st.text("6")
    with col7:
        st.text("7")
    with col8:
        st.text("8")
    with col9:
        st.text("9")

def display_board(num):  
    col1, col2, col3 = st.columns(3)
    col4, col5, col6 = st.columns(3)
    col7, col8, col9 = st.columns(3)
    
    if int(num) == 0:        
        with col1:
            st.text(st.session_state.gridNumbers[0])
        with col2:
            st.text(st.session_state.gridNumbers[1])
        with col3:
            st.text(st.session_state.gridNumbers[2])
        with col4:
            st.text(st.session_state.gridNumbers[3])
        with col5:
            st.text(st.session_state.gridNumbers[4])
        with col6:
            st.text(st.session_state.gridNumbers[5])
        with col7:
            st.text(st.session_state.gridNumbers[6])
        with col8:
            st.text(st.session_state.gridNumbers[7])
        with col9:
            st.text(st.session_state.gridNumbers[8])
    else:
        st.session_state.gridNumbers[int(num)-1]= st.session_state.Value    
        with col1:
            st.text(st.session_state.gridNumbers[0])
        with col2:
            st.text(st.session_state.gridNumbers[1])
        with col3:
            st.text(st.session_state.gridNumbers[2])
        with col4:
            st.text(st.session_state.gridNumbers[3])
        with col5:
            st.text(st.session_state.gridNumbers[4])
        with col6:
            st.text(st.session_state.gridNumbers[5])
        with col7:
            st.text(st.session_state.gridNumbers[6])
        with col8:
            st.text(st.session_state.gridNumbers[7])
        with col9:
            st.text(st.session_state.gridNumbers[8])
        toggleValue()

def reset_game():
    st.session_state.legal_numbers = [1,2,3,4,5,6,7,8,9]
    st.session_state.gridNumbers = ["...", "...", "...", "...", "...", "...", "...", "...", "..."]
    st.session_state.Value = "X"
    
def update_legalNumbers(number):
    if number == 0:
       "Legal Numbers: " + "".join(str(st.session_state.legal_numbers))
    else:
       st.session_state.legal_numbers.remove(int(user_input))
       "Legal Numbers: " + "".join(str(st.session_state.legal_numbers))

#UIApp starts here
st.set_page_config(page_title="Python - Tic Tac Toe", page_icon=":python:")
st.header("Python - Tic Tac Toe")
display_guide()

user_input=get_userInput()

#UI Buttons
submit=st.button('Submit')
#replay=st.button('Replay')

#Button functionality
if submit:   
    valid=validate_userInput(user_input)
    if valid:
        update_legalNumbers(user_input)
        display_board(user_input)
    else:
        error_Message("Please enter any of these numbers: " + "Legal Numbers: " + "".join(str(st.session_state.legal_numbers)))