القائمة الرئيسية

الصفحات

بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK

Programming Quantum tic-tac-toe using Python and Qiskit، SDK، تيك تاك تو كمومي، حوسبة كمومية، Qiskit، Python، تشابك كمومي، تراكب كمي، ألعاب كمومية، كيوبتات، قياس، دائرة كمومية، بوابات كمومية، خوارزميات كمومية، بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK، Tic-Tac-Toe، بناء لعبة تيك تاك تو Quantum عن طريق Python و Qiskit SDK ،كيفية بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK، تيك تاك تو كمومي، حوسبة كموميةQiskit ، Python، تشابك كمومي، تراكب كمي، ألعاب كمومية، كيوبتات، خوارزميات كمومية،
 


 بناء لعبة 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

Programming Quantum tic-tac-toe using Python and Qiskit، SDK، تيك تاك تو كمومي، حوسبة كمومية، Qiskit، Python، تشابك كمومي، تراكب كمي، ألعاب كمومية، كيوبتات، قياس، دائرة كمومية، بوابات كمومية، خوارزميات كمومية، بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK، Tic-Tac-Toe، بناء لعبة تيك تاك تو Quantum عن طريق Python و Qiskit SDK ،كيفية بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK، تيك تاك تو كمومي، حوسبة كموميةQiskit ، Python، تشابك كمومي، تراكب كمي، ألعاب كمومية، كيوبتات، خوارزميات كمومية،


الآن، لنلق نظرة عامة على طريقة اللعب. سنحدد صراحةً حالات اللوحة للاعبين 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('-----')

--
Programming Quantum tic-tac-toe using Python and Qiskit، SDK، تيك تاك تو كمومي، حوسبة كمومية، Qiskit، Python، تشابك كمومي، تراكب كمي، ألعاب كمومية، كيوبتات، قياس، دائرة كمومية، بوابات كمومية، خوارزميات كمومية، بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK، Tic-Tac-Toe، بناء لعبة تيك تاك تو Quantum عن طريق Python و Qiskit SDK ،كيفية بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK، تيك تاك تو كمومي، حوسبة كموميةQiskit ، Python، تشابك كمومي، تراكب كمي، ألعاب كمومية، كيوبتات، خوارزميات كمومية،


نقوم بعد ذلك بتعريف كمية 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')

--

بمجرد تشغيل المقطع أعلاه، ستحصل على ناتج من الدائرة الكمومية والذي سيتم
 تمثيله بعد ذلك على لعبة الداما.
 كما أن النتائج في هذا البرنامج التعليمي قد تختلف عن نتائجك لأنها تعتمد على
 التحديد العشوائي للحالات المنهارة للبلاط المتشابك :

Programming Quantum tic-tac-toe using Python and Qiskit، SDK، تيك تاك تو كمومي، حوسبة كمومية، Qiskit، Python، تشابك كمومي، تراكب كمي، ألعاب كمومية، كيوبتات، قياس، دائرة كمومية، بوابات كمومية، خوارزميات كمومية، بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK، Tic-Tac-Toe، بناء لعبة تيك تاك تو Quantum عن طريق Python و Qiskit SDK ،كيفية بناء لعبة Quantum tic-tac-toe بإستخدام Python و Qiskit SDK، تيك تاك تو كمومي، حوسبة كموميةQiskit ، Python، تشابك كمومي، تراكب كمي، ألعاب كمومية، كيوبتات، خوارزميات كمومية،


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


جدول المحتويات