প্রক্রিয়াগতভাবে নির্দিষ্ট অঞ্চল একটি বিল্ডিং উত্পাদন


15

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

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

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

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

আগাম ধন্যবাদ!

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

উত্তর:


7

বিল্ডিংয়ের ভাণ্ডার তৈরি করতে আপনি মেটা আকার হিসাবে প্রাক-উত্পাদিত পলিমিনোজ ব্যবহার করতে পারেন ।

ধরা যাক আপনার সর্বনিম্ন গ্রহণযোগ্য দূরত্বটি 3 টি ব্লক। তারপরে আমরা ক্ষুদ্রতম গ্রহণযোগ্য বিল্ডিং ইউনিটটি 3x3 হিসাবে বিবেচনা করব। সুবিধার্থে, আমি কল করতে যাচ্ছি যে একটি ঘর এবং এটি 9 টি ব্লকের একটি অঞ্চল দেয়। এরপরে, আপনার টার্গেট শুরুর ক্ষেত্রটি নিয়ে যান এবং এটিকে ঘর অঞ্চল দিয়ে ভাগ করুন। আপনি যে প্রারম্ভিক মানটি দিয়েছিলেন তা ব্যবহার করে আমরা ৩.৩৩৩ পেয়েছি; সুতরাং 3 টি কক্ষ আপনাকে চাইলে কিছুটা কম দেয় এবং 4 কোষ আপনাকে আরও দেয়।

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

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

উদাহরণস্বরূপ, বলুন আমরা নীচে বৃত্তাকার বেছে নিই। এখানে সমস্ত আকারের 3 পলিমিনয়েস রয়েছে (রোটেশন / ফ্লিপগুলি অন্তর্ভুক্ত নয়):

এখানে চিত্র বর্ণনা লিখুন

আসুন ধরে নেওয়া যাক আমরা এলোমেলোভাবে L আকৃতিটি বাছাই করে এবং এলোমেলো ঘূর্ণন প্রয়োগ করি, আপনার বিল্ডিংয়ের নীচের লেআউটটি থাকবে:

এখানে চিত্র বর্ণনা লিখুন

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

1) একটি আলাদা ঘর আকার ব্যবহার করুন। উদাহরণস্বরূপ 3x4, 4x4, ইত্যাদি

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

3) একটি বিল্ডিং এটি বড় করতে আউট প্যাড। উদাহরণটিতে ফিরে যাওয়া, আপনি যদি 3 টি ঘর ব্যবহার করেন তবে আপনার বিল্ডিংয়ের ক্ষেত্রটি 27 স্কোয়ারের সাথে কমবে 3 থেকে অল্প অল্প হবে then আপনি পরে 1x3 গ্রুপের আকারের আকারের আঠালো জায়গার জন্য ঘেরটি স্ক্যান করতে পারেন। যতক্ষণ না আপনার মেকআপ গ্রুপটি কমপক্ষে AxB থাকে যেখানে A কমপক্ষে আপনার ন্যূনতম গ্রহণযোগ্য দূরত্ব হয়, আপনার ফলাফল আপনার ন্যূনতম গ্রহণযোগ্য দূরত্বের সীমাবদ্ধতা লঙ্ঘন করবে না। উপরের উদাহরণটি তৈরি করে এখানে একটি সম্ভাব্য ফলাফলের চিত্রণ দেওয়া হয়েছে:

এখানে চিত্র বর্ণনা লিখুন

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

আরও কিছু মন্তব্য:

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


16

পদ্ধতিগত জেনারেটর তৈরির একটি সহজ উপায় হ'ল:

  1. এলোমেলোভাবে জিনিস তৈরি করুন
  2. একটি ফাংশন চালান যা আউটপুট ভাল কিনা তা পরীক্ষা করে
  3. যদি আউটপুট ভাল না হয় তবে 1 ধাপে যান

এমনকি এটি হাজার হাজার রান পূর্ণ করতে গেলেও, বেশিরভাগ সাধারণ জেনারেটর এই পদ্ধতির সাথে ঠিক সূক্ষ্মভাবে পান। সুবিধাটি হ'ল জেনারেটরে প্রচুর স্মার্ট দরকার নেই এবং যেহেতু ভাল কিছু তৈরি করা তার চেয়ে 100% ভাল সময় তৈরির চেয়ে খুব সহজ কিনা তা যাচাই করা, এই পদ্ধতিটি খুব সহজ।

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

এটি দিয়ে শুরু করুন, পরে উন্নত করুন এবং অনুকূলিত করুন।


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

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

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

@ ডিএমজি গ্রেগরী হ্যাঁ আমি অবশ্যই এটি দেখতে পারি। একটি বেসিক র্যান্ডম জেনারেটর আমার ক্ষেত্রে কয়েক পাসের মধ্যে সময়ের 99% এর মতো কাজ করবে তবে আমি যদি আরও জটিলতা পরে যুক্ত করতে চাই তবে তা উল্লেখযোগ্যভাবে ধীর হয়ে যেতে পারে। অনুমান এবং চেক-জাতীয় মডেলের কোনও বাস্তব জীবনের প্রোগ্রামিং / গেম অ্যাপ্লিকেশন সম্পর্কে কেউ জানেন?
ব্যবহারকারী2129189

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

7

"সমস্ত অঞ্চল কমপক্ষে 3-4 ব্লক প্রশস্ত" এর একটি নিষেধাজ্ঞার ভিত্তিতে প্রথম ধারণাটি যে আমার মনের দিকে ঝাঁপিয়ে পড়েছিল তা এই জাতীয় কিছু:

  1. 3x3, 3x4, 4x3 বা 4x4 এর মধ্যে একটি বেছে নিন
  2. গ্রিডের কেন্দ্রে সেই আকারের একটি ব্লক রাখুন
  3. একটি দিক বাছুন (উপরে, বাম, ডান, নীচে)
  4. সেই দিকটিতে পূর্বে রাখা ব্লকগুলির পাশাপাশি একটি 3x3 ব্লক রাখার চেষ্টা করুন
  5. যদি সফল হন তবে কিছুটা সম্ভাবনার সাথে, আপনি যে দিকটি সন্ধান করেননি তার একটিতে ব্লকটি 4x3 ব্লকে প্রসারিত করার চেষ্টা করুন
  6. কিছুটা সম্ভাবনার সাথে, ভরাট ব্লকগুলির এলোমেলো প্রান্তে যান
  7. এলাকাটি যথেষ্ট বড় না হওয়া পর্যন্ত 3 থেকে 6 ধাপ পুনরাবৃত্তি করুন

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


4
আমি সর্বদা একটি 3x3 ব্লক থেকে শুরু করে জিনিসগুলিকে সহজ করে তুলতাম, তারপরে এলোমেলো অবস্থানগুলিতে 3x1 ব্লক যুক্ত করে যেখানে প্রতিটি বর্গটি একটি বিদ্যমান সংলগ্ন থাকে। একটি 3x3 ব্লকে যুক্ত করা, সেখানে সম্ভাব্য চারটি অবস্থান রয়েছে। পরেরটির জন্য ছয়টি সম্ভাব্য অবস্থান সহ সমস্তই আপনাকে একটি 3x4 ব্লক দেয় give সেখান থেকে এটি আরও জটিল হয়ে ওঠে, তবে খুব খারাপ হয় না।
জলি জোকার

0

বুলিয়ান নট এবং ইউনিয়ন ব্যবহার এবং এগুলির মধ্যে এলোমেলোভাবে বেছে নেওয়ার বিষয়টি বিবেচনা করুন।

  1. একটি এলোমেলো আয়তক্ষেত্র রাখুন।
  2. একটি দ্বিতীয় এলোমেলো আয়তক্ষেত্র রাখুন।
  3. এগুলিকে ইউনিয়ন করতে হবে বা প্রথম থেকে দ্বিতীয়টি সাবট্রাক্ট করুন তা এলোমেলোভাবে চয়ন করুন।
  4. বেশ কয়েকটি আয়তক্ষেত্রের জন্য পুনরাবৃত্তি করুন। যদিও, মাত্র দুই বা তিনটি উপযুক্ত যুক্তিসঙ্গত ফলাফল দিতে পারে।

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


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