مشروع السيشن الأول لـ CS50 بالعربي (الاختيار الأول): الـ Bug Chaser (لعبة النجاة)
أهلاً بيك في أول تحدي للمشاريع! في الاختيار ده، هنحط الـ Logic بتاعك تحت الاختبار وهنبني لعبة نجاة (Survival Game) حماسية جداً. أنت هتمثل الـ Programmer اللي محبوس جوه الـ Codebase، وهدفك بسيط: تفضل صاحي لأطول فترة ممكنة والـ "Bug" بيطاردك في كل مكان.
الـ Project ده هيساعدك تتقن التحكم بالـ Keyboard، وإزاي تعمل Homing Logic للمطاردة، وإزاي تستخدم الـ Variables عشان تحسب نجاحك. يلا بينا نبدأ الـ Coding!
مرجع:
لو محتاج مساعدة عشان تلاقي الـ Blocks أو تفهم كل واحد بيعمل إيه بالظبط، شوف الـ Scratch Reference: ده موقع تفاعلي معمول مخصوص عشان يساعدك تدور وتعمل Filter وتفهم كل الـ Scratch Blocks بالتفصيل. لو احتجت في أي وقت تعرف أي Block تستخدمه عشان تبني الـ Logic بتاعك، الموقع ده هيكون "صديقك الصدوق"!
الخطوات دي عشان تبني اللعبة بتاعتك. وخليك فاكر: الهدف مش بس إنك تخلص، الهدف إنك تفهم الـ Logic بتاع اللعبة شغال إزاي!
الخطوة الأولى: اختار الـ Characters بتاعتك (الـ Sprites)
في الـ Scratch، كل عنصر في اللعبة بنسميه "Sprite". افتح الـ Sprite Library واختار الأبطال بتوعك:
- الـ Player: ده بيمثلك أنت جوه اللعبة.
- مقترحات: شخصية بني آدم، قطة، أو حتى صورة Laptop.
- الـ Enemy: ده الـ "Bug" اللي هيطاردك.
- مقترحات: حشرة (Beetle)، شبح، أو الـ Sprite اللي شكله "X" أحمر.
- الـ Backdrop: المكان اللي اللعبة هتحصل فيه (الخلفية).
- مقترحات: "Neon Tunnel" عشان تدي شكل تكنولوجي، أو "Stars" لو عايز تخلي الـ Coding في الفضاء.
الخطوة الثانية: برمجة الـ Player (التحكم بالـ Keyboard)
إحنا عايزين الـ Player يتحرك كل ما ندوس على الزراير (الأسهم). هنستخدم الـ Conditionals (قاعدة If-Then) عشان نشيك إحنا دايسين على أنهي زرار.
الـ Blocks اللي هتحتاجها:
When Green Flag Clicked(عشان تبدأ الـ Logic).Foreverloop (عشان تفضل تشيك على الزراير طول ما اللعبة شغالة).If <key [ ] pressed?> then(ده الـ Sensing block اللي بيحس بالزراير).Change x by [ ](للحركة يمين وشمال).Change y by [ ](للحركة فوق وتحت).
الـ Logic:
- Up Arrow (سهم فوق): خلي الـ
yبـ5. - Down Arrow (سهم تحت): خلي الـ
yبـ-5. - Right Arrow (سهم يمين): خلي الـ
xبـ5. - Left Arrow (سهم شمال): خلي الـ
xبـ-5.
Pro-Tip: لو حسيت إن الـ Sprite بيتحرك بسرعة أوي، قلل الرقم من5لـ3. ولو بطيء، جرب تخليه10!
الخطوة الثالثة: برمجة الـ Bug (الـ Homing Logic)
الـ Bug لازم يعرف مكانك ويروحلك مهما رحت فين. هنستخدم الـ Motion blocks عشان نخليه يـ "Track" مكانك.
الـ Blocks اللي هتحتاجها:
Point towards [Player Sprite]Move [ ] steps
الـ Logic:
جوه الـ Forever loop، قول للـ Bug إنه يـ Point towards [Player] وبعدين يـ Move 2 steps.
مستوى الاختيار (اختار واحد من دول):
- الاختيار A (الـ Predator): الـ Bug هيمشي وراك بالظبط وبدقة.
- الاختيار B (الـ Drifter): جوه الـ loop، زود Block اسمه
turn pick random (-10) to (10) degrees. ده هيخلي الـ Bug حركته مش متوقعة وبيتهز وهو بيطاردك (Wobble).
الخطوة الرابعة: الـ Score والـ Game Over
هتقدر تنجو لأد إيه؟ محتاجين الـ Variable عشان نحسب الوقت.
- روح لخانة الـ Variables ودوس "Make a Variable" وسميها
Score. - ابدأ الـ Score: تحت الـ Green Flag، استخدم
Set Score to 0. - زيادة الـ Score مع الوقت: استخدم
Foreverloop جواهاWait 1 secondsوبعدهاChange Score by 1. - الـ Crash (نهاية اللعبة): لازم نوقف اللعبة لو الـ Bug لمسك.
- زود ده جوه الـ Script بتاع الـ Bug:
If <touching [Player]?> then [Stop All].
- زود ده جوه الـ Script بتاع الـ Bug:
الخطوة الخامسة: حط التاتش بتاعك (Creative Choices)
عشان تخلي اللعبة بتاعتك مميزة، جرب تزود واحدة من الـ Features دي:
- تغيير الحجم: كل ما الـ Score يوصل لـ 10، خلي الـ Bug يكبر شوية باستخدام الـ
Change size by [10]. - الـ Sound Effects: زود صوت "Boop" كل ما الـ Score يزيد، أو صوت "Crash" لما اللعبة تخلص.
- الصعوبة (Difficulty): اعمل Duplicate للـ Bug! كده بقى عندك اتنين Bug بيطاردوك في نفس الوقت.
الـ Checklist قبل ما تسلم
- هل الـ Player بيتحرك بالـ 4 أسهم؟
- هل الـ Bug بيمشي ورا الـ Player لوحده؟
- هل الـ Score بيزيد كل ثانية؟
- هل اللعبة بتوقف أول ما يلمسوا بعض؟
تسجيل السيشن
لو محتاج تراجع أي جزء من الشرح وأنت شغال على الـ Project، تقدر تشوف تسجيل السيشن كامل من هنا: السيشن على YouTube
في السيشن دي اتكلمنا عن أساسيات الـ Computer Science، يعني إيه Binary، وإزاي بدأنا أول خطواتنا مع Scratch.
خليك فاكر: "مش المهم إزاي الكود بيتكتب، المهم إزاي بتفكر عشان تحل المشكلة." نشوفكم في الـ Project اللي جاي!
Member discussion