আরপিজি গেমটিতে একাধিক গল্পের থ্রেডগুলি কীভাবে পরিচালনা করবেন?


26

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

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

আমি অনেকগুলি গেম দেখেছি যার জটিল সিদ্ধান্ত ইঞ্জিন রয়েছে এবং আমি ভাবছি যে সেগুলি কীভাবে তৈরি হয়? এমন কোনও বিশেষ নকশা আছে যা জিনিসগুলি সত্যই সহজ করে তোলে? কেউ কি অনুরূপ কিছু করেছিলেন এবং কীভাবে এটি মোকাবেলা করবেন তার একটি ইঙ্গিত আমাকে দিতে পারেন?

আপডেট 1:

একটি গুরুত্বপূর্ণ দিকটি হ'ল গল্পের কোডটি কোনওভাবে স্বতন্ত্র রাখা যাতে এটি বাহ্যিক ফাইল থেকে ম্যানিপুলেট করা যায়। আমি এটিকে ইঞ্জিন হিসাবে ব্যবহার করার পরিকল্পনা করছি যাতে সম্ভাব্য পছন্দগুলি কোনও বাহ্যিক ফাইল থেকেও আসতে হবে। কোডটি সম্পূর্ণ বিমূর্ত হতে হবে।

এছাড়াও, আমি ডিজাইন সমাধানে আগ্রহী, এটি করার একটি দুর্দান্ত উপায়, অন্যরা কীভাবে এটি করে বা এটি করে।


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

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

সুতরাং আরও সুনির্দিষ্টভাবে বলার জন্য, আমি if (isTree)একটি isTreeবৈশ্বিক ভার পরীক্ষা করতে বা রাখতে পারি না কারণ গল্পটির মধ্যে পছন্দটি থাকতে পারে বা নাও পারে। আমি কি বলতে চাই? এটি আরও এমন একটি পছন্দ ইঞ্জিনের মতো যা একাধিক গল্প পরিবেশন করবে।
ভ্যালেন্টিন রাদু

এছাড়াও এটির আরও একটি সমস্যা রয়েছে, যাক আমরা বলি যে ব্যবহারকারী যদি আমরা সেট করা একটি গাছ লাগানোর সিদ্ধান্ত নেয় isTree=trueতবে পরে, সে অন্য কিছু করে, যেমন, কোনও স্কুল সাথীর সাথে লড়াই করা, যিনি এরপরে গাছটি ছোট থাকাকালীন গিয়ে গাছটি ছাড়ে ops কারণ সে তার গাধাটিকে লাথি মারল। এখন, আমাদের কাছে দুটি ভেরিয়েবল রয়েছে যা গাছের অস্তিত্বকে প্রভাবিত করে isTree==true' and FightBrat == মিথ্যা ` আমি কি বলতে চাই? এবং চেইন চিরকাল যেতে পারে, গাছের অস্তিত্ব অজানা সংখ্যক কারণের দ্বারা প্রভাবিত হতে পারে। আমি কি বলতে চাই?
ভ্যালেন্টিন রাদু

তারপরে সেই ডেটাটি ডিস্কের কোনও ফাইলে সংরক্ষণ করুন। তথ্য লোড করতে এবং সংরক্ষণ করতে আপনাকে দুটি সাব্রুটাইন তৈরি করতে হবে এবং তারপরে কোডের প্রতিটি অংশ থেকে প্রয়োজনীয় ভিত্তিতে সেই রুটিনগুলি ব্যবহার করতে হবে।
র‌্যান্ডল্ফ রিচার্ডসন

উত্তর:


18

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

প্রতিটি নোড একটি "সক্রিয়" বা "নিষ্ক্রিয়" অবস্থায় রয়েছে এবং কেবলমাত্র যদি তার সমস্ত বাবা-মা ইতিমধ্যে সক্রিয় থাকে তবে সক্রিয় হওয়ার অনুমতি দেওয়া হয়। গ্রাফের কাঠামো (কী কী নোড রয়েছে এবং কীভাবে তারা সংযুক্ত রয়েছে) গেমের তথ্যের অংশ, তবে সক্রিয় / নিষ্ক্রিয় অবস্থা প্লেয়ারের সেভ ডেটার অংশ।

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

আপনি অন্যান্য বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করতে পারেন যেমন নোডগুলি যা তাদের পিতামাতার কেউ সক্রিয় হয় যদি সক্রিয় হয়, বা একটি পিতা বা মাতা দ্বারা সক্রিয় করা এবং অন্য দ্বারা নিষ্ক্রিয় করা ইত্যাদি ইত্যাদি activ একাধিক, পরস্পরের উপর নির্ভরশীল থ্রেড সহ গল্পগুলি তৈরি করার জন্য এটি একটি দুর্দান্ত সাধারণ কাঠামো।


একটি খুব ভাল উত্তর, আপনাকে ধন্যবাদ। এটি প্রকৃতপক্ষে আমার অন্যান্য সমস্যাগুলির সমাধান করে যেমন ব্যবহারকারীর অগ্রগতি সংরক্ষণ করে। এটাই আমার দরকার।
ভ্যালেনটিন রাদু

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

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

@ নাথানরিদ আহ, দুঃখিত, আমি পুনরাবৃত্ত অংশটি মিস করেছি।

3

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

মূলত, যখন আপনার প্লেয়ার কোনও সিদ্ধান্ত নেন আপনি সেই সিদ্ধান্তটি সন্ধান করেন, নিয়মগুলি কার্যকর করুন এবং তারপরে সাধারণের মতো পরবর্তী সিদ্ধান্তের সেট সরবরাহ করুন। তবে, আপনার বিধিগুলি গতিশীল যে এগুলির মধ্যে কয়েকটি কেবল ইতিমধ্যে কার্যকর হওয়া অন্যান্য নিয়মের ভিত্তিতে সম্পাদন করবে।

উইকিপিডিয়ায় আরও কিছু ।

তাদের কবে রুল ইঞ্জিনগুলি সাবহেডিং ব্যবহার করতে হবে তা থেকে (জোর দেওয়া আমার):

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

একটি বিষয় লক্ষণীয় হ'ল মাঝেমধ্যে একটি সরলীকৃত ডোমেন নির্দিষ্ট "ভাষা" বা ওয়াইএএমএল এর মতো কিছু ব্যবহার করে একটি নিয়ম ইঞ্জিন সেরা প্রয়োগ করা হয়। আমি এক্সএমএল প্রস্তাব করব না।


1

আপনাকে বিবেচনা করতে হবে যে কোনও ইভেন্ট নিখুঁতভাবে ব্যবহারকারী সিদ্ধান্তের ভিত্তিতে নয়। যেমন আপনি উল্লেখ করেছেন যে কোনও সিদ্ধান্তের ক্রমগুলির সেট যখন নেওয়া হয় এবং তারপরে অন্য কিছু সংযোজন হয় (যেমন দু'দিন পরে) কিছু ইভেন্ট সংযুক্ত করতে হয়।

আমার মনে হয় আপনার যা প্রয়োজন তা হ'ল ইভেন্টগুলির মডেল করার উপায় এবং এটি ট্রিগার করার উপায়। প্রথমটি আপনার নির্দিষ্ট কেসের সাথে আরও আবদ্ধ থাকলেও পরবর্তীকৃতটিকে হায়ারারিকিকাল স্টেট মেশিন (এইচএসএম) দ্বারা মডেল করা যায় যা প্রত্যক্ষ বা অপ্রত্যক্ষভাবে আপনার ইভেন্টগুলিকে ট্রিগার করে।

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

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

আপনি এইচএমএসের একটি স্বৈরশাসক (বা অন্য কোনও সংগ্রহ কাঠামো) ব্যবহার করে শেষ করতে পারেন, আপনাকে গণনা করতে হবে এমন স্ট্যাটাসের প্রতিটি "দিক" এর জন্য একটি। উদাহরণ হতে পারে কোনও এইচএমএস ইভেন্ট সম্পর্কিত সম্পর্কিত এবং ইভেন্টগুলি ট্রিগার করার জন্য কলব্যাকগুলি যে সিদ্ধান্ত গ্রহণ করে সেগুলির জন্য একটি।

এই সমস্ত অবকাঠামো একটি মানুষের অন্ধকার মাস্টারের আচরণ অনুকরণ করার উদ্দেশ্যে কাজ করে: খেলোয়াড়ের সিদ্ধান্ত এবং পরিবেশগত পরিস্থিতির কারণে তিনি সাধারণত বর্তমান পরিস্থিতির (এইচএমএস ["বাহ্যিক"]) মানসিক রেকর্ড গ্রহণ করেন; যখন কিছু সংযোজন ঘটে তখন এটি তার মানসিক রেকর্ড ব্যবহার করে সিদ্ধান্ত নিতে পারে এবং কিছু অভ্যন্তরীণ কৌশল স্থিতি খুব রেকর্ড করতে পারে (এইচএসএম ["অভ্যন্তরীণ"]) যাতে কিছু পরিস্থিতি উদাহরণস্বরূপ সংযোজন হয় তবে একইভাবে প্রতিক্রিয়া এড়াতে এড়াতে।

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