1 min read

CS50 in Arabic Session 3&4 Project: لعبة تخمين الأرقام

CS50 in Arabic Session 3&4 Project: لعبة تخمين الأرقام

اللي هتبنيه

لعبة الـ Guess the Number بلغة C — تتصرف زي برنامج تفاعلي

  • بيولد رقم سري بشكل عشوائي
  • بيخلي المستخدم يفضل يخمن لحد ما يلاقيه
  • بيقوله كل مرة لو التخمين كان أكبر أو أصغر من الرقم الصح
  • بيعرض ملخص نهائي لما المستخدم يخمن الرقم الصح

خطوات التطوير (الـ Phases)


المرحلة 1: توليد الرقم العشوائي

الهدف: توليد رقم سري عشوائي هيستخدمه الـ Game.

الـ Template الابتدائي:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// Random integer in range [min, max]
int rand_int(int min, int max) {
    srand(time(NULL));
    return (rand() % (max - min + 1)) + min;
}

int main(void) {
  
    // Example usage (uncomment to test)
    // int value = rand_int(1, 100);
    // printf("Random number: %d\n", value);

    return 0;
}

المتطلبات:

  • ضمّن الـ header files الصح: stdio.h، stdlib.h، time.h
  • عمل الـ seed للـ Random Number Generator باستخدام srand(time(NULL))
  • ولّد رقم بين 1 و 100 باستخدام rand()
  • خزّنه في متغير (ومتطبعوش للمستخدم!)

مثال على الـ Output المتوقع: (مفيش Output — الرقم سري!)


المرحلة 2: الـ User Input

الهدف: اطلب من المستخدم يدخل تخمينه وخزّنه صح.

المتطلبات:

  • اطبع رسالة بتطلب من المستخدم يدخل تخمينه
  • اقرأ التخمين
  • خزّنه في متغير من نوع integer

مثال على الـ Output المتوقع:

Enter your guess: 50

المرحلة 3: الـ Logic بتاعة التحقق من التخمين

الهدف: قارن تخمين المستخدم بالرقم السري وادّيه الـ Feedback.

القواعد:

  • لو guess < number → اطبع: Too low! Try again.
  • لو guess > number → اطبع: Too high! Try again.
  • لو guess == number → اطبع: Correct!

مثال على الـ Output المتوقع:

Enter your guess: 30
Too low! Try again.

Enter your guess: 80
Too high! Try again.

Enter your guess: 73
Correct!

المرحلة 4: الـ Loop لحد ما يخمن صح

الهدف: تفضّل تطلب من المستخدم يخمن لحد ما يوصل للإجابة الصح.

المتطلبات:

  • لفّ الـ Logic بتاعة الـ Input والتحقق في while أو do-while loop
  • اعدّ عدد المحاولات اللي عملها المستخدم
  • وقّف الـ Loop بس لما التخمين يتطابق مع الرقم السري

مثال على الـ Output المتوقع:

Enter your guess: 50
Too low! Try again.

Enter your guess: 75
Too high! Try again.

Enter your guess: 63
Too low! Try again.

Enter your guess: 73
Correct!

المرحلة 5: مستويات الصعوبة

الهدف: خلي اللاعب يختار مستوى الصعوبة قبل ما اللعبة تبدأ.

المتطلبات:

قبل توليد الرقم العشوائي:

  • اطلب من اللاعب يختار:
    • Easy ← أرقام بين 1–50
    • Medium ← أرقام بين 1–100
    • Hard ← أرقام بين 1–500
  • خزّن الصعوبة المختارة
  • حدّد الـ Range بناءً على الاختيار
  • ولّد الرقم السري باستخدام الـ Range ده

مثال على الـ Output:

Choose Difficulty:
1. Easy   (1 - 50)
2. Medium (1 - 100)
3. Hard   (1 - 500)

Enter choice: 2

المرحلة 6: حد أقصى للمحاولات

الهدف: حدّد عدد التخمينات اللي اللاعب مسموح له يعملها.

المتطلبات:

  • اديّ اللاعب 7 محاولات بس
  • عدّ كل تخمين
  • وقّف اللعبة لو المحاولات وصلت لـ 7
  • لو اللاعب خسر:
    • اطبع: Game over!
    • اكشف الرقم السري

مثال على الـ Output:

Enter your guess: 20
Too low!

Attempts remaining: 2

Enter your guess: 90
Too high!

Attempts remaining: 1

Enter your guess: 50
Too low!

Game over! The number was 73.

المرحلة 7: نظام النقاط

الهدف: كافئ اللاعبين اللي بيحلوا اللعبة في محاولات أقل.

المتطلبات:

  • اعمل متغير للـ Score
  • احسب الـ Score بناءً على عدد المحاولات
  • محاولات أقل = Score أعلى
  • اطبع الـ Final Score في تقرير اللعبة

المعادلة المقترحة:

score = 100 - (attempts * 10);

ممكن تعدّل المعادلة براحتك.

مثال على الـ Output:

===============================
         GAME RESULT
===============================
Correct Number : 73
Total Attempts : 4
Final Score    : 60
-------------------------------
Result         : You guessed it!
===============================

الـ Feature الأخير: تقرير اللعبة

بدل ما اللعبة تخلص بصمت، اعرض ملخص واضح لما اللاعب يكسب.

مثال على الـ Output:

===============================
         GAME RESULT
===============================
Correct Number : 73
Total Attempts : 5
-------------------------------
Result         : You guessed it!
===============================

الـ Functions اللي المفروض تعملها

// بترجع -1 لو التخمين أصغر، 1 لو أكبر، 0 لو صح
int checkGuess(int guess, int number);

// بتطبع ملخص اللعبة النهائي لما اللاعب يكسب أو يخسر
void printGameReport(int number, int attempts, int score, int won);

// بتخلي اللاعب يختار مستوى الصعوبة وبترجع الـ Maximum Range
int chooseDifficulty(void);

أهداف التعلم

بعد البروجيكت ده، المفروض تفهم:

  • إزاي الـ Loops بتشتغل في التطبيقات التفاعلية الحقيقية
  • إزاي تستخدم الـ Functions عشان تنظم الـ Code وتعيد استخدامه
  • إزاي تولّد أرقام عشوائية في C
  • إزاي تستخدم الـ Conditions (if / else if / else) عشان تاخد قرارات
  • إزاي تعدّ الـ Iterations وتتتبع حالة البرنامج
  • إزاي تتحكم في إمتى الـ Loop تبدأ وإمتى توقف
  • إزاي تعمل Output نظيف ومقروء للمستخدم

ملاحظة مهمة

  • ابدأ باختبارات صغيرة — خمّن رقم بتعرفه عن طريق طباعته مؤقتاً
  • احسب الـ Feedback المتوقع يدوياً قبل ما تشغّل البرنامج
  • قارن الـ Output المتوقع بيتاعك باللي البرنامج بيطبعه فعلاً
  • لو في حاجة غلط، عزل الخطوة: هل المشكلة في الـ Input، الـ Comparison، أو الـ Loop؟

تسجيل الجلسة

لو محتاج تراجع أي جزء من الشرح وانت بتشتغل على الـ Project، تقدر تتفرج على التسجيل الكامل هنا: شاهد الجلسة على YouTube

أحسن البرامج بتتبنى بخطوة صغيرة شغّالة دلوقتي.

مستني أشوف اللي هتبنيه ❤️