ما هي استراتيجية جيدة لبناء مخطط موجه للخريطة لعبة (في بايثون)؟

StackOverflow https://stackoverflow.com/questions/610892

سؤال

وأنا تطوير لدت من الناحية الإجرائية لعبة العالم في بيثون. وهيكل العالم سيكون مماثلا للنموذج MUD / MUSH من الغرف ومخارج ترتيب بمثابة مخطط موجه (الغرف العقد، مخارج هي حواف). (لاحظ أن هذا هو لا بالضرورة الرسم البياني احلقي، على الرغم من أنني على استعداد للنظر في حلول غير الحلقية).

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

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

لكمثال على ذلك، سوف يكون لي غرفة من هذه الأنواع:

side_street, main_street, plaza, bar, hotel, restaurant, shop, office

وأخيرا، فإن السؤال التالي: ما هي استراتيجية جيدة لinstantiating وترتيب هذه الغرف لإنشاء رسم بياني التي قد تتوافق مع قواعد معينة؟

ويمكن أن تشمل بعض القواعد: واحد ساحة لكل 10000 نسمة؛ main_street يتصل plaza. side_street يتصل main_street أو side_street. hotel تفضل main_street أو plaza الاتصالات، ويتلقى المزيد من علامات تبعا لذلك؛ وما إلى ذلك.

ونقاط مكافأة إذا استراتيجية اقترح سيمكن تطبيق تعتمد على البيانات.

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

المحلول

أولا، تحتاج بعض الشعور الموقع. الكائنات المختلفة لديك تحتل قدرا من التنسيق الفضاء.

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

إذا الأمور غير منتظمة - والمزدحمة بالسكان - الحياة هي إلى حد ما أكثر تعقيدا

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

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

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


والثانية، كنت في حاجة الى نوع من "مولد متاهة". يتم إنشاء متاهة ببساطة مرتبطة بسهولة كهيكل شجرة هذا ما مطوية في فضاء معين.

والمتاهة / شجرة لديها "الجذر" العقدة التي سوف يكون مركز المتاهة. ليس بالضرورة مركز البدني المساحة الخاصة بك، ولكن عقدة الجذر سيكون منتصف بنية المتاهة.

ومن الناحية المثالية، فرع واحد من هذه العقدة يحتوي على واحد "مدخل" لكامل المساحة.

والفرع الآخر من هذه العقدة يحتوي على واحد "الخروج" من كامل المساحة.

ويمكن للشخص يهيمون على وجوههم من مدخل للخروج، وزيارة الكثير من المواقع "طريق مسدود" على طول الطريق.

واختيار نوع من الفضاء للعقدة الجذر. تسقطها في الفضاء خريطة الخاص بك.

وهذا سوف يكون 1 - <م> ن مداخل، كل واحدة منها هي شجرة من الباطن مع عقدة الجذر و1 - <م> ن المداخل. انها هذه الأعمال المدخل المتعدد الذي يجعل شجرة تناسب طبيعية لهذا الهيكل. أيضا شجرة المناسبة يرتبط دائما بشكل جيد في أنك لن عزلت المقاطع التي لا يمكن الوصول إليها.

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

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


وبقية الاحتياجات الخاصة بك هي صقل على الطريق مولد متاهة يختار المواقع.

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


وتعريف لديك مساحة يمكن أن يكون 2D أو 3D - كلاهما منطقي جدا. للحصول على الائتمان المكافأة، والنظر في كيفية كنت تنفيذ 2D الفضاء مزينة بالبلاط مع السداسي بدلا من الساحات.

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

نصائح أخرى

تحقق من المناقشات بشأن rel="nofollow وMUD رابط - هناك بعض المناقشات كبيرة حول تخطيط العالم، والجيل، و أنواع مختلفة من تنسيق / نظم الملاحة في "ترقيمها المتقدم والتصميم" (أو ما شابه) المنتدى.

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