
برمجة لعبة "حجر، ورقة، مقص" باستخدام Qiskit و Python
برمجة لعبة "حجر، ورقة، مقص" كمومية باستخدام Qiskit و Python: دليل تفصيلي للمبتدئين
هل أنت متحمس لاستكشاف عالم الحوسبة الكمومية بطريقة ممتعة وتفاعلية؟
في هذا المقال، سنغوص في رحلة مثيرة لبرمجة لعبة "حجر، ورقة، مقص" كمومية باستخدام
مكتبة #Qiskit مفتوحة المصدر ولغة البرمجة #Python. ستعتمد هذه اللعبة على مبادئ الكم،
مثل التراكب والتشابك، لإضفاء لمسة فريدة من الإثارة والغموض على اللعبة الكلاسيكية المحبوبة.
المتطلبات الأساسية لبرمجة تطبيق باستخدام Qiskit و Python
- معرفة أساسية بلغة Python.
- تثبيت مكتبة Qiskit: pip install qiskit
- تثبيت مكتبات إضافية (اختياري): pip install ipywidgets
(لواجهة تفاعلية أبسط في Jupyter Notebook)
تصميم اللعبة
* واجهة المستخدم:
- سنستخدم واجهة بسيطة تعتمد على دالة input() للحصول على خيار المستخدم (حجر، ورقة، مقص).
- سيتم عرض خيار الكمبيوتر والنتيجة في سطر الأوامر.
- يمكن تطوير الواجهة لاحقًا باستخدام مكتبات مثل Tkinter أوPyQt لإنشاء واجهة رسومية أكثر جاذبية.
- سيختار المستخدم أحد الخيارات الثلاثة (حجر، ورقة، مقص).
- سيختار الكمبيوتر خيارًا "عشوائيًا" باستخدام مبادئ الكم (سنشرح ذلك بالتفصيل).
- سيتم تحديد الفائز بناءً على قواعد اللعبة الكلاسيكية.
* العنصر الكمي:
- لإضافة عنصر "العشوائية الكمومية"، سنستخدم Qiskit لإنشاء حالة تراكب للكيوبت.
- سيتم قياس الكيوبت للحصول على نتيجة عشوائية (0 أو 1).
- سيتم تعيين خيار الكمبيوتر (حجر أو ورقة) بناءً على نتيجة القياس.
- يمكن إضافة المزيد من "اللمسات الكمومية" لاحقًا، مثل استخدام التشابك لربط خيارات المستخدم والكمبيوتر بطريقة ما.
كود التطبيق الكامل
import random
from qiskit import QuantumCircuit, Aer, execute
from ipywidgets import interact, Dropdown, Button, Output # اختياري
def play_game(user_choice):
computer_choice = get_computer_choice()
output.clear_output()
with output:
print(f"اخترت: {user_choice}")
print(f"اخترت الكمبيوتر: {computer_choice}")
winner = determine_winner(user_choice, computer_choice)
print(f"النتيجة: {winner}")
def get_computer_choice():
# إنشاء دارة كمومية بسيطة
qc = QuantumCircuit(1, 1)
qc.h(0) # تطبيق بوابة Hadamard لإنشاء تراكب
qc.measure(0, 0)
# محاكاة الدارة
simulator = Aer.get_backend('qasm_simulator')
job = execute(qc, simulator, shots=1)
result = job.result()
counts = result.get_counts(qc)
# اختيار عشوائي بناءً على نتائج القياس
outcome = list(counts.keys())[0]
if outcome == '0':
return "حجر"
elif outcome == '1':
return "ورقة"
def determine_winner(user_choice, computer_choice):
if user_choice == computer_choice:
return "تعادل"
elif (user_choice == "حجر" and computer_choice == "مقص") or \
(user_choice == "ورقة" and computer_choice == "حجر") or \
(user_choice == "مقص" and computer_choice == "ورقة"):
return "أنت فزت"
else:
return "الكمبيوتر فاز"
# تشغيل اللعبة
play_game()
# واجهة المستخدم التفاعلية (اختياري)
choice_widget = Dropdown(options=['حجر', 'ورقة', 'مقص'], description='اختر:')
play_button = Button(description='العب')
output = Output()
play_button.on_click(lambda b: play_game(choice_widget.value))
display(choice_widget, play_button, output)
** شرح الكود
- ()get_user_choice: تأخذ خيار المستخدم (حجر، ورقة، مقص) كمدخل (تم استبدالها بواجهة تفاعلية).
- get_computer_choice():*
^ تنشئ دارة كمومية بسيطة باستخدام Qiskit.
^ تطبق بوابة Hadamard لإنشاء حالة تراكب للكيوبت.
^ تقيس الكيوبت للحصول على نتيجة عشوائية (0 أو 1).
^ تختار "حجر" أو "ورقة" بناءً على نتيجة القياس.
- ()determine_winner: تحدد الفائز بناءً على خيارات المستخدم والكمبيوتر.
- ()play_game: تجمع بين الدوال السابقة لتشغيل اللعبة (تم تعديلها للواجهة التفاعلية).
- الواجهة التفاعلية (اختياري): تم استخدام ipywidgets لإنشاء قائمة منسدلة لاختيار المستخدم وزر للعب.
* تشغيل الكود
1- تأكد من تثبيت Qiskit و ipywidgets.
2- شغل الكود في بيئة Python تدعم الواجهات التفاعلية (مثل Jupyter Notebook أو JupyterLab).
- اختر خيارك من القائمة المنسدلة واضغط على زر "العب".
- سيتم عرض خيار الكمبيوتر والنتيجة في مربع.
* نصائح لتطوير اللعبة
رسومات متحركة: استخدم مكتبات مثل Pygame لإنشاء رسومات متحركة جذابة للعبة.
خيارات إضافية: أضف المزيد من الخيارات، مثل "بئر" أو "سحلية".
تسجيل النتائج: سجل عدد مرات الفوز والخسارة لكل لاعب.
"لمسات كمومية" إضافية: استكشف استخدام التشابك أو تقنيات كمومية أخرى لجعل اللعبة أكثر إثارة.
شرح تفصيلي لكود لعبة "حجر، ورقة، مقص" الكمومية Quantum
1. تثبيت Qiskit و ipywidgets
- Qiskit: مكتبة Python للعمل مع الحواسيب الكمومية.
- ipywidgets: مكتبة لتطوير واجهات المستخدم التفاعلية في Jupyter Notebook.
- لتثبيت هاتين المكتبتين، افتح سطر الأوامر (Command Prompt أو Terminal) واكتب الأوامر التالية:
pip install qiskit ipywidgets
2. تشغيل الكود في بيئة Python
يفضل تشغيل الكود في بيئة تدعم الواجهات التفاعلية، مثل:
- Jupyter Notebook: بيئة تفاعلية تسمح بتشغيل الكود وعرض النتائج بشكل مباشر.
- JupyterLab: تطوير لـ Jupyter Notebook يوفر واجهة مستخدم أكثر تطوراً.
لتشغيل الكود في Jupyter، اتبع الخطوات التالية:
- افتح Jupyter Notebook أو JupyterLab.
- أنشئ ملف Python جديد ( بامتداد .ipynb).
- انسخ والصق الكود في الخلية.
- شغل الخلية بالضغط على Shift + Enter.
3. شرح الكود بالتفصيل
import random
from qiskit import QuantumCircuit, Aer, execute
from ipywidgets import interact, Dropdown, Button, Output # استيراد المكتبات
def play_game(user_choice): # دالة لتشغيل اللعبة
computer_choice = get_computer_choice() # الحصول على خيار الكمبيوتر
output.clear_output() # مسح المخرجات السابقة
with output: # عرض المخرجات في مربع مخصص
print(f"اخترت: {user_choice}")
print(f"اخترت الكمبيوتر: {computer_choice}")
winner = determine_winner(user_choice, computer_choice) # تحديد الفائز
print(f"النتيجة: {winner}")
def get_computer_choice(): # دالة للحصول على خيار الكمبيوتر بشكل عشوائي كمومي
# إنشاء دارة كمومية بسيطة
qc = QuantumCircuit(1, 1) # كيوبت واحد وقياس واحد
qc.h(0) # تطبيق بوابة Hadamard لإنشاء تراكب (Superposition)
qc.measure(0, 0) # قياس الكيوبت
# محاكاة الدارة
simulator = Aer.get_backend('qasm_simulator') # استخدام محاكي الكم
job = execute(qc, simulator, shots=1) # تشغيل الدارة مرة واحدة
result = job.result() # الحصول على النتائج
counts = result.get_counts(qc) # عد النتائج
# اختيار عشوائي بناءً على نتائج القياس
outcome = list(counts.keys())[0] # الحصول على نتيجة القياس (0 أو 1)
if outcome == '0':
return "حجر"
elif outcome == '1':
return "ورقة"
def determine_winner(user_choice, computer_choice): # دالة لتحديد الفائز
if user_choice == computer_choice:
return "تعادل"
elif (user_choice == "حجر" and computer_choice == "مقص") or \
(user_choice == "ورقة" and computer_choice == "حجر") or \
(user_choice == "مقص" and computer_choice == "ورقة"):
return "أنت فزت"
else:
return "الكمبيوتر فاز"
# واجهة المستخدم التفاعلية
choice_widget = Dropdown(options=['حجر', 'ورقة', 'مقص'], description='اختر:') # قائمة منسدلة
play_button = Button(description='العب') # زر للعب
output = Output() # مربع لعرض النتائج
play_button.on_click(lambda b: play_game(choice_widget.value)) # ربط الزر بالدالة
display(choice_widget, play_button, output) # عرض العناصر في الواجهة
4. نصائح لتطوير اللعبة
- استخدام مكتبات مثل Pygame أو Tkinter لإنشاء رسومات متحركة جذابة.
- خيارات إضافية: إضافة المزيد من الخيارات، مثل "بئر" أو "سحلية".
- تسجيل النتائج: تخزين عدد مرات الفوز والخسارة لكل لاعب في ملف أو قاعدة بيانات.
* مثال لتطوير اللعبة (إضافة خيارات إضافية) :
# ... (الكود السابق) ...
choice_widget = Dropdown(options=['حجر', 'ورقة', 'مقص', 'بئر', 'سحلية'], description='اختر:')
# ... (بقية الكود) ...
def determine_winner(user_choice, computer_choice):
# قواعد اللعبة الموسعة
if user_choice == computer_choice:
return "تعادل"
elif (user_choice == "حجر" and (computer_choice == "مقص" or computer_choice == "سحلية")) or \
(user_choice == "ورقة" and (computer_choice == "حجر" or computer_choice == "بئر")) or \
(user_choice == "مقص" and (computer_choice == "ورقة" or computer_choice == "سحلية")) or \
(user_choice == "بئر" and (computer_choice == "حجر" أو computer_choice == "مقص")) or \
(user_choice == "سحلية" and (computer_choice == "ورقة" أو computer_choice == "بئر")):
return "أنت فزت"
else:
return "الكمبيوتر فاز"
خطوات تثبيت Qiskit و ipywidgets
Qiskit و ipywidgets مكتبتان ضروريتان لتطوير تطبيقات الحوسبة الكمومية التفاعلية باستخدام Python.
Qiskit هي مكتبة برمجية مفتوحة المصدر للعمل مع الحواسيب الكمومية،
بينما ipywidgets توفر أدوات لإنشاء واجهات مستخدم تفاعلية في Jupyter Notebook.
سنشرح بالتفصيل كيفية تثبيت هاتين المكتبتين مع تضمين لقطات شاشة لتوضيح الخطوات :
1* تثبيت Python:
إذا لم تكن Python مثبتة على جهازك، قم بتنزيل أحدث إصدار من موقع Python الرسمي
اتبع التعليمات لتثبيت Python على نظام التشغيل الخاص بك.
2* تثبيت pip:
pip هو مدير الحزم الخاص بـ Python، ويستخدم لتثبيت المكتبات.
عادةً ما يتم تثبيت pip مع Python، ولكن يمكنك التأكد من تثبيته عن طريق
كتابة الأمر التالي في سطر الأوامر:
python -m ensurepip --upgrade
3* تثبيت Qiskit:
افتح سطر الأوامر (Command Prompt أو Terminal) واكتب الأمر التالي:
pip install qiskit
سيقوم pip بتنزيل وتثبيت Qiskit وجميع التdependencies الخاصة بها.
4* تثبيت ipywidgets:
بعد تثبيت Qiskit، اكتب الأمر التالي في سطر الأوامر لتثبيت ipywidgets:
pip install ipywidgets
- سيقوم pip بتنزيل وتثبيت ipywidgets.
5* تفعيل ipywidgets في Jupyter Notebook:
إذا كنت تستخدم Jupyter Notebook، قد تحتاج إلى تفعيل ipywidgets عن
طريق كتابة الأمر التالي في سطر الأوامر:
jupyter nbextension enable --py widgetsnbextension
* ملاحظات
تأكد من أنك متصل بالإنترنت أثناء التثبيت.
باتباع هذه الخطوات، تكون قد قمت بتثبيت Qiskit و ipywidgets بنجاح
ويمكنك البدء في تطوير تطبيقات الحوسبة الكمومية التفاعلية باستخدام Python و Jupyter Notebook.
ماهو هذا Jupyter Notebook
Jupyter Notebook هي أداة قوية ومشهورة في عالم البرمجة، خاصة في
مجالات تحليل البيانات، تعلم الآلة، وعلوم البيانات. تخيل أنها دفتر ملاحظات تفاعلي
يمكنك من خلاله كتابة وتشغيل الأكواد البرمجية مباشرة، مع إمكانية إضافة نصوص توضيحية،
معادلات رياضية، ورسوم بيانية، كل ذلك في مكان واحد.
بعض المميزات الرئيسية لـ Jupyter Notebook
- يمكنك كتابة سطر من الكود وتشغيله مباشرة، ثم رؤية الناتج في نفس الصفحة،
مما يساعدك على فهم الكود وتجربته بشكل أسرع.
- دعم لغات برمجة متعددة: لا يقتصر Jupyter Notebook على لغة برمجة واحدة،
بل يدعم العديد من اللغات، مثل Python، R، Julia، وغيرها.
- تكامل النصوص والصور: يمكنك إضافة نصوص توضيحية، معادلات رياضية، صور،
وحتى مقاطع فيديو لشرح الكود الخاص بك وتوثيقه بشكل أفضل.
- يمكنك مشاركة ملفات Jupyter Notebook مع الآخرين بسهولة، مما يجعلها
أداة رائعة للتعاون في المشاريع البرمجية.
كيف تستخدم Jupyter Notebook؟
- التثبيت: إذا لم تكن قد قمت بتثبيت Jupyter بعد، يمكنك تثبيته باستخدام pip:
pip install jupyter
- التشغيل: لتشغيل Jupyter Notebook، افتح سطر الأوامر واكتب:
jupyter notebook
سيؤدي ذلك إلى فتح صفحة ويب في المتصفح الخاص بك، تعرض لك واجهة Jupyter Notebook.
- إنشاء ملف جديد: يمكنك إنشاء ملف جديد بالضغط على "New" ثم اختيار لغة البرمجة
التي ترغب في استخدامها (مثل Python 3).
- كتابة وتشغيل الكود: يمكنك كتابة الكود في الخلايا المخصصة لذلك،
ثم تشغيلها بالضغط على Shift + Enter.
- إضافة عناصر أخرى: يمكنك إضافة نصوص، صور، معادلات، وغيرها، باستخدام
الأدوات المتاحة في واجهة Jupyter Notebook.
استخدامات Jupyter Notebook
- يعتبر Jupyter Notebook أداة قوية لتحليل البيانات واستكشافها، حيث يمكنك كتابة الكود،
عرض النتائج، وإضافة تعليقاتك وتفسيراتك، كل ذلك في مكان واحد.
- يستخدم Jupyter Notebook على نطاق واسع في مجال تعلم الآلة،
حيث يمكنك كتابة وتجربة الخوارزميات، عرض البيانات، وتقييم النتائج بسهولة.
- يعتبر Jupyter Notebook أداة ممتازة لتعليم البرمجة وعلوم البيانات، حيث يمكنك
تقديم الدروس بشكل تفاعلي، مع إمكانية تجربة الكود مباشرة.
- يمكنك مشاركة ملفات Jupyter Notebook مع زملائك في العمل أو الدراسة، مما يسهل
التعاون في المشاريع البرمجية.
Jupyter Notebook هو أداة لا غنى عنها للمبرمجين، خاصة في مجالات تحليل البيانات،
تعلم الآلة، وعلوم البيانات. إذا كنت تعمل في هذه المجالات، فإن تعلم استخدام
Jupyter Notebook سيساعدك بشكل كبير في عملك.
ملاحظات
هذا الكود هو مجرد مثال بسيط، ويمكنك تطويره وإضافة المزيد من الميزات.
لتشغيل هذا الكود، تحتاج إلى تثبيت Qiskit وحزمة SDK الخاصة بـ Python على جهازك.
آمل أن يكون هذا المقال مفيدًا لك! إذا كان لديك أي أسئلة أخرى، فلا تتردد في طرحها.