গেম ওয়ার্ল্ডের মধ্যে বৃহত পরিমাণে সত্তা সিমুলেট করার দুর্দান্ত উপায় way


33

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

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

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

আমার আগের হজমের উদাহরণে প্রয়োগ করা এর অর্থ হবে:

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

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

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

উত্তর:


10

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

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


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

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

14

ইনপুটগুলির মতো একই সমস্যার মতো মনে হচ্ছে: কীবোর্ডে আপনার 100+ কী রয়েছে তবে প্রতিটি ফ্রেমের প্রতিটি পৃথক কী পরীক্ষা করতে চান না, তাই আপনি কী করবেন?

দুটি উত্তর: পোলিং বা সিস্টেম বার্তা।

পোলিং = যে কোনও মুহুর্তে যখন এটি খেলায় আসবে তবে কীবোর্ড কীগুলির (বা আপনার ক্ষেত্রে অবজেক্টগুলি) অবস্থা জিজ্ঞাসা করুন। বাকি সময়গুলি এগুলি উপেক্ষা করুন।

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


10

সুতরাং আমি বাস্তবায়ন থেকে একটি পদক্ষেপ পিছনে নিতে যাচ্ছি এবং একটি নকশা দৃষ্টিকোণ থেকে প্রশ্ন পর্যালোচনা। আপনি এই সিমুলেশনটিতে অন্তর্ভুক্ত করতে চান এমন সমস্ত বিশদ প্রদর্শন করার জন্য কি আপনার একটি দৃ plan় পরিকল্পনা আছে?

উদাহরণ স্বরূপ:

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

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

আচরণ সিমুলেশন কাজ করতে এক মজাদার টন, তবে সর্বদা শেষ ব্যবহারকারীদের অভিজ্ঞতা মাথায় রাখুন।


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

9

কয়েক বছর আগে আমি যে গেমটিতে কাজ করেছি তাতে আমার একইরকম সমস্যা হয়েছিল - বস্তুর সিমুলেশন জটিল ছিল এবং বিশ্বের প্রতিটি বস্তুর উপর বিশদভাবে সত্যই সম্পাদন করা যায়নি।

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


2

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


1

এই জন্য একটি নকশা প্যাটার্ন আছে। আমি মনে করি এটি ডাটাবেস অবজেক্টস বলা হয়?

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

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

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

এটি অ্যানিমেশনের জন্য একটি প্রতিনিধি ব্যবহার করার মতো প্রকৃতির অনুরূপ।


3
ফ্লাইওয়েট প্যাটার্ন, আপনার মানে?
শীর্ষস্থানীয়

0

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


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

প্রতি রাজ্যে একাধিক জিনিস ঘটতে পারে, কারণ আপনি সমস্ত রাজ্যে সমস্ত সক্রিয় অঙ্গ সংরক্ষণ করেন এবং প্রতিটি ফ্রেমকে এক্সিকিউট করেন। আপনার সিমুলেশনে যা ঘটে তা অনেকটা রাষ্ট্রের রূপান্তরের সাথে খাপ খায় বলে মনে হয়। যেমন চিউইং -> ডাইজেস্টিং। তবে আমি অনুমান করি আপনি ঠিক বলেছেন যে কোনও প্রাণীর একটি মাত্র রাষ্ট্র থাকতে পারে না। পাচনতন্ত্রের সাথে রাষ্ট্রের পরিবর্তনের সাথে সম্পর্কিত না থাকা অঙ্গগুলির সাথে রাষ্ট্রীয় রূপান্তরগুলি ঘটে থাকে। তবে এটি আপনার কাছে যা রয়েছে তা কেবল আরও জটিল। কেবল ভেবেছিলাম এটি বিবেচনা করার মতো কিছু হতে পারে।
এরিক এনহিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.