File size: 7,890 Bytes
2752e5e
 
0a29df0
8ea503c
 
8fb5384
 
 
8782fa7
0a29df0
 
ac27494
 
36e2aa7
5f4fc3b
8ef9f1b
 
8060513
348a278
 
b13feb5
 
8782fa7
b13feb5
da21713
8782fa7
8ec3185
fdbcf27
 
 
ac27494
6d57342
8fb5384
 
 
b07a75e
7e8af86
 
03da642
 
7e8af86
8fb5384
7e8af86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
af15634
a890b42
 
 
d0e7795
1299992
d0e7795
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ac27494
8fb5384
63525c3
8fb5384
 
7028ae2
a676e79
58902ba
fdbcf27
b24d917
237d5b1
b24d917
 
237d5b1
cb70215
b2dcf09
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c224d5d
 
 
7e8af86
c224d5d
e52a895
 
74695d2
a676e79
 
0a29df0
a676e79
091f8e1
74695d2
ac27494
e52a895
 
 
fdbcf27
a890b42
b2dcf09
b5ee351
 
b2dcf09
 
091f8e1
b2dcf09
b5ee351
b2dcf09
 
b5ee351
fdbcf27
bca28d4
f222ef9
a676e79
 
 
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
import streamlit as st

#Sessions
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"  
if 'submit_disabled' not in st.session_state:
    st.session_state.submit_disabled = False

def get_userInput(): 
    input = st.number_input("Enter a number between 1 to 9." ,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"
    st.session_state.submit_disabled=False
    st.rerun()
    
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))

def isGameWon():
    
         if st.session_state.gridNumbers[0] == "X" and st.session_state.gridNumbers[1] == "X" and st.session_state.gridNumbers[2] == "X":
             return True
         elif st.session_state.gridNumbers[3] == "X" and st.session_state.gridNumbers[4] == "X" and st.session_state.gridNumbers[5] == "X":
             return True  
         elif st.session_state.gridNumbers[6] == "X" and st.session_state.gridNumbers[7] == "X" and st.session_state.gridNumbers[8] == "X":
             return True
         elif st.session_state.gridNumbers[0] == "X" and st.session_state.gridNumbers[4] == "X" and st.session_state.gridNumbers[8] == "X":
             return True
         elif st.session_state.gridNumbers[2] == "X" and st.session_state.gridNumbers[4] == "X" and st.session_state.gridNumbers[6] == "X":
             return True
         elif st.session_state.gridNumbers[0] == "X" and st.session_state.gridNumbers[3] == "X" and st.session_state.gridNumbers[6] == "X":
             return True
         elif st.session_state.gridNumbers[1] == "X" and st.session_state.gridNumbers[4] == "X" and st.session_state.gridNumbers[7] == "X":
             return True
         elif st.session_state.gridNumbers[2] == "X" and st.session_state.gridNumbers[5] == "X" and st.session_state.gridNumbers[8] == "X":
             return True
         elif st.session_state.gridNumbers[0] == "O" and st.session_state.gridNumbers[1] == "O" and st.session_state.gridNumbers[2] == "O":
             return True
         elif st.session_state.gridNumbers[3] == "O" and st.session_state.gridNumbers[4] == "O" and st.session_state.gridNumbers[5] == "O":
             return True  
         elif st.session_state.gridNumbers[6] == "O" and st.session_state.gridNumbers[7] == "O" and st.session_state.gridNumbers[8] == "O":
             return True
         elif st.session_state.gridNumbers[0] == "O" and st.session_state.gridNumbers[4] == "O" and st.session_state.gridNumbers[8] == "O":
             return True
         elif st.session_state.gridNumbers[2] == "O" and st.session_state.gridNumbers[4] == "O" and st.session_state.gridNumbers[6] == "O":
             return True
         elif st.session_state.gridNumbers[0] == "O" and st.session_state.gridNumbers[3] == "O" and st.session_state.gridNumbers[6] == "O":
             return True
         elif st.session_state.gridNumbers[1] == "O" and st.session_state.gridNumbers[4] == "O" and st.session_state.gridNumbers[7] == "O":
             return True
         elif st.session_state.gridNumbers[2] == "O" and st.session_state.gridNumbers[5] == "O" and st.session_state.gridNumbers[8] == "O":
             return True 
         else: 
             return False
    
     
#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
col1, col2 = st.columns(2)
with col1:
    submit=st.button('Submit', key='submit', disabled=st.session_state.submit_disabled)
with col2:
    reset=st.button('Reset', key='reset')

#Button functionality
if submit:   
    valid=validate_userInput(user_input)
    if valid:
        update_legalNumbers(user_input)
        display_board(user_input)
        check=isGameWon()
        if check:        
            st.session_state.submit_disabled=True
            st.subheader('', divider='rainbow')
            st.subheader('You have the won the Game!!!')
            
        elif len(st.session_state.legal_numbers)==0:
            st.session_state.submit_disabled=True
            st.subheader('', divider='rainbow')
            st.subheader('The Game is Tie!!!')            
            
    else:
        display_board(0)
        error_Message("Please enter any of these numbers: " + "Legal Numbers: " + "".join(str(st.session_state.legal_numbers)))

if reset:
    reset_game()