আরটিএস গেম এআই থ্রেড


14

আমার স্ক্র্যাচ থেকে একটি রিয়েল-টাইম কৌশল গেম করার প্রকল্প রয়েছে। আমি এখনও প্রাথমিক পরিকল্পনার পর্যায়ে আছি, তবে আমি প্রকৌশলগুলি দেখতে কিছুটা প্রোগ্রামিং করছি।

আমি জানি কিভাবে প্রোগ্রাম করতে হয়। কম্পিউটার প্লেয়ারের জন্য আমি কীভাবে গেম ক্লাস এবং রুল-বেসড (স্টেট-মেশিন) এআই গঠন করব তা সম্পর্কে আমার একটি ভাল ধারণা রয়েছে।

আমি মতবাদগুলি বিকাশ করতে চাই, যা একটি নির্দিষ্ট ইউনিটকে নির্দিষ্ট আচরণ দেয় (তবে একই সাথে অনেক ইউনিটে ব্যবহার করা যেতে পারে) যেমন স্কাউট, মিশন রুট অনুসরণ করুন, অবস্থান ধরে রাখুন (যে কোনও আসন্ন শত্রুকে আক্রমণ করুন বা অভিভূত হলে পশ্চাদপসরণ) , ইত্যাদি ...

মতবাদগুলি কেবলমাত্র ইউনিটগুলিতে প্রযোজ্য, সুতরাং এটির একটি ইউনিট দৃষ্টিভঙ্গি থাকবে এবং পুরো মানচিত্রের স্যাট্যাট্যাচুয়েশন সম্পর্কে সচেতন হবে না।

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

আমি ওপেনজিএল দিয়ে সি # তে এটি করছি।

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

এখন, আমি ভাবছিলাম। যেহেতু গেমলুপে প্রচুর পরিমাণে প্রক্রিয়া করার জন্য থাকবে, কম্পিউটার এআই এবং ইউনিটগুলি কী সেই লুপটিতে তাদের ক্রিয়াকলাপ নির্বাচন করবে বা এটি খুব ধীর হবে?

আমি যদি সমস্ত জিনিস একযোগে করতে চাই, আমি কম্পিউটার এআই এর জন্য আলাদা থ্রেড তৈরি করব? বা এমনকি প্রতিটি ইউনিটের জন্য পৃথক থ্রেড?

মাল্টি-থ্রেডিংয়ের সাথে আমার খুব বেশি অভিজ্ঞতা নেই। এর জন্য সর্বোত্তম পন্থাটি কী হবে?


সম্পর্কিত নয় - ওপিজিএল পরিবর্তে ওগ্রে 3 ডি হিসাবে বিবেচিত?

আসলে, না, আমি এর আগে কখনও শুনিনি। আমি ওপেনজিএল ব্যবহার করছি কারণ এটি আমার ক্লাসে শেখানো হয়েছিল। ওগ্রে 3 ডি 2Dও করতে পারে? আমি মনে করি এটি পারে তবে আমরা কখনই জানি না ...

হ্যাঁ এটি পারে, এটির নিজস্ব জিইউআই সরঞ্জামকিট (সেগুই) রয়েছে। উদাহরণস্বরূপ, টর্চলাইট এটি দিয়ে নির্মিত। এটি আপনার সময় বাঁচাতে পারে কারণ এটি ওপেনজিএলকে সুন্দরভাবে গুটিয়ে রাখে। ogre3d.org/tikiwiki/MOGRE

"বা প্রতিটি ইউনিটের জন্য পৃথক থ্রেড" হেল নং। কোনও থ্রেডের ওভারহেড অনেক বড়। একটির জন্য থ্রেডের স্ট্যাকের জন্য সংরক্ষিত মেমরি রয়েছে (ডিফল্টরূপে 1MB)। এবং থ্রেড সুইচগুলিও ব্যয়বহুল।

উত্তর:


3

"স্ক্র্যাচ থেকে" এর অর্থ কী? আপনি ডাইরেক্টএক্সের পরিবর্তে এক্সএনএ জাতীয় কিছু ব্যবহার করতে পারেন?

তরল গতি পেতে আপনার প্রতি 30 থেকে 60 ফ্রেমের মধ্যে কিছু রেন্ডার করা উচিত। সত্যিই আরও fps করার দরকার নেই।

যদি রেন্ডারিং + লজিক 16fms আপনাকে যে 16 মিমি দেয় তার চেয়ে কম গ্রহণ করে, তবে এআই থ্রেডের প্রয়োজন হবে না।

যদি ফ্রেমগুলি রেন্ডারিংয়ের মধ্যে আপনার পর্যাপ্ত সময় না থাকে তবে আপনাকে প্রতিটি ফ্রেমে কী আপডেট করতে হবে এবং কী না তা নিয়ে খুব সাবধানতার সাথে চিন্তা করতে হবে

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

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

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

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


0

এআই এর জন্য আলাদা থ্রেড রাখুন। তবে প্রতিটি ইউনিটের জন্য নয় কারণ এটি অত্যধিক ওএস সংস্থান গ্রহণ করবে এবং সিঙ্ক্রোনাইজেশন একটি দুঃস্বপ্ন হবে।

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

সুতরাং, সাবধানে সিঙ্ক পয়েন্ট এবং / বা ইভেন্টগুলি প্রধান লুপে নির্বাচন করুন এবং এআই থ্রেডের মূল থ্রেডটি থামার সময় এর গণনাগুলি সম্পূর্ণ করার অনুমতি দিন। উদাহরণস্বরূপ, যদি ব্যবহারকারী ইউনিট অন্য একটি এআই ইউনিট দেখায়, এটি সিঙ্ক করুন, সুতরাং আপনার ইউনিটটি বিপরীতভাবে একটি আপডেট ইউনিট দেখে।


0

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

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

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


1
খুব জটিল মনে হচ্ছে।

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

0

আপনার মাল্টিথ্রেড করা দরকার বা না, এআই মাল্টিথ্রেড করার জন্য প্রস্তুত করা ভাল ধারণা হতে পারে।

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

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

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

একটি গৌণ সুবিধা হিসাবে, ভবিষ্যতে আপনি অন্যান্য সিস্টেমের কাছ থেকে প্রাপ্ত তথ্যগুলি সময়ের সাথে সাথে সঠিক জ্ঞানের চেয়ে অনিশ্চয়তার অনুকরণ করে ক্ষয় করে ক্যাশে প্রসারিত করতে পারেন।

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