PythonTicTacToe / app.py
aashwinik's picture
Update app.py
bca28d4 verified
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()