
دليل شامل عن برمجة لعبة الكلمات المتقاطعة باستخدام Jupyter Notebook
يُعد Jupyter Notebook بيئة تطوير تفاعلية مثالية لبرمجة الألعاب التي تعتمد على
النصوص والبيانات، مثل لعبة الكلمات المتقاطعة، في هذا المقال، سنقوم بإنشاء
لعبة كلمات متقاطعة بسيطة باستخدام بايثون ومكتبات مثل NumPy و ipywidgets،
وسنغطي الخطوات الأساسية لإنشاء اللعبة، بدءًا من تصميم الشبكة وحتى إضافة وظائف التحقق من الإجابات.
خطوات برمجة لعبة الكلمات المتقاطعة باستخدام Jupyter Notebook
الخطوة 1: إعداد البيئة وتثبيت المكتبات
تأكد من تثبيت Jupyter Notebook على جهازك.
ثم قم بتثبيت المكتبات اللازمة باستخدام الأمر التالي في خلية Jupyter :
!pip install numpy ipywidgets
--
الخطوة 2: تصميم شبكة الكلمات المتقاطعة
سنقوم بإنشاء شبكة الكلمات المتقاطعة باستخدام مصفوفة NumPy.
إليك الكود:
import numpy as np
import ipywidgets as widgets
from IPython.display import display
# تحديد أبعاد الشبكة
rows = 10
cols = 10
# إنشاء شبكة فارغة
grid = np.zeros((rows, cols), dtype=str)
# تحديد الكلمات ومواقعها
words = {
"PYTHON": [(2, 1), "horizontal"],
"JUPYTER": [(5, 3), "vertical"],
"NOTEBOOK": [(1, 6), "horizontal"],
}
# ملء الشبكة بالكلمات
for word, (row, col), direction in words.values():
if direction == "horizontal":
for i, char in enumerate(word):
grid[row, col + i] = char
else:
for i, char in enumerate(word):
grid[row + i, col] = char
# عرض الشبكة
print(grid)
شرح الكود :
- numpy.zeros(): إنشاء مصفوفة فارغة.
- words: قاموس لتخزين الكلمات ومواقعها واتجاهاتها.
- grid[row, col] = char: ملء الشبكة بالأحرف.
الخطوة 3: إنشاء واجهة المستخدم التفاعلية
سنقوم بإنشاء واجهة مستخدم تفاعلية باستخدام ipywidgets، إليك الكود:
# إنشاء مربعات نصية للإجابات
text_boxes = {}
for row in range(rows):
for col in range(cols):
if grid[row, col] != "":
text_boxes[(row, col)] = widgets.Text(value="", placeholder="", disabled=False)
# عرض مربعات النص
for (row, col), text_box in text_boxes.items():
display(widgets.HBox([widgets.Label(f"({row}, {col})"), text_box]))
شرح الكود :
- widgets.Text(): إنشاء مربع نص.
- display(widgets.HBox()): عرض مربعات النص بشكل أفقي.
الخطوة 4: التحقق من الإجابات
سنقوم بإنشاء دالة للتحقق من الإجابات. إليك الكود:
def check_answers(text_boxes):
correct = True
for word, (row, col), direction in words.values():
answer = ""
if direction == "horizontal":
for i in range(len(word)):
answer += text_boxes[(row, col + i)].value.upper()
else:
for i in range(len(word)):
answer += text_boxes[(row + i, col)].value.upper()
if answer != word:
correct = False
break
return correct
# إنشاء زر للتحقق من الإجابات
check_button = widgets.Button(description="تحقق من الإجابات")
# دالة لمعالجة حدث النقر على الزر
def on_check_button_click(b):
if check_answers(text_boxes):
print("أحسنت! جميع الإجابات صحيحة.")
else:
print("هناك بعض الأخطاء. حاول مرة أخرى.")
# ربط حدث النقر على الزر بالدالة
check_button.on_click(on_check_button_click)
# عرض الزر
display(check_button)
شرح الكود :
- check_answers(text_boxes): دالة للتحقق من الإجابات.
- widgets.Button(): إنشاء زر.
- on_check_button_click(b): دالة لمعالجة حدث النقر على الزر.
- check_button.on_click(): ربط حدث النقر على الزر بالدالة.
الخطوة 5: إضافة تلميحات (اختياري)
يمكنك إضافة تلميحات للكلمات لجعل اللعبة أكثر سهولة. إليك الكود:
hints = {
"PYTHON": "لغة برمجة شائعة",
"JUPYTER": "بيئة تطوير تفاعلية",
"NOTEBOOK": "مستند تفاعلي في Jupyter",
}
# عرض التلميحات
for word, hint in hints.items():
print(f"{word}: {hint}")
الخطوة 6: إضافة وظائف إضافية (اختياري)
يمكنك إضافة وظائف إضافية لجعل اللعبة أكثر متعة، مثل:
مؤقت لتحديد وقت اللعب، عداد للأخطاء،
نظام نقاط، مستويات صعوبة مختلفة.
إليك إضافة وظائف إضافية لجعل لعبة الكلمات المتقاطعة أكثر متعة، مع الأكواد لكل وظيفة:
1. مؤقت لتحديد وقت اللعب:
import time
# ... (الكود السابق)
# مؤقت اللعبstart_time = time.time()time_limit = 60 # تحديد وقت اللعب بـ 60 ثانية
# ... (حلقة اللعبة الرئيسية)
# حساب الوقت المتبقي elapsed_time = time.time() - start_time remaining_time = time_limit - elapsed_time
# عرض الوقت المتبقي print(f"الوقت المتبقي: {int(remaining_time)} ثانية")
# التحقق من انتهاء الوقت if remaining_time <= 0: print("انتهى الوقت!") break
شرح الكود :
- time.time(): الحصول على الوقت الحالي.
- time_limit: تحديد وقت اللعب.
- elapsed_time: حساب الوقت المنقضي.
- remaining_time: حساب الوقت المتبقي.
2. عداد للأخطاء:
# ... (الكود السابق)
# عداد الأخطاء
error_count = 0
# ... (دالة on_check_button_click)
def on_check_button_click(b):
global error_count
if check_answers(text_boxes):
print("أحسنت! جميع الإجابات صحيحة.")
else:
print("هناك بعض الأخطاء. حاول مرة أخرى.")
error_count += 1
print(f"عدد الأخطاء: {error_count}")
شرح الكود :
error_count: عداد لتخزين عدد الأخطاء.
3. نظام نقاط:
# ... (الكود السابق)
# نظام النقاطscore = 0points_per_word = 10
# ... (دالة on_check_button_click)
def on_check_button_click(b): global score if check_answers(text_boxes): print("أحسنت! جميع الإجابات صحيحة.") score += len(words) * points_per_word print(f"النقاط: {score}") else: print("هناك بعض الأخطاء. حاول مرة أخرى.")
شرح الكود :
- score: متغير لتخزين النقاط.
- points_per_word: تحديد عدد النقاط لكل كلمة صحيحة.
4. مستويات صعوبة مختلفة:
# ... (الكود السابق)
# مستويات الصعوبة
difficulty_levels = {
"سهل": {"rows": 8, "cols": 8, "words": {"CAT": [(2, 1), "horizontal"], "DOG": [(5, 3), "vertical"]}},
"متوسط": {"rows": 10, "cols": 10, "words": {"PYTHON": [(2, 1), "horizontal"], "JUPYTER": [(5, 3), "vertical"], "NOTEBOOK": [(1, 6), "horizontal"]}},
"صعب": {"rows": 12, "cols": 12, "words": {"ALGORITHM": [(2, 1), "horizontal"], "PROGRAMMING": [(5, 3), "vertical"], "DEVELOPMENT": [(1, 6), "horizontal"], "DATABASE": [(8, 2), "vertical"]}},
}
# تحديد مستوى الصعوبة
selected_difficulty = "متوسط"
# ... (تعديل الكود لإنشاء الشبكة وواجهة المستخدم بناءً على مستوى الصعوبة المحدد)
# مثال لتعديل الكود لإنشاء الشبكة بناءً على مستوى الصعوبة المحدد
rows = difficulty_levels[selected_difficulty]["rows"]
cols = difficulty_levels[selected_difficulty]["cols"]
words = difficulty_levels[selected_difficulty]["words"]
# ... (بقية الكود)
شرح الكود :
- difficulty_levels: قاموس لتخزين مستويات الصعوبة وبياناتها.
- selected_difficulty: تحديد مستوى الصعوبة المحدد.
يتم تعديل الكود لإنشاء الشبكة وواجهة المستخدم بناءً على مستوى الصعوبة المحدد.
باستخدام هذه الوظائف الإضافية، يمكنك جعل لعبة الكلمات المتقاطعة أكثر متعة وتحديًا.
يمكنك أيضًا إضافة المزيد من الميزات والتعديلات لتخصيص اللعبة حسب رغبتك.
خاتمة:
في هذا المقال، قمنا بإنشاء لعبة كلمات متقاطعة بسيطة باستخدام Jupyter Notebook.
يمكنك استخدام هذا التطبيق كنقطة بداية لإنشاء ألعاب أكثر تعقيدًا.
يمكنك إضافة المزيد من الميزات إلى اللعبة، مثل أنواع مختلفة من الألغاز،
ومستويات صعوبة مختلفة، والمزيد من المؤثرات الصوتية والبصرية.