Spaces:
Runtime error
Runtime error
""" | |
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 :)') | |