Spaces:
Sleeping
Sleeping
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() | |