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-whileloop - اعدّ عدد المحاولات اللي عملها المستخدم
- وقّف الـ 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
أحسن البرامج بتتبنى بخطوة صغيرة شغّالة دلوقتي.
مستني أشوف اللي هتبنيه ❤️
Member discussion