মডেলিং বোর্ড গেমগুলির জন্য কোনও নিদর্শন? [বন্ধ]


94

মজা করার জন্য, আমি আমার ছেলের পছন্দের বোর্ড গেমগুলির একটি সফটওয়্যার হিসাবে লিখার চেষ্টা করছি। শেষ পর্যন্ত আমি এটির উপরে একটি ডাব্লুপিএফ ইউআই তৈরি করার প্রত্যাশা করি, তবে এখনই আমি মেশিনটি তৈরি করছি যা গেমস এবং এর নিয়মগুলির মডেল করে।

আমি এটি করার সাথে সাথে আমি এমন সমস্যাগুলি দেখতে থাকি যা আমার মনে হয় অনেকগুলি বোর্ড গেমগুলির মধ্যে সাধারণ এবং সম্ভবত অন্যরা ইতিমধ্যে সেগুলি আমার চেয়ে আরও ভাল সমাধান করেছেন।

(নোট করুন যে এআই গেমটি খেলবে এবং উচ্চতর পারফরম্যান্সের চারপাশের নিদর্শনগুলি আমার কাছে আকর্ষণীয় নয়))

এখনও পর্যন্ত আমার নিদর্শনগুলি হ'ল:

  • গেম বক্সে সত্তার প্রতিনিধিত্বকারী বেশ কয়েকটি অপরিবর্তনীয় প্রকার, যেমন ডাইস, চেকার, কার্ড, একটি বোর্ড, বোর্ডের ফাঁকা জায়গা, অর্থ ইত্যাদি etc.

  • প্রতিটি খেলোয়াড়ের জন্য একটি বস্তু, যাতে প্লেয়ারদের সংস্থান থাকে (যেমন অর্থ, স্কোর), তাদের নাম ইত্যাদি contains

  • এমন একটি বস্তু যা গেমের অবস্থার প্রতিনিধিত্ব করে: খেলোয়াড়রা, এটির পালা, বোর্ডে পিসগুলির বিন্যাস ইত্যাদি

  • একটি রাষ্ট্রীয় মেশিন যা টার্ন ক্রম পরিচালনা করে। উদাহরণস্বরূপ, অনেক গেমের একটি ছোট্ট প্রাক-গেম থাকে যেখানে প্রতিটি খেলোয়াড় কে প্রথমে যায় তা দেখতে রোল করে; এটিই শুরু রাষ্ট্র। যখন কোনও খেলোয়াড়ের পালা শুরু হয়, প্রথমে তারা রোল করে, তারপরে তারা সরে যায়, তারপরে তাদের জায়গায় নাচতে হবে, তারপরে অন্যান্য খেলোয়াড়েরা অনুমান করেন যে তারা মুরগির জাত কী, তারপরে তারা পয়েন্ট পান।

আমি কিছু সুবিধা নিতে পারি পূর্ববর্তী শিল্প আছে?

সম্পাদনা: সম্প্রতি একটি জিনিস আমি বুঝতে পেরেছি তা হল গেমের রাজ্যটিকে দুটি বিভাগে ভাগ করা যায়:

  • গেম আর্টিক্যাক্টের অবস্থা । "আমার কাছে $ 10" বা "আমার বাম হাতটি নীল"।

  • গেম সিকোয়েন্স স্টেট । "আমি দুবার ডাবল গড়িয়েছি; পরেরটি আমাকে কারাগারে রাখে"। একটি রাষ্ট্রীয় যন্ত্রটি এখানে অর্থবোধ করতে পারে।

সম্পাদনা: আমি এখানে যা খুঁজছি তা হ'ল দাবা বা স্ক্র্যাবল বা একচেটিয়া জাতীয় মাল্টিপ্লেয়ার টার্ন-ভিত্তিক গেমগুলি বাস্তবায়নের সেরা উপায়। আমি নিশ্চিত যে আমি এটি শেষ করে কাজ শুরু করেই এই জাতীয় একটি গেম তৈরি করতে পেরেছি, তবে অন্যান্য ডিজাইন প্যাটার্নগুলির মতো, সম্ভবত কিছু জিনিস আরও সহজভাবে পরিচালিত করার কিছু উপায় রয়েছে যা সাবধানতার সাথে অধ্যয়ন ছাড়া সুস্পষ্ট নয়। এটাই আমি প্রত্যাশা করছি।


4
আপনি কোনও ধরণের হকি পোকি, একচেটিয়া, চ্যাডেস ম্যাসআপ তৈরি করছেন?
অ্যান্থনি মাস্ট্রিয়ান

একচেটিয়া প্রতিষ্ঠানের জন্য তিনটি দ্বিগুণ নিয়মের মতো রাষ্ট্রের (এরর ...) উপর নির্ভরশীল যে কোনও নিয়মের জন্য আপনি একটি রাষ্ট্রীয় মেশিন চাইবেন। আমি একটি পূর্ণ উত্তর পোস্ট করব তবে এটি করার আমার কোনও অভিজ্ঞতা নেই। আমি যদিও এটি সম্পর্কে পন্টিফাই করতে পারে।
এমএসএন

উত্তর:


116

দেখে মনে হচ্ছে এটি 2 মাসের পুরানো থ্রেড যা আমি এখনই লক্ষ্য করেছি, তবে কী আছে। আমি আগে একটি বাণিজ্যিক, নেটওয়ার্ক বোর্ড বোর্ড গেমের জন্য গেমপ্লে কাঠামোটি ডিজাইন করেছি এবং বিকাশ করেছি। এটির সাথে কাজ করার জন্য আমাদের খুব মনোরম অভিজ্ঞতা হয়েছিল।

আপনার গেমটি সম্ভবত অসীম পরিমাণে রাজ্যের মধ্যে থাকতে পারে কারণ এ-এর কত টাকা প্লেয়ার রয়েছে, কত টাকা প্লেয়ার বি রয়েছে, ইত্যাদি ইত্যাদি বিষয়গুলির অনুমতি দেওয়ার কারণে ... আমি নিশ্চিত যে আপনি চান রাষ্ট্রের মেশিন থেকে দূরে থাকা।

আমাদের কাঠামোর পেছনের ধারণাটি ছিল গেমের অবস্থাটিকে সমস্ত ডেটা ফিল্ডের সাথে কাঠামো হিসাবে প্রতিনিধিত্ব করা যা একসাথে, সম্পূর্ণ গেম স্টেট সরবরাহ করে (যেমন: আপনি যদি ডিস্কে গেমটি সংরক্ষণ করতে চান, আপনি সেই কাঠামোটি লেখেন)।

কোনও খেলোয়াড় তৈরি করতে পারে এমন সমস্ত বৈধ গেম ক্রিয়াকে উপস্থাপন করার জন্য আমরা কমান্ড প্যাটার্নটি ব্যবহার করেছি । এখানে একটি উদাহরণ ক্রিয়া হবে:

class RollDice : public Action
{
  public:
  RollDice(int player);

  virtual void Apply(GameState& gameState) const; // Apply the action to the gamestate, modifying the gamestate
  virtual bool IsLegal(const GameState& gameState) const; // Returns true if this is a legal action
};

সুতরাং আপনি দেখতে পাচ্ছেন যে কোনও পদক্ষেপ বৈধ কিনা তা স্থির করার জন্য আপনি সেই ক্রিয়াটি তৈরি করতে পারেন এবং তারপরে বর্তমান গেমের অবস্থার মধ্য দিয়ে এর আইজেল ফাংশনটি কল করতে পারেন। যদি এটি বৈধ হয়, এবং প্লেয়ারটি ক্রিয়াটি নিশ্চিত করে তবে আপনি গেমের অবস্থাটি পরিবর্তনের জন্য প্রয়োগ ফাংশনটি কল করতে পারেন। আপনার গেমপ্লে কোডটি বৈধ ক্রিয়া তৈরি করে এবং জমা দিয়ে কেবল গেমের অবস্থা পরিবর্তন করতে পারে তা নিশ্চিত করে (সুতরাং অন্য কথায়, অ্যাকশন :: পদ্ধতির পরিবার প্রয়োগ করাই একমাত্র জিনিস যা সরাসরি গেমের অবস্থা পরিবর্তন করে), তারপরে আপনি নিশ্চিত হন যে আপনার গেমটি রাষ্ট্র কখনই অবৈধ হবে না। তদুপরি, কমান্ড প্যাটার্নটি ব্যবহার করে, আপনি আপনার প্লেয়ারের পছন্দসই চালগুলি সিরিয়ালাইজ করা এবং অন্যান্য প্লেয়ারের গেমের স্থিতিতে মৃত্যুদন্ড কার্যকর করার জন্য একটি নেটওয়ার্কের মাধ্যমে প্রেরণ করা সম্ভব করে তোলেন।

মোটামুটি মার্জিত সমাধান হিসাবে দেখা গেছে যে এই সিস্টেমের সাথে একটি গোটচা হয়ে গেছে। কখনও কখনও ক্রিয়াকলাপে দুই বা ততোধিক পর্যায়গুলি পড়তে পারে। উদাহরণস্বরূপ, প্লেয়ার একচেটিয়া সম্পত্তিতে অবতরণ করতে পারে এবং এখনই একটি নতুন সিদ্ধান্ত নিতে হবে। খেলোয়াড় যখন পাশা ঘুরিয়েছিলেন এবং তারা কোনও সম্পত্তি কেনার সিদ্ধান্ত নেওয়ার আগে গেমের অবস্থা কী? আমরা আমাদের গেমের রাজ্যের একজন "অ্যাকশন প্রসঙ্গে" সদস্য রেখে বৈশিষ্ট্যগুলি পরিচালনা করেছি। অ্যাকশন প্রসঙ্গটি সাধারণত নালাগুলি হয়ে থাকে, ইঙ্গিত করে যে গেমটি বর্তমানে কোনও বিশেষ অবস্থায় নেই। খেলোয়াড় যখন পাশা রোল করে এবং ডাইস রোলিং অ্যাকশনটি গেমের স্টেটে প্রয়োগ করা হয়, তখন বুঝতে পারবেন যে প্লেয়ারটি একটি মালিকানাধীন সম্পত্তিতে অবতীর্ণ হয়েছে এবং একটি নতুন "প্লেয়ারডিসাইডটোপুর্চেসপ্রোপার্টি" তৈরি করতে পারে ক্রিয়া প্রসঙ্গে যা প্লেয়ারের সূচি থাকে সেটির সিদ্ধান্তের জন্য আমরা অপেক্ষা করছি। রোলডাইস অ্যাকশনটি শেষ হওয়ার সাথে সাথে, আমাদের গেমের রাষ্ট্রটি প্রতিনিধিত্ব করে যে এটি বর্তমানে নির্দিষ্ট প্লেয়ারের জন্য সম্পত্তি কেনা উচিত কিনা তা সিদ্ধান্ত নেওয়ার জন্য অপেক্ষা করছে। "বায়প্রোপার্টি" এবং "পাসপ্রোপার্টিপোরচিঅপার্পুরিটি" ক্রিয়া ব্যতীত অন্য সমস্ত ক্রিয়াকলাপের আইসলগাল পদ্ধতিতে মিথ্যা প্রত্যাবর্তন করা এখন সহজ, যা কেবল তখনই আইনী যখন গেমের স্টেটে "প্লেয়ারডিসাইডটোপুর্চেসপ্রোপার্টি" অ্যাকশন প্রসঙ্গে থাকে।

অ্যাকশন প্রসঙ্গে ব্যবহারের মাধ্যমে, বোর্ড গেমের লাইফ-টাইমের কোনও একক পয়েন্ট কখনই পাওয়া যায় না যেখানে গেমের স্টেটের কাঠামোটি সেই সময়ে গেমের সময়ে কী ঘটছে তা পুরোপুরি প্রতিনিধিত্ব করে না। এটি আপনার বোর্ড গেম সিস্টেমের খুব পছন্দসই সম্পত্তি। কোডটি লেখা আপনার পক্ষে সহজ হয়ে যায় যখন আপনি কেবলমাত্র একটি কাঠামো পরীক্ষা করে গেমটিতে কী ঘটছে সে সম্পর্কে আপনি জানতে চান এমন সব কিছু খুঁজে পেতে পারেন।

তদ্ব্যতীত, এটি নেটওয়ার্কযুক্ত পরিবেশগুলিতে খুব সুন্দরভাবে প্রসারিত হয়েছে, যেখানে ক্লায়েন্টরা কোনও হোস্টের মেশিনে নেটওয়ার্কের মাধ্যমে তাদের ক্রিয়াকলাপ জমা দিতে পারে, যা হোস্টের "অফিসিয়াল" গেমের অবস্থাতে ক্রিয়াটি প্রয়োগ করতে পারে এবং তারপরে অন্যান্য ক্রিয়াকলাপগুলিতে সেই ক্রিয়াটি প্রতিধ্বনিত করে to তাদের তাদের প্রতিলিপিযুক্ত গেমের রাজ্যে এটি প্রয়োগ করতে দিন।

আমি আশা করি এটি সংক্ষিপ্ত এবং সহায়ক ছিল।


4
আমি মনে করি না এটি সংক্ষিপ্ত, তবে এটি সহায়ক! উত্সাহিত।
জে বাজুজি

আনন্দিত এটি সহায়ক ছিল ... কোন অংশ সংক্ষিপ্ত ছিল না? আমি একটি স্পষ্টকরণ সম্পাদনা করতে পেরে খুশি হব।
অ্যান্ড্রু শীর্ষে

আমি এখনই টার্ন-ভিত্তিক গেমটি তৈরি করছি এবং এই পোস্টটি সত্যিই সহায়ক হয়েছে!
কিভ

আমি পড়েছি যে মেমেন্টো হ'ল পূর্বাবস্থায় ফিরে আসার জন্য ব্যবহৃত প্যাটার্ন ... মেমোন্টো বনাম কমান্ড প্যাটার্নটি পূর্বাবস্থায়
নেওয়ার

আমি এখনও অবধি স্ট্যাকওভারফ্লোতে পড়েছি এটি সেরা উত্তর। ধন্যবাদ!
প্যাপিপো

19

আপনার গেম ইঞ্জিনের প্রাথমিক কাঠামোটি স্টেট প্যাটার্ন ব্যবহার করে । আপনার গেম বক্সের আইটেমগুলি বিভিন্ন শ্রেণীর একক ons প্রতিটি রাজ্যের কাঠামো কৌশল প্যাটার্ন বা টেম্পলেট পদ্ধতি ব্যবহার করতে পারে ।

একটি কারখানা খেলোয়াড় তৈরি করতে ব্যবহৃত হয় যা খেলোয়াড়ের তালিকায় সন্নিবেশ করা হয়, অন্য একক সিঙ্গলটন। জিইউআই পর্যবেক্ষক প্যাটার্নটি ব্যবহার করে গেম ইঞ্জিনে নজর রাখবে এবং কমান্ড প্যাটার্ন ব্যবহার করে তৈরি বেশ কয়েকটি কমান্ড অবজেক্ট ব্যবহার করে এটির সাথে যোগাযোগ করবেপ্যাসিভ ভিউয়ের প্রসঙ্গে অবজারভার এবং কমান্ডের ব্যবহার ব্যবহার করা যেতে পারে তবে আপনার পছন্দগুলির উপর নির্ভর করে কোনও এমভিপি / এমভিসি প্যাটার্ন ব্যবহার করা যেতে পারে। আপনি যখন গেমটি সংরক্ষণ করেন আপনার বর্তমান অবস্থার একটি স্মৃতিসৌধ গ্রহণ করতে হবে

আমি এই সাইটে কিছু নিদর্শন সন্ধান করার পরামর্শ দিচ্ছি এবং দেখুন যে এগুলির মধ্যে কেউ আপনাকে প্রাথমিক পয়েন্ট হিসাবে ধরে ফেলবে কিনা। আবার আপনার গেম বোর্ডের হৃদয় একটি রাষ্ট্রীয় মেশিন হতে চলেছে। বেশিরভাগ গেম দুটি প্রি-গেম / সেটআপ এবং আসল গেম দুটি রাষ্ট্র দ্বারা প্রতিনিধিত্ব করবে। আপনি যে মডেলিং করছেন সেই গেমটিতে বিভিন্ন ধরণের খেলার খেলার পদ্ধতি থাকলে আপনার আরও স্টেট থাকতে পারে। রাজ্যগুলির উদাহরণস্বরূপ হতে হবে না উদাহরণস্বরূপ যুদ্ধের অক্ষ এবং ব্যাটেলসের একটি যুদ্ধ বোর্ড রয়েছে যা খেলোয়াড়রা যুদ্ধগুলি সমাধান করতে ব্যবহার করতে পারে। সুতরাং তিনটি রাজ্য রয়েছে প্রাক-গেম, প্রধান বোর্ড, যুদ্ধ বোর্ডের সাথে ক্রমাগত প্রধান বোর্ড এবং যুদ্ধ বোর্ডের মধ্যে স্যুইচ করা হয়। অবশ্যই টার্ন ক্রমটি কোনও রাষ্ট্রীয় মেশিন দ্বারা প্রতিনিধিত্ব করা যেতে পারে।


17

পলিমারফিজম ব্যবহার করে আমি একটি রাজ্য ভিত্তিক গেমটির নকশা এবং প্রয়োগ বাস্তবায়ন করেছি।

বলা একটি বেস অ্যাবস্ট্রাক্ট ক্লাস যা GamePhaseএকটি গুরুত্বপূর্ণ পদ্ধতি আছে বলা হয়

abstract public GamePhase turn();

এর অর্থ কী, প্রতিটি GamePhaseবস্তু গেমের বর্তমান অবস্থা ধরে রাখে এবং turn()তার বর্তমান অবস্থার দিকে নজর রাখার জন্য একটি কল এবং পরবর্তীটিতে ফিরে আসে GamePhase

প্রতিটি কংক্রিটের GamePhaseএমন নির্মাতারা থাকে যা পুরো গেমের অবস্থা ধরে রাখে । প্রতিটি turn()পদ্ধতির মধ্যে গেমের নিয়মগুলি কিছুটা থাকে। এটি নিয়মগুলি চারপাশে ছড়িয়ে দেওয়ার সময়, এটি সম্পর্কিত নিয়মগুলি একসাথে রাখে। প্রত্যেকের শেষ ফলাফলটি কেবল turn()পরবর্তীটি তৈরি করছে GamePhaseএবং পুরো রাজ্যে পরবর্তী পর্যায়ে চলে যাচ্ছে।

এটি turn()খুব নমনীয় হতে দেয় । আপনার গেমের উপর নির্ভর করে একটি প্রদত্ত রাষ্ট্র বিভিন্ন ধরণের ধাপে শাখা করতে পারে। এটি সমস্ত গেমের পর্যায়গুলির গ্রাফ তৈরি করে।

এটি চালানোর জন্য সর্বোচ্চ স্তরে কোডটি খুব সহজ:

GamePhase state = ...initial phase
while(true) {
    // read the state, do some ui work
    state = state.turn();
}

এটি অত্যন্ত দরকারী কারণ আমি এখন পরীক্ষার জন্য গেমের যে কোনও রাজ্য / পর্ব সহজেই তৈরি করতে পারি

এখন আপনার প্রশ্নের দ্বিতীয় অংশের উত্তর দিতে, মাল্টিপ্লেয়ারে এই কীভাবে কাজ করে? GamePhaseব্যবহারকারীর ইনপুট প্রয়োজন এমন নির্দিষ্ট কিছুগুলির মধ্যে , একটি কল থেকে turn()বর্তমানকে Playerতাদের Strategyবর্তমান অবস্থা / পর্যায় জিজ্ঞাসা করা হবে । Strategyসম্ভব যে সমস্ত সিদ্ধান্ত নিতে Playerপারে তার একটি ইন্টারফেস । এই সেটআপটি Strategyএআইয়ের সাথেও বাস্তবায়িত হতে দেয় !

এছাড়াও অ্যান্ড্রু টপ বলেছেন:

আপনার গেমটি সম্ভবত অসীম পরিমাণে রাজ্যের মধ্যে থাকতে পারে কারণ এ-এর কত টাকা প্লেয়ার রয়েছে, কত টাকা প্লেয়ার বি রয়েছে, ইত্যাদি ইত্যাদি বিষয়গুলির অনুমতি দেওয়ার কারণে ... আমি নিশ্চিত যে আপনি চান রাষ্ট্রের মেশিন থেকে দূরে থাকা।

আমি মনে করি যে বিবৃতিটি খুব বিভ্রান্তিকর, যদিও এটি সত্য যে এখানে প্রচুর গেমের বিভিন্ন রাজ্য রয়েছে, কেবল কয়েকটি গেম পর্যায় রয়েছে। তার উদাহরণটি হ্যান্ডেল করার জন্য, এটি আমার কংক্রিটের নির্মাতাদের একটি পূর্ণসংখ্যা পরামিতি GamePhase

একচেটিয়া

কিছু GamePhaseগুলি এর উদাহরণ হতে পারে:

  • গেম স্টার্টস
  • প্লেয়ার রোলস
  • প্লেয়ারল্যান্ডসঅনপ্রোপার্টি (ফ্রিপার্কিং, GoToJail, গো, ইত্যাদি)
  • প্লেয়ার ট্রেডস
  • প্লেয়ারপ্যাচেসপ্রোপার্টি
  • প্লেয়ারপ্যাচেস হাউসগুলি
  • প্লেয়ারপ্যাচেস হোটেলস
  • প্লেয়ারপয়েসেন্ট
  • প্লেয়ারব্যাঙ্কপ্রস
  • (সমস্ত সম্ভাবনা এবং সম্প্রদায় বুকে কার্ড)

এবং বেসের কয়েকটি রাজ্য হ'ল GamePhase:

  • খেলোয়াড়দের তালিকা
  • বর্তমান প্লেয়ার (যিনি পালা)
  • খেলোয়াড়ের অর্থ / সম্পত্তি
  • সম্পত্তি / বাড়িগুলিতে হোটেল
  • প্লেয়ার পজিশন

এবং তারপরে কিছু ধাপগুলি প্রয়োজন অনুসারে তাদের নিজস্ব রাজ্য রেকর্ড করবে, উদাহরণস্বরূপ প্লেয়াররোলস খেলোয়াড়ের পরপর দ্বিগুণ হওয়ার পরিমাণ রেকর্ড করবে। আমরা একবার প্লেয়ারলোলস পর্বটি ত্যাগ করার পরে, আমরা আর পরপর রোলগুলি নিয়ে চিন্তা করি না।

প্রচুর পর্যায় পুনরায় ব্যবহার এবং একসাথে যুক্ত করা যেতে পারে। উদাহরণস্বরূপ, বর্তমান রাষ্ট্রের সাথে GamePhase CommunityChestAdvanceToGoপরবর্তী স্তরটি তৈরি করে PlayerLandsOnGoএটি ফিরিয়ে আনবে । PlayerLandsOnGoবর্তমান প্লেয়ারের কনস্ট্রাক্টারে গোতে সরানো হবে এবং তাদের অর্থের পরিমাণ 200 ডলার বাড়ানো হবে।


9

অবশ্যই এই বিষয়টি সম্পর্কে অনেকগুলি, অনেকগুলি, অনেকগুলি, অনেকগুলি, অনেকগুলি, অনেকগুলি, সংস্থান রয়েছে। তবে আমি মনে করি আপনি অবজেক্টগুলি ভাগ করে নেওয়ার পথে সঠিক পথে রয়েছেন এবং তাদের নিজস্ব ইভেন্ট / ডেটা ইত্যাদি পরিচালনা করতে পারেন handle

টাইল্ড ভিত্তিক বোর্ড গেমস করার সময় বোর্ডের অ্যারে এবং সারি / কর্ন এবং পিছনে এবং অন্যান্য বৈশিষ্ট্যগুলির মধ্যে মানচিত্রের রুটিনগুলি পেয়ে ভাল লাগবে। আমি আমার প্রথম বোর্ডের খেলাটি (অনেক অনেক আগে) স্মরণ করছি যখন আমি বোর্ডেরে 5 থেকে সারি / কর্নেল কীভাবে পেতে পারি তা নিয়ে লড়াই করেছিলাম।

1  2  3  
4 (5) 6  BoardArray 5 = row 2, col 2
7  8  9  

নস্টালজি। ;)

যাইহোক, http://www.gamedev.net/ তথ্যের জন্য একটি ভাল জায়গা। http://www.gamedev.net/references/


আপনি কেবল একটি 2-মাত্রিক অ্যারে ব্যবহার করবেন না কেন? তারপরে সংকলকটি এটি আপনার জন্য পরিচালনা করতে পারে।
জে বাজুজি

আমার অজুহাত হ'ল এটি অনেক দিন আগে ছিল। ;)
স্টিফান

4
গেমদেবের কাছে স্টাফ থাকলে একটি টন রয়েছে, তবে আমি যা খুঁজছিলাম তা বেশিরভাগই দেখতে পেলাম না।
জে বাজুজি

তুমি কোন ভাষা ব্যবহার করছ?
zotherstupidguy

বেসিক, বেসিকা, কিউবি, কুইকব্যাসিক এবং আরও অনেক কিছু। ;)
স্টিফান

6

আমি অনলাইনে যে সামগ্রীগুলি পেতে পারি তার বেশিরভাগটি প্রকাশিত রেফারেন্সগুলির তালিকা। গেম ডিজাইন প্যাটার্নসের প্রকাশনা বিভাগের নিবন্ধ এবং থিসের পিডিএফ সংস্করণগুলির লিঙ্ক রয়েছে। এর মধ্যে অনেকগুলি গেমসের জন্য ডিজাইন প্যাটার্নসের মতো একাডেমিক কাগজগুলির মতো দেখতে । গেম ডিজাইনে প্যাটার্নস , অ্যামাজন থেকে কমপক্ষে একটি বই পাওয়া যায় ।


4

থ্রি রিংগুলি এলজিপিএল জাভা লাইব্রেরি সরবরাহ করে। Nenya এবং Vilya গেম সম্পর্কিত স্টাফ জন্য গ্রন্থাগার হয়।

অবশ্যই, যদি আপনার প্রশ্নে প্ল্যাটফর্ম এবং / অথবা আপনার কাছে ভাষা বিধিনিষেধের উল্লেখ থাকে তবে এটি সহায়তা করবে।


"অবশেষে আমি একটি ডাব্লুপিএফ ইউআই তৈরি করার প্রত্যাশা করি" - যার অর্থ। নেট। কমপক্ষে, আমি যতদূর বলতে পারি।
মার্ক অ্যালেন

বর্ণমালার স্যুপ আমি অবগত নই।
jmucchiello

হ্যাঁ, আমি। নেট করছি, তবে আমার প্রশ্নটি ভাষা-বা প্ল্যাটফর্ম-নির্দিষ্ট নয়।
জে বাজুজি

3

আমি পাইরোলিস্টিকালের উত্তরের সাথে একমত এবং আমি তার কাজ করার পদ্ধতিটিকে পছন্দ করি (যদিও আমি অন্যান্য উত্তরগুলি স্কিমড করেছি)।

কাকতালীয়ভাবে আমি তার "গেমফেজ" নামটিও ব্যবহার করেছি। মূলত টার্ন ভিত্তিক বোর্ড গেমের ক্ষেত্রে আমি যা করব তা হ'ল আপনার গেমস্টেট ক্লাসে পিওরোলিস্টিকাল দ্বারা উল্লিখিত বিমূর্ত গেমফেজের কোনও বিষয় রয়েছে।

গেমের রাজ্যগুলি হ'ল বলুন:

  1. রোল
  2. সরান
  3. কিনুন / কিনবেন না
  4. জেল

আপনি প্রতিটি রাজ্যের জন্য কংক্রিট উত্পন্ন ক্লাস থাকতে পারে। কমপক্ষে এর জন্য ভার্চুয়াল ফাংশন রাখুন:

StartPhase();
EndPhase();
Action();

স্টার্টফেজ () ফাংশনে আপনি একটি রাষ্ট্রের জন্য সমস্ত প্রাথমিক মান সেট করতে পারেন উদাহরণস্বরূপ অন্য খেলোয়াড়ের ইনপুট অক্ষম করা এবং এর ফলে।

রোল.এন্ডফেজ () বলা হয়ে গেলে গেমফেজ পয়েন্টারটি পরবর্তী অবস্থায় সেট হয়ে গেছে তা নিশ্চিত করুন।

phase = new MovePhase();
phase.StartPhase();

এই মুভফেজ :: স্টার্টফেজ () তে আপনি উদাহরণস্বরূপ সক্রিয় প্লেয়ারের আগের পদক্ষেপগুলি আগের পর্যায়ে ঘূর্ণিত পরিমাণে সেট করতে পারেন।

এখন এই ডিজাইনের জায়গায় আপনি রোল পর্যায়ে আপনার "3 x ডাবল = জেল" সমস্যাটি সমাধান করতে পারেন। রোলফেজ শ্রেণি তার নিজস্ব রাজ্য পরিচালনা করতে পারে। উদাহরণ স্বরূপ

GameState state; //Set in constructor.
Die die;         // Only relevant to the roll phase.
int doublesRemainingBeforeJail;
StartPhase()
{
    die = new Die();
    doublesRemainingBeforeJail = 3;
}

Action()
{
    if(doublesRemainingBeforeJail<=0)
    {
       state.phase = new JailPhase(); // JailPhase::StartPhase(){set moves to 0};            
       state.phase.StartPhase();
       return;
    }

    int die1 = die.Roll();
    int die2 = die.Roll();

    if(die1 == die2)
    {
       --doublesRemainingBeforeJail;
       state.activePlayer.AddMovesRemaining(die1 + die2);
       Action(); //Roll again.
    }

    state.activePlayer.AddMovesRemaining(die1 + die2);
    this.EndPhase(); // Continue to moving phase. Player has X moves remaining.
}

আমি পাইরোলিস্টিকাল থেকে পৃথক যে প্লেয়ারটি যখন সম্প্রদায়ের বুকে বা কোনও কিছুতে অবতরণ করে তখন সমস্ত কিছুর জন্য একটি পর্যায় হওয়া উচিত। আমি মুভপেজ এ সব পরিচালনা করব। এটি কারণ যদি আপনার অনেকগুলি ক্রমিক ক্রম হয় তবে প্লেয়ার সম্ভবত খুব বেশি "গাইডেড" বোধ করবেন। উদাহরণস্বরূপ, যদি এমন কোনও পর্যায়ে থাকে যেখানে প্লেয়ার কেবলমাত্র সম্পত্তি কিনতে পারে এবং তারপরে কেবল হোটেল কিনতে পারে এবং তারপরে কেবল বাড়ি কিনতে পারে, এর মতো স্বাধীনতা নেই। এই সমস্ত অংশগুলিকে কেবল একটি বাইফেজে স্ল্যাম করুন এবং খেলোয়াড়কে তার যে কোনও কিছুর কেনার স্বাধীনতা দিন। বায়ফেজ ক্লাসটি সহজেই যথেষ্ট পরিমাণে হ্যান্ডেল করতে পারে যা ক্রয় আইনত।

অবশেষে গেমবোর্ডটি সম্বোধন করা যাক। যদিও 2 ডি অ্যারে ঠিক আছে তবে আমি টাইল গ্রাফ রাখার পরামর্শ দিচ্ছি (যেখানে বোর্ডে টাইলের অবস্থান রয়েছে)। একচেটিয়া ক্ষেত্রে এটি দ্বিগুণ-লিঙ্কযুক্ত তালিকা হবে। তারপরে প্রতিটি টাইলের একটি থাকবে:

  1. পূর্ববর্তী টাইল
  2. পরের টাইল

সুতরাং এর মতো কিছু করা খুব সহজ হবে:

While(movesRemaining>0)
  AdvanceTo(currentTile.nextTile);

অ্যাডভান্সটো ফাংশন আপনার স্টেপ বাই স্টেপ অ্যানিমেশন বা আপনার পছন্দসই হ্যান্ডেল করতে পারে। এবং হ্রাস অবশ্যই চলমান।

জিইউআইয়ের জন্য পর্যবেক্ষক প্যাটার্ন সম্পর্কিত আরএস কনলির পরামর্শটি ভাল।

আমি এর আগে বেশি পোস্ট করিনি। আশা করি এটি কাউকে সাহায্য করবে।


2

আমি কিছু সুবিধা নিতে পারি পূর্ববর্তী শিল্প আছে?

যদি আপনার প্রশ্ন ভাষা না হয় - বা প্ল্যাটফর্ম-নির্দিষ্ট নয়। তারপরে আমি আপনাকে সুপারিশ করব যে আপনি রাজ্য, মেমেন্টো, কমান্ড ইত্যাদির জন্য এওপি প্যাটার্নগুলি বিবেচনা করুন

এওপি। নেট জবাব কি ???

Http://www.chessbin.com এর মতো কিছু দুর্দান্ত ওয়েবসাইটও সন্ধান করার চেষ্টা করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.