Salvo · চিন্তার খাবার
সেলে ক্লিক করার সরল কাজটির নিচে রয়েছে একটি নির্ণায়ক (ডিটারমিনিস্টিক) ইঞ্জিন, যা লুকানো নৌবহর, সম্ভাবনা-ভারিত যুক্তি এবং গোপন রাখা ও খুঁজে বের করার সেই চিরায়ত দ্বন্দ্বযুদ্ধকে মডেল করে। 3
ইংরেজিতে লেখা ও সম্পাদিত। এই বাংলা সংস্করণটি যন্ত্রানুবাদের মাধ্যমে তৈরি; যেখানে নির্ভুলতা গুরুত্বপূর্ণ, সেখানে ইংরেজি মূলটিই প্রামাণ্য। ইংরেজিতে মূল লেখাটি পড়ুন →
খেলার কেন্দ্রে রয়েছে এক জোড়া Board অবজেক্ট — একটি আপনার লুকানো অবস্থান, অন্যটি প্রতিপক্ষের লুকানো অবস্থান। প্রতিটি বোর্ড একটি রেখাঙ্কিত গ্রিডে সাজানো জাহাজের একটি নৌবহর বহন করে, কিন্তু অবস্থানগুলো অপর পক্ষের কাছে গোপন থাকে। আপনি শত্রুর গ্রিডে গুলি করেন আর এআই আপনার গ্রিডে গুলি করে, এবং প্রতিটি গুলি হয় কোনো জাহাজে আঘাত করে, নয়তো খালি জলে পড়ে। এই দ্বৈত-বোর্ড স্থাপত্যই লুকানো-নৌবহরের দ্বন্দ্বযুদ্ধের মৌলিক তথ্য-অসমতা প্রতিষ্ঠা করে: প্রতিটি পক্ষ নিজের বোর্ড সম্পূর্ণ জানে, কিন্তু অপর পক্ষের বিন্যাস কেবল তার গুলির প্যাটার্ন থেকে অনুমান করতে পারে। 3
এই বিন্যাসের প্রতিসাম্যই খেলাটিকে তার চরিত্র দেয়। কোনো পক্ষই অপরের জাহাজ সরাসরি দেখতে পায় না। বরং দুই পক্ষকেই আঘাত ও মিসের বিরল প্রতিক্রিয়া থেকে লুকানো গ্রিডের একটি মানসিক মডেল গড়ে তুলতে হয়। প্রতিটি গুলি হয়ে ওঠে তথ্য, প্রতিটি আঘাত সম্ভাবনাগুলোকে সংকুচিত করে, আর প্রতিটি মিস বিবেচনা থেকে কিছু এলাকা বাদ দেয়। ইঞ্জিনের গেম কোঅর্ডিনেটর এই দুটি বোর্ড পরিচালনা করে — নিশ্চিত করে যে গুলিগুলো নথিবদ্ধ হচ্ছে, আঘাতগুলো সঠিকভাবে দায়ী করা হচ্ছে, এবং খেলা তখনই শেষ হয় যখন এক পক্ষের পুরো নৌবহর ডুবে গেছে। 3
খেলা শুরুর আগে ইঞ্জিন randomFleet কল করে এআই-এর জাহাজগুলোকে এলোমেলোভাবে সাজায়। এই এলোমেলোতা যথেচ্ছ নয়; এটি সিড-নির্ভর, অর্থাৎ একটি নির্দিষ্ট সিড মান সবসময় একই বিন্যাস তৈরি করবে। এই সিড-ভিত্তিক নির্ণায়কতা একটি নকশাগত সিদ্ধান্ত, যা খেলাটিকে পুনরুৎপাদনযোগ্য ও পরীক্ষাযোগ্য করে তোলে। একই সিড দিয়ে খেলা চালালে আপনি একই জাহাজ-স্থাপন, এআই-এর একই সিদ্ধান্তের ধারা এবং একই ফলাফল পাবেন। ডিবাগ করার জন্য এবং বিভিন্ন পরিস্থিতিতে এআই কেমন আচরণ করে তা বোঝার জন্য এই বৈশিষ্ট্যটি মূল্যবান। 3
নৌবহর একবার সাজানো হয়ে গেলে, খেলা পরিচালনার নিয়মগুলো স্থির ও নির্ণায়ক। এআই কোনো পাশা ছোড়ে না, আর ইঞ্জিন খেলার মাঝপথে কোনো এলোমেলোতা আনে না। এআই-এর প্রতিটি সিদ্ধান্ত তার রক্ষণাবেক্ষণ করা সম্ভাবনা মডেল থেকে আসে, আর আপনার ছোড়া প্রতিটি গুলি নথিবদ্ধ ও বিশ্লেষিত হয়। বৈচিত্র্যের একমাত্র উৎস হলো সেই সিড, যা প্রাথমিক নৌবহর-স্থাপন নির্ধারণ করে। এর মানে খেলাটি শেষ পর্যন্ত একটি ধাঁধা: নিয়মের সীমাবদ্ধতা এবং গুলির প্রতিক্রিয়া দেওয়া থাকলে, এআই আপনার লুকানো বিন্যাস বের করার আগেই আপনি কি তারটা বের করতে পারবেন? 3
আপনি যখন একটি গুলি ছোড়েন, ইঞ্জিন সেটি লক্ষ্য বোর্ডে নথিবদ্ধ করে এবং পরীক্ষা করে গুলিটি আঘাত করল নাকি মিস হলো। এটি করা হয় fire ফাংশনের মাধ্যমে, যা বোর্ডের অবস্থা হালনাগাদ করে এবং ফলাফল নির্ধারণ করে। আঘাত হলে সেলটিকে জাহাজ-অধিকৃত হিসেবে চিহ্নিত করা হয়, আর মিস হলে খালি জল হিসেবে। এরপর ইঞ্জিন ওই সেল ধারণকারী জাহাজের সব সেল পরীক্ষা করে দেখে জাহাজটি পুরোপুরি ডুবেছে কি না। কোনো জাহাজের সব সেলে আঘাত লেগে থাকলে জাহাজটি ডুবে যায়, এবং এই তথ্য দুই পক্ষকেই জানানো হয়। 3
জয়ের শর্তটি সরল, কিন্তু তার পরিণতি গুরুতর। প্রতিপক্ষের সব জাহাজ ডুবে গেলে একটি পক্ষ জেতে। এটি পরীক্ষা করা হয় allSunk ফাংশনের মাধ্যমে, যা দেখে প্রতিপক্ষের বোর্ডের প্রতিটি জাহাজে পুরোপুরি আঘাত লেগেছে কি না। এই শর্ত পূরণ হওয়ামাত্র খেলা শেষ হয়ে যায়। জয়ের শর্তের এই সব-নয়তো-কিছুই-নয় প্রকৃতির মানে হলো প্রতিটি গুলিই গুরুত্বপূর্ণ, এবং দ্রুত জাহাজ ডোবানোর চাপের সঙ্গে নিজের বিন্যাস ফাঁস না করার প্রয়োজনের ভারসাম্য রাখতে হয়। 3
এই খেলার প্রতিপক্ষ কোনো সাধারণ এলোমেলো গুলিবাজ নয়। এটি একটি সম্ভাবনা-লক্ষ্যভেদী এআই, যা মেপে দেখে প্রতিটি লুকানো সেলে জাহাজ থাকার সম্ভাবনা কতটা। এআই শত্রুর গ্রিডের একটি সম্ভাবনা মডেল রক্ষণাবেক্ষণ করে, এবং গুলি ছোড়া ও প্রতিক্রিয়া পাওয়ার সঙ্গে সঙ্গে সেটি হালনাগাদ করে। অবশিষ্ট জাহাজগুলোর স্থাপন-সীমাবদ্ধতার কারণে যেসব সেলে জাহাজ থাকতে পারে না, সেগুলোকে অসম্ভাব্য হিসেবে চিহ্নিত করা হয়, আর অবশিষ্ট স্থাপনগুলোর জায়গা দিতে যেসব সেলে জাহাজ থাকতেই হবে, সেগুলোকে সম্ভাব্য হিসেবে চিহ্নিত করা হয়। তারপর এআই সর্বোচ্চ সম্ভাবনার সেলে গুলি করে — অন্ধ অনুমানকে বদলে দেয় সুচিন্তিত অনুসন্ধানে। 3
এই সম্ভাবনা মডেলটির ভিত্তি সম্ভাব্যতার গণিত, যেখানে ঘটনাগুলোকে শূন্য ও একের মধ্যবর্তী সংখ্যা দিয়ে বর্ণনা করা হয় 2। শূন্য সম্ভাবনা মানে ঘটনাটি ঘটতে পারে না, আর এক সম্ভাবনা মানে এটি ঘটতেই হবে। এআই এই সাংখ্যিক বর্ণনাগুলো ব্যবহার করে তার গুলি পরিচালনা করে — যেসব সেলে জাহাজ পাওয়ার সম্ভাবনা সর্বোচ্চ, সেগুলোকে প্রাধান্য দেয়। এই পদ্ধতিই এআই-কে একটি নিছক এলোমেলো গুলিবাজ থেকে আলাদা করে এবং এটিকে তার বৈশিষ্ট্যপূর্ণ শিকারি আচরণ দেয়।
এআই-এর আচরণকে দুটি পর্যায়ে বর্ণনা করা যায়: শিকার (hunt) ও নিশানা (target)। শিকার পর্যায়ে এআই যেসব সেলে অনাবিষ্কৃত জাহাজ থাকার সম্ভাবনা সবচেয়ে বেশি, সেখানে গুলি করে জাহাজ খোঁজে। এটি একটি ব্যাপক অনুসন্ধান, যার লক্ষ্য শত্রু জাহাজের সঙ্গে প্রথম সংস্পর্শ খুঁজে পাওয়া। একবার আঘাত নথিবদ্ধ হলে এআই নিশানা পর্যায়ে চলে যায়, যেখানে সে ওই জাহাজটিকে ডোবানো শেষ করতে আঘাতের প্রতিবেশী সেলগুলোতে মনোযোগ দেয়। এই দুই-পর্যায়ের পদ্ধতি মানব খেলোয়াড়দের খেলার ধরনকেই প্রতিফলিত করে: প্রথমে জাহাজ খোঁজো, তারপর ডোবাও। 3
শিকার ও নিশানার মধ্যে রূপান্তর নির্ধারিত হয় শেষ গুলিটি আঘাত ছিল নাকি মিস, তার ভিত্তিতে। শেষ গুলিটি মিস হলে এআই শিকার মোডে ফিরে যায় এবং সর্বোচ্চ সম্ভাবনার সেল খোঁজে। শেষ গুলিটি আঘাত করলে এআই নিশানা মোডে ঢোকে এবং আঘাতের প্রতিবেশী সেলগুলোতে গুলি করে। এই সরল নিয়মটি সম্ভাবনা মডেলের সঙ্গে মিলে একটি সুসংগত কৌশল তৈরি করে, যা অন্বেষণ ও সদ্ব্যবহারের মধ্যে ভারসাম্য রাখে। এআই জাহাজ খুঁজতে গ্রিড অন্বেষণ করে এবং ওই জাহাজটিকে দক্ষতার সঙ্গে ডোবাতে আঘাতের জ্ঞানকে কাজে লাগায়। 3
এআই-এর তিনটি কঠিনতার শক্তিমাত্রা আছে, যা তার আচরণকে সুর করে। এই শক্তিমাত্রাগুলো প্রভাবিত করে এআই কীভাবে সম্ভাবনা মাপে ও সিদ্ধান্ত নেয়। নিম্ন শক্তিমাত্রায় এআই বেশি ভুল করতে পারে বা নিশানায় কম আক্রমণাত্মক হতে পারে। উচ্চ শক্তিমাত্রায় এআই তার সম্ভাবনা গণনায় বেশি সুসংগত এবং নিশানায় বেশি নির্মম। শক্তিমাত্রার এই বৈচিত্র্য খেলোয়াড়দের নিজেদের উপযোগী একটি চ্যালেঞ্জের স্তর খুঁজে নিতে দেয় — হালকা মেজাজের খেলা থেকে শুরু করে গুরুতর প্রতিযোগিতা পর্যন্ত।
এই শক্তিমাত্রাগুলোর প্রকৃত বাস্তবায়ন রয়েছে ইঞ্জিনের এআই উপাদান SalvoAI ক্লাসে। কঠিনতার স্তরগুলো বদলে দেয় এআই কীভাবে সম্ভাবনা মডেলকে ব্যাখ্যা করে এবং কীভাবে অন্বেষণ ও সদ্ব্যবহারের মধ্যে ভারসাম্য রাখে। এই নকশা খেলার মৌলিক যান্ত্রিকতা না বদলেই এআই-কে একই সঙ্গে হালকা মেজাজের খেলোয়াড়দের জন্য সহজগম্য এবং অভিজ্ঞদের জন্য চ্যালেঞ্জিং হতে দেয়। 3
চিরায়ত নিয়মের উপরে বসে আছে একটি মোচড়: সোনার পিং। এই ক্ষমতা একটি পক্ষকে ওই পালার গুলির বিনিময়ে শত্রুর গ্রিডের একটি 3×3 এলাকার পাঠ প্রকাশ করতে দেয়। সোনার পিং প্রকাশ করে 3×3 এলাকার প্রতিটি সেলে জাহাজ আছে নাকি খালি জল। জাহাজের অবস্থান সংকুচিত করার জন্য এই তথ্য অমূল্য হতে পারে, কিন্তু এর দাম ওই পালায় আপনার গুলি হারানো। 3
সোনার পিং ব্যবহারের সিদ্ধান্তটি কৌশলগত। তথ্যটি কখন তার দামের যোগ্য? আপনি যদি জাহাজ খুঁজে পেতে হিমশিম খান, সোনার পিং আপনাকে প্রয়োজনীয় সাফল্যের পথ দেখাতে পারে। আপনি যদি একটি জাহাজ ডোবানোর কাছাকাছি থাকেন, গুলি হারানোর দাম হয়তো অত্যধিক। সোনার পিং খেলায় সম্পদ-ব্যবস্থাপনার একটি স্তর যোগ করে, খেলোয়াড়দের বাধ্য করে কাজের মূল্যের বিপরীতে তথ্যের মূল্য মেপে দেখতে। 3
চিরায়ত নিয়মের আরেকটি মোচড় হলো প্রতি খেলায় একবার পুনঃস্থাপন। প্রতিটি পক্ষ খেলা চলাকালে নিজের একটি জাহাজ একবার সরাতে পারে। এই রক্ষণাত্মক পাশ কাটানোয় কোনো পালা খরচ হয় না, অর্থাৎ আপনি পুনঃস্থাপন করেও নিজের পালায় একটি গুলি ছুড়তে পারেন। পুনঃস্থাপন ক্ষমতা আপনাকে হুমকির মুখে থাকা একটি জাহাজকে বিপদ থেকে সরিয়ে নিতে, বা আরও সুরক্ষিত কোনো অবস্থানে সরিয়ে রাখতে দেয়। 3
পুনঃস্থাপন ক্ষমতা একবারের একটি বিকল্প, আর সেটাই একে মূল্যবান করে তোলে। কখন এটি ব্যবহার করবেন? কোনো জাহাজ ডুবতে চললে পুনঃস্থাপন সেটিকে বাঁচাতে পারে। আপনি যদি নিজের বর্তমান অবস্থান নিয়ে আত্মবিশ্বাসী হন, পুনঃস্থাপন হয়তো অপচয়। পুনঃস্থাপনের সিদ্ধান্ত একটি কৌশলগত সিদ্ধান্ত, যার জন্য খেলার বর্তমান অবস্থা এবং প্রতিপক্ষের সম্ভাব্য পদক্ষেপ সতর্কভাবে বিবেচনা করা প্রয়োজন। 3
এই সব যান্ত্রিকতার নিচে রয়েছে প্রতি পালায় একটি গুলির চিরায়ত নিয়ম। প্রতিটি পক্ষ প্রতি পালায় ঠিক একটি গুলি ছোড়ে, পালাক্রমে এদিক-ওদিক। এই নিয়মই খেলার ছন্দ প্রতিষ্ঠা করে এবং নিশ্চিত করে যে দুই পক্ষেরই কাজ করার সমান সুযোগ আছে। প্রতি-পালায়-একটি-গুলির নিয়মই খেলাটিকে গতির দৌড় না বানিয়ে বুদ্ধির দ্বন্দ্বযুদ্ধ বানায়। 3
এই চিরায়ত নিয়মই খেলাটিকে ব্যাটলশিপের ঐতিহ্যে প্রোথিত করে — দুই খেলোয়াড়ের একটি কৌশল-ধরনের অনুমানের খেলা, যা রেখাঙ্কিত গ্রিডে খেলা হয় এবং যেখানে প্রতিটি খেলোয়াড়ের নৌবহর প্রতিপক্ষের কাছে গোপন থাকে 1। প্রতি-পালায়-একটি-গুলির নিয়মই খেলাটিকে প্রতিবর্ত ক্রিয়ার পরীক্ষা না বানিয়ে অনুমান ও সম্ভাবনার পরীক্ষা বানায়। এটি একটি সরল নিয়ম, কিন্তু এটিই খেলাটিকে তার চরিত্র ও তার চ্যালেঞ্জ দেয়।
ইঞ্জিনটি বিশুদ্ধ (pure) ও সিড-ভিত্তিক নির্ণায়ক, যা চলে তার নিজস্ব সিড-নির্ভর র্যান্ডম-নম্বর জেনারেটরে। এর মানে খেলার প্রতিটি দিক শুরুতে দেওয়া সিড মান দ্বারা নির্ধারিত হয়। একই সিড দেওয়া হলে খেলা সবসময় প্রাথমিক নৌবহর-স্থাপন থেকে শেষ গুলি পর্যন্ত ঘটনার একই ধারা তৈরি করবে। এই বৈশিষ্ট্য খেলাটিকে পরীক্ষাযোগ্য করে তোলে, কারণ একই পরিস্থিতি পুনরুৎপাদন ও পরীক্ষা করা যায়। 3
সিড-ভিত্তিক নির্ণায়কতার প্রভাব খেলাটিকে বোঝার ক্ষেত্রেও আছে। কোনো নির্দিষ্ট পরিস্থিতিতে এআই কেমন আচরণ করে তা বুঝতে চাইলে আপনি একটি নির্দিষ্ট সিড দিয়ে খেলা চালিয়ে ফলাফল পর্যবেক্ষণ করতে পারেন। কোনো নির্দিষ্ট কৌশল পরীক্ষা করতে চাইলে আপনি একই সিড দিয়ে খেলা একাধিকবার চালিয়ে দেখতে পারেন সেটি কেমন কাজ করে। এই পুনরুৎপাদনযোগ্যতা খেলোয়াড় ও ডেভেলপার উভয়ের জন্যই একটি মূল্যবান বৈশিষ্ট্য।
Board with a hidden fleet, the human fires at the enemy fleet and the AI at the human's, one shot per turn (classic rules), fire records a hit or miss, and a side wins when the opponent's ships are all sunk (allSunk); the opponent is a probability-targeting SalvoAI with three difficulty strengths that "hunts" for ships by favouring the cells where an undiscovered ship is most likely to sit and then "targets" the neighbours of a hit to finish it; two twists sit on the classic rules, a sonar ping reveals a 3×3 ship/empty readout but costs that turn's shot, and each side may reposition one of its own ships once per game (a dodge that does not cost the turn); and the engine is pure and seeded-deterministic.