ভক্সেল-ভিত্তিক 3D কক্ষে বড় কক্ষগুলি সিল করা হয়েছে কিনা তা দক্ষতার সাথে নির্ধারণ করার ক্ষেত্রে আমার কিছু সমস্যা ছিল। আমি এমন একটি স্থানে রয়েছি যেখানে আমি সাহায্য না চাইতেই সমস্যা সমাধানের জন্য আমার সর্বাত্মক চেষ্টা করেছি, কিন্তু হাল ছাড়ার পক্ষে যথেষ্ট চেষ্টা করেছিলাম না, তাই আমি সাহায্যের জন্য বলছি।
পরিষ্কার করার জন্য, সিল করা হচ্ছে যে ঘরে কোনও ছিদ্র নেই। অক্সিজেন সিলার রয়েছে, যা ঘরটি সিল করা হয়েছে কিনা তা পরীক্ষা করে এবং অক্সিজেন ইনপুট স্তরের উপর নির্ভর করে সিল করে।
এখনই, আমি এটি এটি করছি:
- সিলার টাইলের উপরে ব্লকটি শুরু করে (ভেন্টটি সিলারের উপরে রয়েছে), সমস্ত 6 সংলগ্ন দিকগুলির মধ্যে পুনরাবৃত্তভাবে লুপ করুন
- যদি সংলগ্ন টাইলগুলি একটি পূর্ণ, নন-ভ্যাকুয়াম টাইল হয় তবে লুপটি দিয়ে চালিয়ে যান
- যদি সংলগ্ন টাইলটি পূর্ণ না হয় বা ভ্যাকুয়াম টাইল হয় তবে এটি সংলগ্ন ব্লকগুলি পুনরাবৃত্তভাবে পরীক্ষা করে দেখুন।
- প্রতিবার একটি টাইল পরীক্ষা করা হয়, একটি পাল্টা হ্রাস
- যদি গণনাটি শূন্য হয়, যদি শেষ ব্লকটি ভ্যাকুয়াম টাইল সংলগ্ন হয়, অঞ্চলটি সিসিল না করে ফিরে আসুন
- কাউন্ট শূন্য হওয়ার আগে যদি গণনাটি শূন্য হয়ে যায় এবং শেষের ব্লকটি ভ্যাকুয়াম টাইল না হয় বা পুনরাবৃত্ত লুপ শেষ হয় (কোনও ভ্যাকুয়াম টাইল বাকি না) তবে অঞ্চলটি সিল করা হবে
যদি অঞ্চলটি সিল না করা হয় তবে কিছু পরিবর্তন করে আবার লুপটি চালান:
- ভ্যাকুয়াম টাইলের পরিবর্তে "শ্বাস প্রশ্বাসের বায়ু" টাইলের জন্য সংলগ্ন ব্লকগুলি পরীক্ষা করা হচ্ছে
- একটি হ্রাসকারী কাউন্টার ব্যবহার করার পরিবর্তে, যতক্ষণ না সংলগ্ন "শ্বাস প্রশ্বাসের বায়ু" টাইলস পাওয়া যায় না ততক্ষণ চালিয়ে যান।
- লুপ শেষ হয়ে গেলে, প্রতিটি চেক করা ব্লককে ভ্যাকুয়াম টাইলে সেট করুন।
আমি যে কোডটি ব্যবহার করছি তা এখানে: http://pastebin.com/NimyKncC
সমস্যাটি:
আমি প্রতি 3 সেকেন্ডে এই চেকটি চালাচ্ছি, কখনও কখনও সিলারকে কয়েকশো ব্লকের মধ্য দিয়ে লুপ করতে হয় এবং অনেক অক্সিজেন সিলার যুক্ত একটি বিশাল বিশ্ব, প্রতি কয়েক সেকেন্ডে এই একাধিক পুনরাবৃত্ত লুপগুলি সিপিইউতে খুব শক্ত হতে পারে।
আমি ভাবছিলাম যে অপ্টিমাইজেশানের আরও অভিজ্ঞতার সাথে যদি কেউ আমাকে একটি হাত দিতে পারে বা কমপক্ষে আমাকে সঠিক দিকে নির্দেশ করে। একটি গুচ্ছ ধন্যবাদ।