কয়েক সপ্তাহের অপেক্ষার পর, আপনি আর আপনার বন্ধুরা একসঙ্গে জড়ো হলেন আপনার জীবনের প্রথম Dungeons & Dragons (D&D) গেম খেলতে। যেহেতু এটি গেমটির প্রথম সেশন, তাই প্রত্যেক খেলোয়াড়কে খেলার জন্য একটি চরিত্র বানাতে হবে। চরিত্রের ক্ষমতাগুলো নির্ধারিত হয় ছয় দিকের পাশা গড়ে, কিন্তু পাশাগুলো কোথায়? আচমকা ধাক্কা খেয়ে আপনি বুঝতে পারেন, আপনার বন্ধুরা অপেক্ষা করছে আপনিই পাশা বানিয়ে আনবেন বলে; D&D খেলার আইডিয়াটা তো আপনারই ছিল! আতঙ্কিত হয়ে আপনি বুঝতে পারেন যে আপনি পাশা আনতে ভুলে গেছেন, যার মানে D&D গেম হবে না। যেহেতু আপনার প্রাথমিক প্রোগ্রামিং দক্ষতা আছে, তাই আপনি দ্রুত একটি সমাধান বের করেন: পাশা গড়ানো সিমুলেট করার জন্য একটি প্রোগ্রাম লিখবেন।
একটি Dungeons & Dragons গেমে প্রতিটি খেলোয়াড় প্রথমে নিজের খেলার জন্য একটি ক্যারেক্টার তৈরি করে। অন্যান্য বিষয়ের পাশাপাশি এই ক্যারেক্টারের থাকে ছয়টি অ্যাবিলিটি: strength, dexterity, constitution, intelligence, wisdom এবং charisma. এই ছয়টি অ্যাবিলিটির স্কোর ঠিক করা হয় র্যান্ডমভাবে। এটি করার জন্য আপনি ছয় দিকের চারটি পাশা গড়িয়ে সবচেয়ে বড় তিনটি পাশার যোগফল লিখে রাখেন। এভাবে আপনি ছয়বার এটি করেন, প্রতিটি অ্যাবিলিটির জন্য একবার।
আপনার ক্যারেক্টারের শুরুর হিটপয়েন্ট হলো 10 + আপনার ক্যারেক্টারের constitution মডিফায়ার। আপনার ক্যারেক্টারের constitution থেকে 10 বিয়োগ করে, 2 দিয়ে ভাগ করে এবং নিচের দিকে রাউন্ড করে আপনি constitution মডিফায়ার বের করেন।
উপরের নিয়মগুলো মেনে একটি র্যান্ডম ক্যারেক্টার জেনারেটর লিখুন।
উদাহরণ হিসেবে, চারটি পাশা ছোড়ার ছয়টি ফল এমন হতে পারে:
যেহেতু constitution 3, তাই constitution মডিফায়ার হয় -4 এবং হিটপয়েন্ট হয় 6।
বেশিরভাগ প্রোগ্রামিং ভাষাতেই (সিউডো-)র্যান্ডম জেনারেটর থাকে, কিন্তু পাশা ছোড়ার জন্য তৈরি প্রোগ্রামিং ভাষা খুব কমই আছে। এমন একটি ভাষা হলো Troll.
Zig-এর স্ট্যান্ডার্ড লাইব্রেরি লুকানো গ্লোবাল স্টেট এড়িয়ে চলে, তাই নিজের একটি র্যান্ডম নম্বর জেনারেটর রাখার বদলে আপনার ফাংশনগুলো মান নেওয়ার জন্য একটি std.Random ইন্টারফেস পায়।
টেস্টগুলো std.testing.random_seed দিয়ে সিড করা একটি জেনারেটর পাস করে এবং যাচাই করে যে একই সিডযুক্ত জেনারেটরগুলো একই ক্যারেক্টার তৈরি করে।
আপনার অ্যাবিলিটি স্কোরের ডিস্ট্রিবিউশন চি-স্কোয়ার টেস্ট দিয়ে p < 0.0001 তাৎপর্য স্তরে যাচাই করা হয়:
ability যে স্কোরগুলো রিটার্ন করে, সেগুলো প্রত্যাশিত ডিস্ট্রিবিউশনের সাথে তুলনা করা হয়;একটি সঠিক ইমপ্লিমেন্টেশনে প্রতিটি টেস্টে ফেল করার সম্ভাবনা ০.০১%-এরও কম।
অ্যাবিলিটি স্কোর বলতে কী বোঝায় তার সংজ্ঞা উপরের নির্দেশনায় দেখুন।
Exercism-এ সাইন আপ করুন, Zig ট্র্যাকের 104টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
আমরা দেখব কীভাবে (আপাতদৃষ্টিতে) এলোমেলো ডাইস রোল তৈরি করা যায়। আপনি সিড, সিউডো র্যান্ডম সংখ্যা আর কিছু কমন বিপদ সম্পর্কে জানতে পারবেন। শেষে দেখব, র্যান্ডম মান রিটার্ন করা ফাংশন টেস্ট করার জন্য প্রপার্টি-বেজড টেস্টিং কতটা দারুণ।