আমি 3D এর পরে যেমন সিস্টেম তৈরি করেছি created আমি একটি ছোট ভিডিও এটি সহজ বলবিজ্ঞান প্রদর্শক আছে এখানে এবং একটি ব্লগ পোস্টে এখানে ।
আমি একটি অদৃশ্য প্রাচীরের পিছনে চাপ যান্ত্রিকগুলি দিয়ে তৈরি একটি ছোট gif এখানে (উচ্চ গতিতে খেলা):
সিস্টেমের কয়েকটি বৈশিষ্ট্য সম্পর্কে ধারণা দেওয়ার জন্য, আমাকে জড়িত ডেটাগুলি ব্যাখ্যা করতে দিন। বর্তমান সিস্টেমে প্রতিটি ব্লকের পানিতে 2 বাইটে নিম্নলিখিতটি রয়েছে:
//Data2 Data
//______________________________ _____________________________________
//|0 |0 |000 |000 | |0 |0 |000 |000 |
//|Extra|FlowOut|Active|Largest| |HasSource|IsSource|Direction|Height|
//------------------------------ -------------------------------------
Height
কিউবের পানির পরিমাণ হ'ল আপনার চাপের মতো, তবে আমার সিস্টেমে মাত্র 8 টি স্তর রয়েছে।
Direction
প্রবাহ যেদিকে চলছে পানি কোথায় প্রবাহিত হবে তা স্থির করার সময়, এটির বর্তমান দিকে চালিয়ে যাওয়ার সম্ভাবনা বেশি more এটি যখন প্রয়োজন হয় তখন এটির উত্স ঘনক্ষেত্রের কাছে ফিরে প্রবাহের দ্রুত চিহ্নিত করতে ব্যবহার করা হয়।
IsSource
নির্দেশ করে যদি এই ঘনকটি উত্স কিউব হয়, যার অর্থ এটি কখনই পানির বাইরে চলে না। নদী, ঝর্ণা ইত্যাদির উত্সের জন্য ব্যবহৃত হয় উপরের জিআইএফ-র বাম দিকে ঘনকটি উত্স কিউব, উদাহরণস্বরূপ।
HasSource
নির্দেশ করে যদি এই ঘনকটি উত্স কিউবের সাথে সংযুক্ত থাকে। যখন কোনও উত্সের সাথে সংযুক্ত থাকে, কিউবস অন্যান্য "ফুলার" নন-উত্স কিউবগুলি অনুসন্ধান করার আগে আরও জলের জন্য উত্সটি ট্যাপ করার চেষ্টা করবে।
Largest
এই কিউবকে এটির উত্স কিউব এবং এর উত্স কিউবের মধ্যে বৃহত্তম প্রবাহ কি বলে tells এর অর্থ যদি জল কোনও সংকীর্ণ ব্যবধানের মধ্য দিয়ে প্রবাহিত হয় তবে এটি প্রবাহটি এই কিউবকে সীমাবদ্ধ করে।
Active
একটি পাল্টা। যখন এই কিউবটির সক্রিয় প্রবাহ থাকে তখন এটি থেকে বা এটি থেকে সক্রিয় ক্রমবর্ধমান হয়। অন্যথায় সক্রিয় এলোমেলোভাবে হ্রাস পেয়েছে। সক্রিয় একবার শূন্য হিট (অর্থ সক্রিয় নয়), এই ঘনক্ষেত্র জলের পরিমাণ হ্রাস শুরু হবে। বাষ্পীভবন বা মাটিতে ভিজানোর মতো ধরণের কাজ। ( আপনার যদি প্রবাহ থাকে তবে আপনার উচিত হবে! )
FlowOut
যদি এই ঘনক্ষেত্রটি বিশ্বের এক প্রান্তে ঘনকটির সাথে সংযুক্ত থাকে তবে তা নির্দেশ করে। একবার বিশ্বের প্রান্তে যাওয়ার পথ তৈরি হয়ে গেলে, জল সেই পথটি অন্য যে কোনও দিকে বেছে নেয়।
Extra
ভবিষ্যতের ব্যবহারের জন্য অতিরিক্ত বিট।
এখন যেহেতু আমরা ডেটা জানি, আসুন আমরা অ্যালগোরিদমের একটি উচ্চ স্তরের ওভারভিউ দেখি। সিস্টেমের মূল ধারণাটি হ'ল নীচে এবং বাইরে প্রবাহিত হওয়াটিকে অগ্রাধিকার দেওয়া। ভিডিওটিতে আমি যেমন বর্ণনা করেছি, আমি নীচ থেকে কাজ করছি। জলের প্রতিটি স্তর y অক্ষের মধ্যে একবারে এক পর্যায়ে প্রক্রিয়াজাত করা হয়। প্রতিটি স্তরের কিউবগুলি এলোমেলোভাবে প্রক্রিয়া করা হয়, প্রতিটি কিউব প্রতিটি পুনরাবৃত্তির উপর থেকে উত্স থেকে জল টানতে চেষ্টা করবে।
ফ্লো কিউব তাদের উত্স থেকে জল টেনে নিয়ে যায় যতক্ষণ না তারা কোনও উত্স কিউব বা কোনও পিতামহীন প্রবাহের কিউবে না পৌঁছা পর্যন্ত তাদের প্রবাহের দিকটি অনুসরণ করে। প্রতিটি কিউবে প্রবাহের দিকটি সঞ্চয় করে উত্সের পথ অনুসরণ করা কোনও লিঙ্কযুক্ত তালিকাকে অনুসরণ করার মতো সহজ করে তোলে।
অ্যালগরিদমের সিউডো কোডটি নিম্নরূপ:
for i = 0 to topOfWorld //from the bottom to the top
while flowouts[i].hasitems() //while this layer has flow outs
flowout = removeRandom(flowouts[i]) //select one randomly
srcpath = getPathToParent(flowout) //get the path to its parent
//set cubes as active and update their "largest" value
//also removes flow from the source for this flow cycle
srcpath.setActiveAndFlux()
//now we deal with regular flow
for i = 0 to topOfWorld //from the bottom to the top
while activeflows[i].hasitems() //while this layer has water
flowcube = removeRandom(activeflows[i]) //select one randomly
//if the current cube is already full, try to distribute to immediate neighbors
flowamt = 0
if flowcube.isfull
flowamt = flowcube.settleToSurrounding
else
srcpath = getPathToParent(flowcube) //get the path to its parent
flowamt = srcpath.setActiveAndFlux()
flowcube.addflow(flowamt)
//if we didn't end up moving any flow this iteration, reduce the activity
//if activity is 0 already, use a small random chance of removing flow
if flowamt == 0
flowcube.reduceActive()
refillSourceCubes()
প্রবাহ সম্প্রসারণের প্রাথমিক নিয়ম যেখানে (অগ্রাধিকার অনুসারে আদেশ করা):
- নীচের কিউবে যদি কম জল থাকে তবে নীচে প্রবাহ করুন
- যদি একই স্তরের সংলগ্ন কিউবটিতে কম জল থাকে তবে দীর্ঘস্থায়ীভাবে প্রবাহিত হবে।
- উপরের কিউবটিতে যদি কম জল থাকে এবং উত্স কিউব উপরের কিউব থেকে বেশি হয় তবে প্রবাহিত হবে।
আমি জানি, এটি বেশ উচ্চ স্তরের। কিন্তু এটা পাচ্ছেন না আরো বিস্তারিত ঢোকা কঠিন পথ বিস্তারিত মধ্যে।
এই সিস্টেমটি বেশ ভালভাবে কাজ করে। আমি সহজেই জলের গর্তগুলি পূরণ করতে পারি, যা বাহিরের দিকে অবিরত থাকবে over আপনি উপরের জিআইএফ-তে দেখতে দেখতে আমি ইউ আকারের টানেলগুলি পূরণ করতে পারি। তবে, যেমনটি আমি বলেছিলাম, সিস্টেমটি অসম্পূর্ণ এবং আমি এখনও সমস্ত কাজ করি নি। আমি দীর্ঘ সময় প্রবাহ সিস্টেমে কাজ করিনি (আমি সিদ্ধান্ত নিয়েছিলাম যে এটি আলফার জন্য প্রয়োজন হবে না এবং আমি এটি আটকে রাখব)। যাইহোক, আমি যখন সমস্যাগুলি মোকাবিলা করছিলাম তখন আমি তা আটকে রেখেছিলাম কোথায়:
পুল । একটি বড় পুলের পানির প্রাপ্তির সময়, শিশু থেকে পিতা-মাতার দিকে নির্দেশকগুলি যে কোনও দিক থেকে প্রবাহিত করতে যেকোন র্যান্ডম কিউবকে বেছে নেওয়া হয়েছিল তার পাগলের মতো। নিরীহ স্ট্রিং দিয়ে বাথটাব পূরণ করার মতো। আপনি যখন টবটি নিষ্কাশন করতে চান, তখন কি আপনার বোকা স্ট্রিংয়ের উত্সটি ফিরে পাওয়ার উচিত? অথবা আপনি কেবল নিকটবর্তী যা কিছু গ্রহণ করা উচিত? সুতরাং কিউবগুলি একটি বড় পুলে রয়েছে এমন পরিস্থিতিতে সম্ভবত তাদের পিতামাতার প্রবাহকে উপেক্ষা করা উচিত এবং তাদের উপরে যা আছে তা থেকে টানুন। আমি এটির জন্য কিছু বেসিক ওয়ার্কিং কোড নিয়ে এসেছি, তবে আমি কখনই খুশি হতে পারি এমন মার্জিত সমাধান ছিল না।
একাধিক বাবা-মা । একটি শিশু স্ট্রিম সহজেই একাধিক পিতামাতার স্ট্রিম দ্বারা খাওয়ানো যেতে পারে। তবে একক পিতা বা মাতার কাছে পয়েন্টার থাকা শিশুটি এটির অনুমতি দেয় না। প্রতিটি সম্ভাব্য পিতামাতার দিকনির্দেশের জন্য কিছুটা অনুমতি দেওয়ার জন্য পর্যাপ্ত বিটগুলি ব্যবহার করে এটি ঠিক করা যেতে পারে। এবং সম্ভবত একাধিক পিতামাতার ক্ষেত্রে এলোমেলোভাবে এলোমেলোভাবে একটি পথ নির্বাচন করতে পরিবর্তন করা। তবে, পরীক্ষা করার জন্য এবং অন্যান্য কী কী সমস্যা প্রকাশ করতে পারে তা দেখার জন্য আমি কখনই এর কাছাকাছি যাইনি।