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()