""" 0 1 2 0 |0> |1> |1> 1 2 1. virtual environment 2. qiskit install """ #from multiprocessing.spawn import import_main_pat #from tkinter import Image #from tkinter.tix import IMAGE from PIL import Image import numpy as np import pandas as pd import streamlit as st import math from game import getRandom, validate def main(): #to give a menu menu= ['PLAY','INSTRUCTIONS','ABOUT'] option=st.sidebar.selectbox(" MENU",menu) #cases if option==menu[0]: # Play st.write("Welcome to Quantum Tic Tac Toe...Lets start playing. Before starting if you dont know What is a Q-comp..then go to [ Quantum Computer/Computing](https://en.wikipedia.org/wiki/Quantum_computing)") st.write("Computer --> |0>") st.write("User --> |1>") psi= '|φ>' if 'board' not in st.session_state: st.session_state.board=np.array([[psi,psi,psi],[psi,psi,psi],[psi,psi,psi]]) st.session_state.available_moves=[0,1,2,3,4,5,6,7,8,9] #dropdown moves = st.selectbox("Make a move !", st.session_state.available_moves) if moves==1: if st.session_state.board[0,0]==psi: #for one time initialization-->1 time selection st.session_state.board[0,0]=getRandom() userFlag=validate(st.session_state.board) if not userFlag: st.dataframe(st.session_state.board) st.session_state.available_moves=list() # user won comp_square=np.random.randint(1,9) col = (comp_square-1)%3 row = math.floor((comp_square-1)/3) compVal = getRandom() if st.session_state.board[row,col]==psi: st.session_state.board[row,col]=compVal # if that board piece is unoccupied, to give the value in it #============== validation for the comp side ================== compFlag=validate(st.session_state.board) if not compFlag: return 0 st.write("Computers move :",comp_square) st.write("Comps value :",compVal) st.dataframe(st.session_state.board) else: st.dataframe(st.session_state.board) elif moves==2: if st.session_state.board[0,1]==psi: #for one time initialization-->1 time selection st.session_state.board[0,1]=getRandom() userFlag=validate(st.session_state.board) if not userFlag: st.dataframe(st.session_state.board) st.session_state.available_moves=list() # user won comp_square=np.random.randint(1,9) col = (comp_square-1)%3 row = math.floor((comp_square-1)/3) compVal = getRandom() if st.session_state.board[row,col]==psi: st.session_state.board[row,col]=compVal # if that board piece is unoccupied, to give the value in it #============== validation for the comp side ================== compFlag=validate(st.session_state.board) if not compFlag: return 0 st.write("Computers move :",comp_square) st.write("Comps value :",compVal) st.dataframe(st.session_state.board) else: st.dataframe(st.session_state.board) elif moves==3: if st.session_state.board[0,2]==psi: #for one time initialization-->1 time selection st.session_state.board[0,2]=getRandom() userFlag=validate(st.session_state.board) if not userFlag: st.dataframe(st.session_state.board) st.session_state.available_moves=list() # user won comp_square=np.random.randint(1,9) col = (comp_square-1)%3 row = math.floor((comp_square-1)/3) compVal = getRandom() if st.session_state.board[row,col] == psi: st.session_state.board[row,col]=compVal # if that board piece is unoccupied, to give the value in it #============== validation for the comp side ================== compFlag=validate(st.session_state.board) if not compFlag: return 0 st.write("Computers move :",comp_square) st.write("Comps value :",compVal) st.dataframe(st.session_state.board) else: st.dataframe(st.session_state.board) #******************************************************** if moves==4: if st.session_state.board[1,0]==psi: #for one time initialization-->1 time selection st.session_state.board[1,0]=getRandom() userFlag=validate(st.session_state.board) if not userFlag: st.dataframe(st.session_state.board) st.session_state.available_moves=list() # user won comp_square=np.random.randint(1,9) col = (comp_square-1)%3 row = math.floor((comp_square-1)/3) compVal = getRandom() if st.session_state.board[row,col]==psi: st.session_state.board[row,col]=compVal # if that board piece is unoccupied, to give the value in it #============== validation for the comp side ================== compFlag=validate(st.session_state.board) if not compFlag: return 0 st.write("Computers move :",comp_square) st.write("Comps value :",compVal) st.dataframe(st.session_state.board) else: st.dataframe(st.session_state.board) elif moves==5: if st.session_state.board[1,1]==psi: #for one time initialization-->1 time selection st.session_state.board[1,1]=getRandom() userFlag=validate(st.session_state.board) if not userFlag: st.dataframe(st.session_state.board) st.session_state.available_moves=list() # user won comp_square=np.random.randint(1,9) col = (comp_square-1)%3 row = math.floor((comp_square-1)/3) compVal = getRandom() if (st.session_state.board[row,col]==psi): st.session_state.board[row,col]=compVal # if that board piece is unoccupied, to give the value in it #============== validation for the comp side ================== compFlag=validate(st.session_state.board) if not compFlag: return 0 st.write("Computers move :",comp_square) st.write("Comps value :",compVal) st.dataframe(st.session_state.board) else: st.dataframe(st.session_state.board) elif moves==6: if st.session_state.board[1,2]==psi: #for one time initialization-->1 time selection st.session_state.board[1,2]=getRandom() userFlag=validate(st.session_state.board) if not userFlag: st.dataframe(st.session_state.board) st.session_state.available_moves=list() # user won comp_square=np.random.randint(1,9) col = (comp_square-1)%3 row = math.floor((comp_square-1)/3) compVal = getRandom() if st.session_state.board[row,col]==psi: st.session_state.board[row,col]=compVal # if that board piece is unoccupied, to give the value in it #============== validation for the comp side ================== compFlag=validate(st.session_state.board) if not compFlag: return 0 st.write("Computers move :",comp_square) st.write("Comps value :",compVal) st.dataframe(st.session_state.board) else: st.dataframe(st.session_state.board) #******************************************************** if moves==7: if st.session_state.board[2,0]==psi: #for one time initialization-->1 time selection st.session_state.board[2,0]=getRandom() userFlag=validate(st.session_state.board) if not userFlag: st.dataframe(st.session_state.board) st.session_state.available_moves=list() # user won comp_square=np.random.randint(1,9) col = (comp_square-1)%3 row = math.floor((comp_square-1)/3) compVal = getRandom() if st.session_state.board[row,col]==psi: st.session_state.board[row,col]=compVal # if that board piece is unoccupied, to give the value in it #============== validation for the comp side ================== compFlag=validate(st.session_state.board) if not compFlag: return 0 st.write("Computers move :",comp_square) st.write("Comps value :",compVal) st.dataframe(st.session_state.board) else: st.dataframe(st.session_state.board) elif moves==8: if st.session_state.board[2,1]==psi: #for one time initialization-->1 time selection st.session_state.board[2,1]=getRandom() userFlag=validate(st.session_state.board) if not userFlag: st.dataframe(st.session_state.board) st.session_state.available_moves=list() # user won comp_square=np.random.randint(1,9) col = (comp_square-1)%3 row = math.floor((comp_square-1)/3) compVal = getRandom() if st.session_state.board[row,col]==psi: st.session_state.board[row,col]=compVal # if that board piece is unoccupied, to give the value in it #============== validation for the comp side ================== compFlag=validate(st.session_state.board) if not compFlag: return 0 st.write("Computers move :",comp_square) st.write("Comps value :",compVal) st.dataframe(st.session_state.board) else: st.dataframe(st.session_state.board) elif moves==9: if st.session_state.board[2,2]==psi: #for one time initialization-->1 time selection st.session_state.board[2,2]=getRandom() userFlag=validate(st.session_state.board) if not userFlag: st.dataframe(st.session_state.board) st.session_state.available_moves=list() # user won comp_square=np.random.randint(1,9) col = (comp_square-1)%3 row = math.floor((comp_square-1)/3) compVal = getRandom() if st.session_state.board[row,col]==psi: st.session_state.board[row,col]=compVal # if that board piece is unoccupied, to give the value in it #============== validation for the comp side ================== compFlag=validate(st.session_state.board) if not compFlag: return 0 st.write("Computers move :",comp_square) st.write("Comps value :",compVal) st.dataframe(st.session_state.board) else: st.dataframe(st.session_state.board) #******************************************************** elif option==menu[1]: st.subheader("Instructions") #st.write("The Instructions are here :- ") psi='|φ>' board=np.array([[psi,psi,psi],[psi,psi,psi],[psi,psi,psi]]) st.dataframe(board) instruction1=""" The super position states are the above. The steps to start are as follows:- 1> The User gets to choose first always and between nos -> 1 to 9 2> The Comp then plays its move Note: Comp can change its normal game symbol from |0> --> |1> It can also take the user pos and its previous move pos ...If it occurs then then no move is made by comp 3> Then User again and Like that it will continue 4> If you Still dont understand how it will be you can play a demo. Refresh the page and continue with the challenge. ALL THE BEST !! """ st.write(instruction1) #for board numbering b_num=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]]) st.dataframe(b_num) instruction2=""" The above are the positions of the board and the numberings These are the original board positions which are as follows :- 1 --> [0,0] 2 --> [0,1] and so on .. """ st.write(instruction2) else: pic=Image.open("QTTlogo.jpg") st.image(pic,caption="GAME LOGO") st.subheader("A quick intro about the game") about=""" Created by Dripto Created using Python, Streamlit, Qiskit We will basically use the [Quantum Superposition](https://en.wikipedia.org/wiki/Quantum_superposition) technique here""" st.write(about) if __name__=='__main__': c = main() if c == 0: st.subheader('GAME OVERRR!! Refresh the page to play again :)')