بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK
تُعد لعبة تيك تاك تو الكلاسيكية من أشهر الألعاب التي لعبناها في طفولتنا.
ولكن ماذا لو أضفنا لمسة من الحوسبة الكمومية إلى هذه اللعبة؟ في هذا المقال، سنستكشف
كيفية إنشاء لعبة تيك تاك تو كمومية باستخدام Qiskit و Python، مستفيدين من مبادئ
التشابك الكمومي والتراكب الكمي لتقديم تجربة لعب فريدة ومثيرة.
لإنشاء لعبة tic-tac-toe سنركز على المبادئ والقواعد الأساسية للعبة بدلاً من تطوير اللعبة على مستوى عالٍ.
سنستخدم Python وQiskit SDK.
Qiskit هي SDK مفتوحة المصدر من IBM للعمل مع أجهزة الكمبيوتر الكمومية
وأجهزة المحاكاة على مستوى النبضات والدوائر ووحدات التطبيق.
قواعد اللعبة Quantum tic-tac-toe
1- اللعبة تحتوي على 9 بلاطات، كل منها يتوافق مع كيوبت حقيقي!
2- اللعبة بها لاعبين اثنين، لاعب 1 ولاعب 2.
3- يتناوبون كما في لعبة "إكس أو" الكلاسيكية على وضع علامة على بلاطة واحدة في كل مرة.
4- يقوم اللاعب 1 بوضع علامة على أحد البلاطات باستخدام |0> ويقوم اللاعب 2 بإنشاء بلاطة باستخدام |1>.
تتميز لعبة "Quantum tic-tac-toe" هذه بميزة خاصة.
فخلال دور اللاعب، يمكن للاعب أن يقرر تشابك قطعتين بدلاً من وضع علامة على قطعة واحدة.
وإذا كانت هذه هي الحالة، فلا يمكن وضع علامة على القطعتين المتشابكتين لأي لاعب آخر أثناء اللعبة.
بمجرد تحديد أو تشابك جميع المربعات، يتم تهيئة الدائرة الكمومية للعبة وقياس
البتات الكمومية للكشف عن الحالة النهائية للعبة. تتأكد خوارزمية تصحيح الأخطاء من عدم وجود أخطاء.
إذا كانت هناك أخطاء، يتم تشغيل الكود مرة أخرى حتى لا توجد أخطاء. من لديه 3 في سطر واحد يفوز.
إذا كان كلاهما كذلك، يتم تشغيل الكود مرة أخرى حتى يفوز أحدهما.
اكواد لعبة Quantum tic-tac-toe
أفترض أنك قمت بإعداد بيئة Python الافتراضية الخاصة بك.
الشيء الوحيد الذي تحتاج إلى تثبيته هو Qiskit .
$ pip install qiskit
دعونا نبدأ !!!
* أولاً، نقوم باستيراد المكتبات الضرورية من Qiskit SDK:
#import necessary modules
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit import execute, assemble, BasicAer
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
* تخطيط لعبة tic-tac-toe
tic toc toe

الآن، لنلق نظرة عامة على طريقة اللعب. سنحدد صراحةً حالات اللوحة للاعبين 1 و2 :
#By default player1 tiles are initilized to \0> state
# Player2 tiles initialized |1> state
######
#This variables can be inputed by the users to change the input of the game!
l_player_1 = [0] #list of qbits cell numbers inicialized to 0(player1 tiles)
l_player_2 = [2,3] #list of qbits cell numbers inicialized to 1(player 2 tiles)
l_entangled = [(1,6),(7,8),(4,5)] #list of pairs of cells that need to be entangled to |01>+|10>
--
ثم نقوم بتحويل القوائم المعطاة إلى مصفوفة الحالة الكمية :
#translate from lists to initial state matrix
l_initial_ordered = [0,0,0,0,0,0,0,0,0]
for inx in range(len(l_player_1)):
l_initial_ordered[l_player_1[inx]]=0
for inx in range(len(l_player_2)):
l_initial_ordered[l_player_2[inx]]=1
entg_num = 1
for inx in range(len(l_entangled)):
l_initial_ordered[l_entangled[inx][0]]='e'+str(entg_num )
l_initial_ordered[l_entangled[inx][1]]='e'+str(entg_num )
entg_num +=1
print('This the initial table state inputed by the user:\n0 corresponds to player 1, 1 corresponds to player 2,\n e1,e2,e3... corresponds to entangled tiles')
print('-----\n'+str(l_initial_ordered[6])+'|'+str(l_initial_ordered[7])+'|'+str(l_initial_ordered[8]))
print('-----\n'+str(l_initial_ordered[3])+'|'+str(l_initial_ordered[4])+'|'+str(l_initial_ordered[5]))
print('-----\n'+str(l_initial_ordered[0])+'|'+str(l_initial_ordered[1])+'|'+str(l_initial_ordered[2]))
print('-----')
--

نقوم بعد ذلك بتعريف كمية 9 كيوبت لتمثيل الـ tiles :
#Quantum circuit to represent the tiles
# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(9, 9)
circuit.name = "Tic toc toe"
for inx in range(len(l_player_2)):
circuit.x(l_player_2[inx])
for inx in range(len(l_entangled)):
circuit.h(l_entangled[inx][0]) #hardamard gate
circuit.x(l_entangled[inx][1]) #x gate
circuit.cx(l_entangled[inx][0],l_entangled[inx][1]) #controlled-x gate
circuit.measure(list(range(9)), list(range(9)))
# Print out the circuit
print('This is the corresponding quantum circuit from the users input')
#draw circuit
circuit.draw(output='mpl', filename='circuit.png')
--
[Output]
This is the corresponding quantum circuit from the users input
--
ثم نكتب القواعد لتحديد الفائز في اللعبة، بمجرد انهيار البلاط المتشابك يتم
اختيار بلاطة واحدة بشكل عشوائي لتحديد الفائز في اللعبة :
# Check winner
def check_winner(board,mark):
return(((board[0]==mark) and (board[1]== mark) and (board[2]==mark) )or #for row1
((board[3]==mark) and (board[4]==mark) and (board[5]==mark) )or #for row2
((board[6]==mark) and (board[7]==mark) and (board[8]==mark) )or #for row3
((board[0]==mark) and (board[3]==mark) and (board[6]== mark) )or#for Colm1
((board[1]==mark) and (board[4]==mark) and (board[7]==mark) )or #for Colm 2
((board[2]==mark) and (board[5]==mark) and (board[8]==mark) )or #for colm 3
((board[0]==mark) and (board[4]==mark) and (board[8]==mark) )or #diagonal 1
((board[2]==mark) and (board[4]==mark) and (board[6]==mark) )) #diagonal 2
flag_p1=1
flag_p2=0
while (flag_p1 or flag_p2) and not(flag_p1 and flag_p2):
print('Running the quantum circuit...')
flag_p1=0
flag_p2=0
job = execute(circuit, BasicAer.get_backend('qasm_simulator'), shots=1)
result = job.result()
l_final_ordered=list(map(lambda x: int(x),list(list(result.get_counts().keys())[0][::-1])))
print(l_final_ordered)
#list with ordered cells
print('The colapsed state is:')
print('-----\n'+str(l_final_ordered[6])+'|'+str(l_final_ordered[7])+'|'+str(l_final_ordered[8]))
print('-----\n'+str(l_final_ordered[3])+'|'+str(l_final_ordered[4])+'|'+str(l_final_ordered[5]))
print('-----\n'+str(l_final_ordered[0])+'|'+str(l_final_ordered[1])+'|'+str(l_final_ordered[2]))
print('-----')
if (check_winner(l_final_ordered,0) ):## to check if player 1 won
print('Player 1 won!')
flag_p1 = 1
else:
flag_p1 = 0
if (check_winner(l_final_ordered,1)): ## to check if player 2 won
print('Player 2 won!')
flag_p2 = 1
else:
flag_p2 = 0
if (flag_p1 or flag_p2) and not(flag_p1 and flag_p2):
break
if flag_p1 and flag_p2:
print('The game will repeat until one one player wins')
if not(flag_p1 and flag_p2):
print('No winners,\nThe game will repeat until one one player wins')
--
بمجرد تشغيل المقطع أعلاه، ستحصل على ناتج من الدائرة الكمومية والذي سيتم
تمثيله بعد ذلك على لعبة الداما.
كما أن النتائج في هذا البرنامج التعليمي قد تختلف عن نتائجك لأنها تعتمد على
التحديد العشوائي للحالات المنهارة للبلاط المتشابك :

لقد قمت للتو ببناء أول دائرة كمية خاصة بك وأصبحت على دراية ببعض
مفاهيم الحوسبة الكمية ولعبة Quantum tic-tac-toe.
في هذا المقال، استكشفنا كيفية بناء لعبة تيك تاك تو كمومية باستخدام Python و Qiskit SDK.
لقد رأينا كيف يمكن لمبادئ الحوسبة الكمومية، مثل التشابك الكمومي والتراكب الكمي
أن تضيف بُعدًا جديدًا ومثيرًا للألعاب التقليدية. هذه التجربة ليست مجرد لعبة،
بل هي أيضًا خطوة أولى نحو فهم أعمق للحوسبة الكمومية وتطبيقاتها المستقبلية.