سؤال

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

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

على لعبة من خلال جميع الحلقات لاعبs ويدعو TakeTurn طريقة للقيام بكل الأشياء الضرورية لاستكمال بدوره.أريد أن أكون قادرة على n عدد من اللاعبين, و أن تكون قادرا على تعيين عدد التعسفي من أن يكون الكمبيوتر اللاعبين.إذا كان يعتقد أن يكون HumanPlayer الصف ، ComputerPlayer فئة ، سواء التي تستمد من لاعب.

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

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

أي آراء حول هذا سيكون موضع تقدير.

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

المحلول

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

كل لعبة فئة يجب أن تشغل نفسها مع الدولة من المجلس بدوره.يجب على اللاعبين تنفيذ جميع لاعب واحد واجهة تخفي جميع التنفيذ من اللعبة.

نصائح أخرى

إذا اللعبة هو إدارة الدولة اللعبة و القيام I/O, لعبة يفعل الكثير.

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

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

الإنسان اللاعبين و اللعبة ككل سواء مشتركة I/O الحزمة التي تظهر لعبة الدولة و يطالب البشر على مدخلاتها.

يمكنك الاستفادة من جافا Observable من خلال جعل I/O حزمة أحد Observer من اللعبة.بهذه الطريقة, لعبة الدولة التغييرات ذكرت I/O عرض أو تسجيل أو كليهما.

أنا ربما لا يكون لديك اثنين HumanPlayer و ComputerPlayer الطبقات فحسب ، Player الطبقة التي يتم تكوينها في إيجاد الوقت المناسب المدخلات الاستراتيجية.

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

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

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

واجهة لاعب الهدايا لعبة هو متعامد على سلوك المشتقة لاعب فصول.

حقيقة أن تنفيذ TakeTurn يختلف اعتمادا على نوع من الخرسانة لاعب كائن لا ينبغي أن يكون سببا للقلق.

أعتقد Game فئة لا ينبغي القلق حيال أي تطبيقات لاعب الطبقات ، و أيضا تجاهل واجهة المستخدم.

أي إدخال المستخدم يحتاج إلى معالجة من قبل HumanPlayer فئة.

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

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

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

Im لست متأكدا إذا كان هذا هو ما تريد

public abstract class Player 
{
  int position;
  DecisionMaker decisionDependency;

  ...

  public void TakeTurn()
  {
    position += RollDice();
    GameOption option GetOptions(position);
    MakeDescion(option);
  }

  protected int RollDice()
  {
    //do something to get the movement
  }

  protected abstract void MakeDecision(GameOption option);

}

Public class ComputerPlayer : Player
{
  public ComputerPlayer()
  {
    decisionDependency = new AIDecisionMaker();
  }

  protected override void void MakeDecision(GameOption option)
  {
    decisionDependency.MakeDecision(option);
    //do stuff, probably delgate toan AI based dependency
  }
}

Public class HumanPlayer : Player
{
  public HumanPlayer()
  {
    decisionDependency = new UIDecisionMaker();
  }

  protected override void void MakeDecision(GameOption option)
  {
    decisionDependency.MakeDecision(option);
    //do stuff, probably interacting with the a UI or delgate to a dependency
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top