سؤال

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

هل كانت مفيدة؟

المحلول

وأنصحك تقرأ على A * خوارزمية البحث كما هو شائع المستخدمة في ألعاب لمشاكل تحديد المسارات.

إذا هذه اللعبة هو ثنائي الأبعاد (أو 2.5) أقترح عليك استخدام نظام البلاط كما التحقق من التصادم سيكون أسهل. ثيريس الكثير من المعلومات على الانترنت التي يمكن أن تحصل بدأت مع هذه.

نصائح أخرى

وهناك نوعان من طرق سهلة لتحديد الحدود الخاصة بك والتي هي مناسبة لمثل هذه اللعبة.

وهذه الطريقة الأبسط هو تقسيم المنطقة الخاصة بك إلى الشبكة، واستخدام مجموعة 2D لتتبع التي المربعات في الشبكة هي سالكة. عادة، هذه المجموعة بتخزين المعلومات الخريطة الخاصة جدا، وذلك في كل موقف، وهناك الرقم الذي يشير إلى ما إذا كان هذا مربع يحتوي على العشب أو الجدار أو الطريق أو الجبل الخ (وبالتالي ما الصورة لعرضها). لتعطيك صورة تقريبية:

######
#.#  #
# ## #
#    #
######

وهناك طريقة أكثر تعقيدا وهو أمر ضروري إذا كنت ترغب في نوع من "متاهة" نظرة، مع <قوية> جدران رقيقة ، أو هو استخدام مجموعة 2D التي تشير إلى ما إذا كان هناك جدار الرأسي بين الساحات الشبكة وأيضا ما إذا كان هناك جدار الأفقي بين الساحات الشبكة. صورة تقريبية (يبدو امتدت في ASCII ولكن نأمل ستحصل على نقطة واحدة):

 - - - -
| |     |
   - - 
|       |
 - - - -

ووالشيء التالي هو أن تقرر ما الاتجاهات قد تتحرك الطابع الخاص بك في (أعلى / أسفل / يسار / يمين غير أسهل، ولكن الأقطار ليست <م> أيضا أصعب من ذلك بكثير). ثم البرنامج لديه أساسا إلى "عقليا" استكشاف المنطقة، بدءا من وضعك الحالي، على أمل أن تأتي عبر الوجهة.

وبحث بسيط هو أن من السهل لتنفيذ لأعلى / أسفل / يسار / يمين وسوف تجد لك أقصر الطرق، إذا كان هناك واحد، ويسمى <لأ href = "http://en.wikipedia.org/wiki / اتساع-first_search "يختلط =" نوفولو noreferrer "> اتساع والعشرين بحث . وفيما يلي بعض شبة الكود:

queue = new Queue #just a simple first-in-first-out
queue.push(startNode)
while not queue.empty():
    exploreNode = queue.pop()
    if isWalkable(exploreNode): #this doesn't work if you use
                                #"thin walls". The check must go
                                #where the pushes are instead

        if isTarget(exploreNode):
            #success!!!
        else:
            #push all neighbours
            queue.push( exploreNode.up )
            queue.push( exploreNode.down )
            queue.push( exploreNode.left )
            queue.push( exploreNode.right )

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

استخدام

و* A والعديد من خوارزميات البحث أخرى ل<م> طابور أولوية بدلا من الانتظار FIFO. وهذا يتيح لهم النظر "أكثر عرضة" مسارات البداية، ولكن التفاف على مسارات ملتوية إذا اتضح أن يتم حظر مسارات أكثر مباشرة.

<اقتباس فقرة>   

والخوارزميات للأسف، لقد درست أبدا ذلك ليس لدي أي فكرة عن كيفية احتساب المسار.

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

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

وهذه المفاهيم يمكن استخدامها في أي تطبيق الذي يتطلب حافة سريعة وساق الكشف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top