سؤال

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

شيء أشبه المستوطنون سلسلة.

دعونا نفترض أنا لا أريد أي الرسومات في هذه اللحظة ، أن أعتقد أنني يمكن أن ينجح.

حتى شكوكي هي التالية:

  1. يجب على كل كيان أن فئة و كل واحد يكون الموضوع ؟
  2. أن الكيانات تكون مجمعة في القوائم داخل فصول و كل واحد يكون الموضوع ؟

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

إذا واحد يأخذ تنفيذ 2, سيكون أفضل من حيث الموارد ولكن بعد ذلك...

كيف يجب أن المجموعة الكيانات ؟

  1. وقد فئة المنازل في العام ولها واجهة القائمة على إدارة هذا ؟
  2. وقد فئة على فئات محددة من منازل كائن القائمة على إدارة هذا ؟

وماذا عن المواضيع ؟

  1. يجب أن يكون التبسيط اللعبة الرئيسية الحلقة ؟
  2. يجب أن يكون موضوع لكل فئة ؟
  3. كيف العمال/نقل صالح في الصورة ؟
هل كانت مفيدة؟

المحلول

النهج العادي لا يستخدم خيوط في كل شيء ، بل تنفذ كيانات الدولة-آلات.ثم mainloop يبدو مثل هذا:

 while( 1 )
{
    foreach( entity in entlist )
    {
        entity->update();
    }

    render();
}

نصائح أخرى

الميديا حواء على الانترنت يستخدم stackless الثعبان الفاعل نموذج لمحاكاة موضوع في كيان النظام دون الموارد ضرب.

راجع هذا الرابط لمزيد من المعلومات:http://harkal.sylphis3d.com/2005/08/10/multithreaded-game-scripting-with-stackless-python/

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

أنا مشوشة قليلا عن جزء من سؤالك المتعلقة الطبقات.إذا فهمت سؤالك بشكل صحيح ، اقتراحي أن يكون فئة لكل نوع من المنزل (مزرعة للخنازير, طاحونة, الخ) المستمدة من مشترك الفئة الأساسية مجردة ، House.كنت ثم تخزين جميع المنازل في عالم اللعبة في قائمة المنازل.

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

وثمة بديل آخر stackless بايثون (أو الحالي الثعبان البديلة) ، كما تدعم أيضا نوع من lightweightthread الذي هو بارد جدا بالنسبة محركات اللعبة.حواء على الانترنت يستخدمه خوادمها.ولكن ليس توزيع, ولكن هذا يمكن أن يتحقق بسهولة يدويا.

في حين أن الإجابة بواسطة @مايك و هي في معظمها صحيحة ، يجب أن نضع في اعتبارنا أن التكرار على الكيانات في foreach دورة يجعل من أجل تقييم بشكل كبير القطعية التي لديها غير مرغوب فيه من الآثار الجانبية.من ناحية أخرى عرض المواضيع يفتح إمكانية heisenbugs و التزامن القضايا, لذا فإن أفضل طريقة رأيته و استخدامها يعتمد على الجمع بين دورتين:أول واحد يجمع الإجراءات من وكلاء/العمال استنادا إلى حالته السابقة ، الدورة الثانية يؤلف نتائج أعمال والتحديثات الدولة المحاكاة.لتجنب احتمال التحيز في كل دورة من اجل تقييم العشوائية.هذا راجع للشغل جداول المتوازية تقييم الموضوع إلى التزامن في نهاية كل دورة.

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

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

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

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