اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

دعك من اللعبة حاليًا، مستواك تطور منذ أخر مرة وذلك جيد جدًا، وسيتحسن  باستمرار طالما أنك توظف ما تعلمته من خلال مشاريع عملية، لكن عليك تحديد وجهتك والتخصص الذي تريده لكي تلتزم بخريطة طريق roadmap في خلال فترة زمنية محددة وقياس تقدمك خلال تلك الفترة.

بخصوص اللعبة فأحسنت حقًا، والجزء الخاص بشريط التقدم الذي يوضح مدى قربك من الرقم المنطق الخاص بها شائع في أغلب البرامج ومن الجيد أنك تعلمته ويعمل بشكل سليم، ومن الأفضل لو تم تغيير لونه حسب مدى القرب مثلاً أحمر - برتقالي - أخضر.

وهناك مشكلة بسيطة بخصوص زر الإدخال Enter، فعند الضغط عليه من لوحة الأرقام يتم إدخال مسافة فارغة، لكن عند الضغط عليه من الزر الرئيسي Enter يعمل بدون مشكلة، حاول اكتشاف الخطأ.

وبعض الدوال طويلة جدًا، حاول تقسيمها إلى دوال أصغر وأكثر تركيزًا، مثل تقسيم دالة draw_gradient_background إلى دالتين واحدة لحساب ألوان التدرج وأخرى لرسم الخطوط.

وعلى ذكر التقسيم والتنظيم، فلما تستخدم نمط التصميم game state machine وهو نمط مفيد للألعاب، ومفاده هو حالة اللعبة Game State) في أي لحظة أثناء تشغيل اللعبة، تكون اللعبة في حالة معينة، وفي لعبة تخمين الأرقام، تشمل الحالات:

  •  Playing يقوم اللاعب بإدخال التخمينات.
  • Game Over) خمن اللاعب الرقم بشكل صحيح أو نفدت محاولاته.
  • High Score Display يتم عرض أفضل نتيجة بعد انتهاء اللعبة.

أي كالتالي:

class GameStateMachine:
    def __init__(self):
        self.states = {
            'playing': PlayingState(),
            'game_over': GameOverState(),
            'high_score': HighScoreState()
        }
        self.current_state = 'playing'

    def update(self):
        self.states[self.current_state].update()

    def change_state(self, new_state):
        self.current_state = new_state

class PlayingState:
    def __init__(self):

    def update(self):

class GameOverState:
    def __init__(self):

    def update(self):

class HighScoreState:
    def __init__(self):

    def update(self):

وبدلاً من كتابة قيم الألوان وأحجام الخطوط مباشرةً، ضع في اعتبارك تعريف الثوابت في أعلى الكود، من أجل تسهيل تغيير مظهر اللعبة دون البحث عن قيم فردية.

أيضًا استخدم دالة pygame.event.get() من Pygame للتعامل مع أحداث متعددة في وقت واحد، مما يقلل من عدد عبارات if في شفرة معالجة الأحداث.

وأنت ترسم كل زر على حدة، فلما لا  تعتمد على حلقة لرسم جميع الأزرار مرة واحدة، لتحسين الأداء وتقليل تكرار الكود.

ولجعل اللعبة أكثر متعة حاول إضافة Timer ثم إنقاصه بمعدل معين مع كل خطأ مثلاً، وإضافة بعض الأصوات اللطيفة.

أو تقديم مستويات صعوبة مختلفة، مثل وضع صع  مع نطاق أكبر من الأرقام أو وضع سهل مع نطاق أصغر.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...