مشروع مصغر: برمجة لعبة تخمين أرقام باستخدام الحلقات والمنطق
ماذا سنبني اليوم؟ سنتعلم كيفية برمجة لعبة تخمين الأرقام الكلاسيكية باستخدام بايثون، مع التركيز على الحلقات التكرارية (Loops) والمنطق الشرطي (Conditional Logic) لبناء تجربة تفاعلية.
الخطوة 1: تهيئة اللعبة وتوليد الرقم السري
في هذه الخطوة الأولى، سنقوم باستيراد وحدة random لتوليد رقم سري عشوائي، وتحديد عدد المحاولات المتاحة للاعب.
import random
# توليد رقم سري عشوائي بين 1 و 100
secret_number = random.randint(1, 100)
# تحديد الحد الأقصى للمحاولات المتاحة للاعب
max_attempts = 7
# عداد لتتبع عدد المحاولات التي قام بها اللاعب
attempts_taken = 0
print("أهلاً بك في لعبة تخمين الأرقام!")
print(f"أفكر في رقم بين 1 و 100. لديك {max_attempts} محاولات لتخمينه.")
تُعدّ دالة
random.randint(a, b)مثالية لتوليد أرقام صحيحة عشوائية ضمن نطاق محدد (شامل للحدين). هذا يضمن أن الرقم السري سيكون دائمًا ضمن الحدود التي نحددها.
الخطوة 2: حلقة التخمين والتحقق من المدخلات
سنستخدم حلقة while للسماح للاعب بالتخمين عدة مرات. داخل الحلقة، سنتحقق من أن المدخلات أرقام صحيحة باستخدام كتل try-except لتجنب الأخطاء.
# الحلقة الرئيسية للعبة: تستمر طالما لم تنفد المحاولات
while attempts_taken < max_attempts:
try:
# طلب إدخال اللاعب وتخزينه في متغير guess
guess = int(input("تخمينك: "))
# زيادة عداد المحاولات بعد كل تخمين صحيح
attempts_taken += 1
# التحقق إذا كان التخمين خارج النطاق المحدد
if not (1 <= guess <= 100):
print("الرجاء إدخال رقم بين 1 و 100.")
# لا نحسب هذه المحاولة إذا كان الرقم خارج النطاق
attempts_taken -= 1
continue # الانتقال للتكرار التالي في الحلقة
# (سيأتي منطق المقارنة في الخطوة التالية)
# ...
except ValueError:
# معالجة الخطأ إذا لم يكن الإدخال رقمًا صحيحًا
print("إدخال غير صالح. الرجاء إدخال رقم صحيح.")
# لا نحسب هذه المحاولة غير الصالحة
continue
استخدام
try-except ValueErrorهو ممارسة جيدة في البرمجة للتعامل مع المدخلات غير المتوقعة من المستخدم، مما يجعل برنامجك أكثر قوة ومقاومة للأخطاء.
الخطوة 3: مقارنة التخمين وتقديم التلميحات
بعد الحصول على تخمين صالح، سنقارنه بالرقم السري. سنقدم تلميحات للاعب (أصغر أو أكبر) وننهي اللعبة إذا تم التخمين بشكل صحيح.
# تابع من الكود السابق، داخل حلقة while وبعد التحقق من المدخلات
# ...
# التحقق مما إذا كان التخمين صحيحًا
if guess == secret_number:
print(f"تهانينا! لقد خمنت الرقم السري {secret_number} في {attempts_taken} محاولات!")
break # الخروج من الحلقة لأن اللعبة انتهت بنجاح
elif guess < secret_number:
# تقديم تلميح إذا كان التخمين أصغر من الرقم السري
print("الرقم السري أكبر من تخمينك.")
else:
# تقديم تلميح إذا كان التخمين أكبر من الرقم السري
print("الرقم السري أصغر من تخمينك.")
# إعلام اللاعب بعدد المحاولات المتبقية
remaining_attempts = max_attempts - attempts_taken
if remaining_attempts > 0:
print(f"تبقى لديك {remaining_attempts} محاولات.")
else:
# هذه الحالة تحدث فقط إذا كانت هذه هي المحاولة الأخيرة وفشل اللاعب
pass # سيتم التعامل مع حالة الخسارة بعد الحلقة
# ... (بقية الكود خارج حلقة while)
تُظهر بنية
if-elif-elseقوة المنطق الشرطي في توجيه تدفق البرنامج بناءً على شروط متعددة، مما يتيح لنا تقديم استجابات مختلفة لتخمينات اللاعب.
الخطوة 4: إنهاء اللعبة وعرض النتيجة النهائية
بعد انتهاء حلقة التخمين (إما بفوز اللاعب أو بنفاد محاولاته)، سنعرض الرسالة النهائية التي تخبر اللاعب بالنتيجة.
# تابع من الكود السابق، هذا الجزء يأتي مباشرة بعد انتهاء حلقة while
# التحقق مما إذا كان اللاعب لم يخمن الرقم السري بعد نفاد المحاولات
if guess != secret_number:
print(f"آسف، لقد نفدت محاولاتك. الرقم السري كان {secret_number}.")
print("شكراً للعب!")
الكود النهائي الكامل
إليك الكود الكامل للعبة تخمين الأرقام، جاهز للنسخ والتشغيل:
import random
# توليد رقم سري عشوائي بين 1 و 100
secret_number = random.randint(1, 100)
# تحديد الحد الأقصى للمحاولات المتاحة للاعب
max_attempts = 7
# عداد لتتبع عدد المحاولات التي قام بها اللاعب
attempts_taken = 0
print("أهلاً بك في لعبة تخمين الأرقام!")
print(f"أفكر في رقم بين 1 و 100. لديك {max_attempts} محاولات لتخمينه.")
# الحلقة الرئيسية للعبة: تستمر طالما لم تنفد المحاولات
while attempts_taken < max_attempts:
try:
# طلب إدخال اللاعب وتخزينه في متغير guess
guess = int(input("تخمينك: "))
# التحقق إذا كان التخمين خارج النطاق المحدد
if not (1 <= guess <= 100):
print("الرجاء إدخال رقم بين 1 و 100.")
continue # الانتقال للتكرار التالي في الحلقة دون احتساب المحاولة
# زيادة عداد المحاولات بعد كل تخمين صحيح
attempts_taken += 1
# التحقق مما إذا كان التخمين صحيحًا
if guess == secret_number:
print(f"تهانينا! لقد خمنت الرقم السري {secret_number} في {attempts_taken} محاولات!")
break # الخروج من الحلقة لأن اللعبة انتهت بنجاح
elif guess < secret_number:
# تقديم تلميح إذا كان التخمين أصغر من الرقم السري
print("الرقم السري أكبر من تخمينك.")
else:
# تقديم تلميح إذا كان التخمين أكبر من الرقم السري
print("الرقم السري أصغر من تخمينك.")
# إعلام اللاعب بعدد المحاولات المتبقية
remaining_attempts = max_attempts - attempts_taken
if remaining_attempts > 0:
print(f"تبقى لديك {remaining_attempts} محاولات.")
except ValueError:
# معالجة الخطأ إذا لم يكن الإدخال رقمًا صحيحًا
print("إدخال غير صالح. الرجاء إدخال رقم صحيح.")
continue # الانتقال للتكرار التالي في الحلقة دون احتساب المحاولة
# التحقق مما إذا كان اللاعب لم يخمن الرقم السري بعد نفاد المحاولات
if guess != secret_number:
print(f"آسف، لقد نفدت محاولاتك. الرقم السري كان {secret_number}.")
print("شكراً للعب!")
النتيجة المتوقعة
عند تشغيل السكربت، ستبدأ اللعبة بطلب تخمين رقم بين 1 و 100. سيُطلب منك إدخال تخمينك، وبعد كل محاولة، ستحصل على تلميح (أكبر أو أصغر) أو رسالة تهنئة إذا خمنت الرقم الصحيح. إذا نفدت محاولاتك دون تخمين الرقم، ستخبرك اللعبة بالرقم السري الصحيح. مثال على التفاعل:
أهلاً بك في لعبة تخمين الأرقام!
أفكر في رقم بين 1 و 100. لديك 7 محاولات لتخمينه.
تخمينك: 50
الرقم السري أكبر من تخمينك.
تبقى لديك 6 محاولات.
تخمينك: 75
الرقم السري أصغر من تخمينك.
تبقى لديك 5 محاولات.
تخمينك: 62
الرقم السري أكبر من تخمينك.
تبقى لديك 4 محاولات.
تخمينك: 68
تهانينا! لقد خمنت الرقم السري 68 في 4 محاولات!
شكراً للعب!
أو في حالة الخسارة:
...
تخمينك: 45
الرقم السري أصغر من تخمينك.
تبقى لديك 1 محاولات.
تخمينك: 40
الرقم السري أصغر من تخمينك.
آسف، لقد نفدت محاولاتك. الرقم السري كان 42.
شكراً للعب!