File size: 7,502 Bytes
2752e5e
 
ac27494
8ea503c
 
8fb5384
 
 
8782fa7
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
 
58902ba
fdbcf27
b24d917
237d5b1
b24d917
 
237d5b1
cb70215
b2dcf09
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c224d5d
 
 
7e8af86
c224d5d
e52a895
 
74695d2
 
be2b0dc
74695d2
ac27494
e52a895
 
 
fdbcf27
a890b42
b2dcf09
 
 
 
 
 
 
 
fdbcf27
b2dcf09
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
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
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." ,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))

#def isGameTie()

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
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)
        check=isGameWon()
        if check:            
            st.subheader('', divider='rainbow')
            st.subheader('You have the won the Game!!!')
        elif len(st.session_state.legal_numbers)==0:
            st.subheader('', divider='rainbow')
            st.subheader('The Game is Tie!!!')            
        
    else:
        display_board(user_input)
        error_Message("Please enter any of these numbers: " + "Legal Numbers: " + "".join(str(st.session_state.legal_numbers)))