Salvo · سوچنے کے لیے کچھ
خانوں پر کلک کرنے کے سادہ عمل کے نیچے ایک تعیّنی (deterministic) انجن کارفرما ہے جو چھپے ہوئے بیڑوں، امکان کے وزن سے چلنے والے استدلال، اور اخفا اور دریافت کے کلاسیکی مقابلے کا نمونہ تیار کرتا ہے۔ 3
انگریزی میں لکھا اور ترمیم کیا گیا۔ یہ اردو نسخہ مشینی ترجمے سے تیار کیا گیا ہے؛ جہاں درستی اہم ہو، وہاں انگریزی اصل ہی مستند ہے۔ اصل انگریزی متن پڑھیں ←
کھیل کے مرکز میں Board آبجیکٹس کا ایک جوڑا ہے: ایک آپ کی چھپی ہوئی پوزیشن کی نمائندگی کرتا ہے اور دوسرا مخالف کی چھپی ہوئی پوزیشن کی۔ ہر بورڈ پر ایک لکیردار گرڈ (grid) پر رکھا گیا جہازوں کا بیڑا ہوتا ہے، لیکن ان کے مقامات دوسرے فریق سے پوشیدہ رہتے ہیں۔ آپ دشمن کے گرڈ پر فائر کرتے ہیں جبکہ AI آپ کے گرڈ پر فائر کرتا ہے، اور ہر شاٹ یا تو کسی جہاز پر لگتا ہے یا خالی پانی میں گرتا ہے۔ یہ دو بورڈ والی ساخت چھپے ہوئے بیڑے کے اس مقابلے کا بنیادی معلوماتی عدم تناسب قائم کرتی ہے: ہر فریق اپنا بورڈ پوری طرح جانتا ہے، لیکن دوسرے کی ترتیب کا اندازہ صرف اس کے شاٹس کے نمونے سے لگا سکتا ہے۔ 3
اس ترتیب کی ہم آہنگی ہی کھیل کو اس کا مزاج دیتی ہے۔ کوئی بھی فریق دوسرے کے جہاز براہِ راست نہیں دیکھتا۔ اس کے بجائے، دونوں فریقوں کو ہٹ (نشانے پر لگنے) اور مس (خطا جانے) کی کم یاب رائے سے چھپے ہوئے گرڈ کا ذہنی نقشہ بنانا پڑتا ہے۔ ہر شاٹ ڈیٹا بن جاتا ہے، ہر ہٹ امکانات کو محدود کرتا ہے، اور ہر مس غور و فکر سے علاقہ خارج کر دیتا ہے۔ انجن کا گیم کوآرڈینیٹر ان دونوں بورڈز کا انتظام کرتا ہے، اس بات کو یقینی بناتے ہوئے کہ شاٹس ریکارڈ ہوں، ہٹ درست طور پر منسوب ہوں، اور کھیل صرف اسی وقت ختم ہو جب کسی ایک فریق کا پورا بیڑا غرق ہو چکا ہو۔ 3
کھیل شروع ہونے سے پہلے، انجن AI کے جہازوں کو بے ترتیب انداز میں بچھانے کے لیے randomFleet کو کال کرتا ہے۔ یہ بے ترتیبی من مانی نہیں؛ یہ سیڈ (seed) پر مبنی ہے، یعنی ایک مخصوص سیڈ ویلیو ہمیشہ ایک ہی لے آؤٹ پیدا کرے گی۔ یہ سیڈ شدہ تعیّنیت ایک ڈیزائن کا فیصلہ ہے جو کھیل کو دوبارہ پیدا کرنے اور جانچنے کے قابل بناتا ہے۔ اگر آپ کھیل کو ایک ہی سیڈ کے ساتھ چلائیں تو آپ کو جہازوں کی وہی جگہیں، AI کے فیصلوں کی وہی ترتیب، اور وہی نتیجہ ملے گا۔ یہ خاصیت ڈیبگنگ کے لیے اور یہ سمجھنے کے لیے قیمتی ہے کہ AI مختلف حالات میں کیسا برتاؤ کرتا ہے۔ 3
ایک بار بیڑا بچھ جائے تو کھیل پر حکمرانی کرنے والے قواعد طے شدہ اور تعیّنی ہوتے ہیں۔ AI پانسے نہیں پھینکتا، اور انجن کھیل کے دوران بے ترتیبی داخل نہیں کرتا۔ AI کا ہر فیصلہ اس امکانی ماڈل سے نکلتا ہے جسے وہ برقرار رکھتا ہے، اور آپ کا فائر کیا گیا ہر شاٹ ریکارڈ اور تجزیہ کیا جاتا ہے۔ تغیر کا واحد ذریعہ وہ سیڈ ہے جو بیڑے کی ابتدائی جگہ کا تعین کرتی ہے۔ اس کا مطلب ہے کہ کھیل بالآخر ایک پہیلی ہے: قواعد کی پابندیوں اور شاٹس سے ملنے والی رائے کے پیشِ نظر، کیا آپ چھپی ہوئی ترتیب کا استنباط اس سے پہلے کر سکتے ہیں کہ AI آپ کی ترتیب کا استنباط کر لے؟ 3
جب آپ کوئی شاٹ فائر کرتے ہیں تو انجن اسے ہدف بورڈ پر ریکارڈ کرتا ہے اور جانچتا ہے کہ شاٹ ہٹ ہوا یا مس۔ یہ کام fire فنکشن کے ذریعے ہوتا ہے، جو بورڈ کی حالت کو اپ ڈیٹ کرتا ہے اور نتیجے کا تعین کرتا ہے۔ ہٹ خانے کو جہاز کے زیرِ قبضہ نشان زد کرتا ہے، جبکہ مس اسے خالی پانی کے طور پر نشان زد کرتا ہے۔ پھر انجن اس جہاز کے تمام خانوں کا جائزہ لے کر جانچتا ہے کہ آیا وہ جہاز جس میں یہ خانہ شامل ہے مکمل طور پر غرق ہو چکا ہے۔ اگر کسی جہاز کے تمام خانے ہٹ ہو چکے ہوں تو جہاز غرق ہو جاتا ہے، اور یہ معلومات دونوں فریقوں تک پہنچائی جاتی ہے۔ 3
جیتنے کی شرط سیدھی سادی مگر نتیجہ خیز ہے۔ کوئی فریق اس وقت جیتتا ہے جب مخالف کے تمام جہاز غرق ہو جائیں۔ یہ allSunk فنکشن کے ذریعے جانچا جاتا ہے، جو دیکھتا ہے کہ آیا مخالف کے بورڈ پر ہر جہاز مکمل طور پر ہٹ ہو چکا ہے۔ یہ شرط پوری ہوتے ہی کھیل فوراً ختم ہو جاتا ہے۔ جیتنے کی شرط کی یہ "سب کچھ یا کچھ نہیں" والی نوعیت اس بات کا مطلب رکھتی ہے کہ ہر شاٹ اہم ہے، اور جہازوں کو جلد غرق کرنے کا دباؤ اپنی ترتیب کو ظاہر نہ کرنے کی ضرورت کے ساتھ متوازن رہتا ہے۔ 3
اس کھیل میں مخالف کوئی سادہ بے ترتیب نشانہ باز نہیں۔ یہ امکان کی بنیاد پر ہدف بنانے والا AI ہے جو یہ تولتا ہے کہ ہر چھپے ہوئے خانے میں جہاز ہونے کا کتنا امکان ہے۔ AI دشمن کے گرڈ کا ایک امکانی ماڈل برقرار رکھتا ہے، اور شاٹس فائر ہونے اور رائے موصول ہونے کے ساتھ اسے اپ ڈیٹ کرتا رہتا ہے۔ جن خانوں میں باقی جہازوں کی جگہ کی پابندیوں کی وجہ سے جہاز نہیں ہو سکتے، انہیں غیر امکانی نشان زد کیا جاتا ہے، جبکہ جن خانوں میں باقی جگہوں کو سمونے کے لیے جہاز کا ہونا لازم ہے، انہیں امکانی نشان زد کیا جاتا ہے۔ پھر AI سب سے زیادہ امکان والے خانے پر فائر کرتا ہے، اور اندھے اندازے کو باخبر تلاش میں بدل دیتا ہے۔ 3
یہ امکانی ماڈل امکان کی ریاضی پر مبنی ہے، جہاں واقعات کو صفر اور ایک کے درمیان کے اعداد سے بیان کیا جاتا ہے 2۔ صفر کا امکان یعنی واقعہ رونما نہیں ہو سکتا، جبکہ ایک کا امکان یعنی اسے لازماً رونما ہونا ہے۔ AI ان عددی بیانات کو اپنے شاٹس کی رہنمائی کے لیے استعمال کرتا ہے، اور ان خانوں کو ترجیح دیتا ہے جہاں جہاز ملنے کا امکان سب سے زیادہ ہو۔ یہی طریقہ AI کو خالص بے ترتیب نشانہ باز سے ممتاز کرتا ہے اور اسے اس کا مخصوص شکاری برتاؤ عطا کرتا ہے۔
AI کے برتاؤ کو دو مرحلوں میں بیان کیا جا سکتا ہے: شکار (hunt) اور ہدف (target)۔ شکار کے مرحلے میں AI ان خانوں پر فائر کر کے جہاز تلاش کرتا ہے جہاں غیر دریافت شدہ جہازوں کے ہونے کا سب سے زیادہ امکان ہو۔ یہ ایک وسیع تلاش ہے جس کا مقصد دشمن کے جہازوں سے پہلا رابطہ پانا ہے۔ ہٹ درج ہوتے ہی AI ہدف کے مرحلے میں منتقل ہو جاتا ہے، جہاں وہ اس جہاز کو غرق کرنے کا کام مکمل کرنے کے لیے ہٹ کے پڑوسی خانوں پر توجہ مرکوز کرتا ہے۔ یہ دو مرحلہ طریقہ اسی انداز کی عکاسی کرتا ہے جس سے انسانی کھلاڑی کھیل کو دیکھتے ہیں: پہلے جہاز ڈھونڈو، پھر انہیں غرق کرو۔ 3
شکار اور ہدف کے درمیان منتقلی کا تعین اس بات سے ہوتا ہے کہ آخری شاٹ ہٹ تھا یا مس۔ اگر آخری شاٹ مس ہوا تو AI شکار کے موڈ میں لوٹ جاتا ہے اور سب سے زیادہ امکان والے خانے تلاش کرتا ہے۔ اگر آخری شاٹ ہٹ ہوا تو AI ہدف کے موڈ میں داخل ہو جاتا ہے اور ہٹ کے پڑوسی خانوں پر فائر کرتا ہے۔ یہ سادہ قاعدہ، امکانی ماڈل کے ساتھ مل کر، ایک مربوط حکمتِ عملی تشکیل دیتا ہے جو کھوج اور فائدہ اٹھانے کے درمیان توازن رکھتی ہے۔ AI جہاز ڈھونڈنے کے لیے گرڈ کی کھوج کرتا ہے اور اس جہاز کو مؤثر طریقے سے غرق کرنے کے لیے ہٹ کے اپنے علم سے فائدہ اٹھاتا ہے۔ 3
AI کی تین مشکل کی سطحیں یا طاقتیں ہیں جو اس کے برتاؤ کو ٹیون کرتی ہیں۔ یہ طاقتیں اس بات پر اثر انداز ہوتی ہیں کہ AI امکانات کو کیسے تولتا ہے اور فیصلے کیسے کرتا ہے۔ کم طاقت پر AI زیادہ غلطیاں کر سکتا ہے یا ہدف بنانے میں کم جارحانہ ہو سکتا ہے۔ زیادہ طاقت پر AI اپنے امکانی حساب میں زیادہ مستقل اور ہدف بنانے میں زیادہ بے رحم ہوتا ہے۔ طاقتوں کا یہ تنوع کھلاڑیوں کو اپنے مطابق چیلنج کی سطح چننے دیتا ہے، آرام دہ کھیل سے سنجیدہ مقابلے تک۔
ان طاقتوں کا اصل نفاذ انجن کے AI جزو، یعنی SalvoAI کلاس، میں رہتا ہے۔ مشکل کی سطحیں اس بات میں ترمیم کرتی ہیں کہ AI امکانی ماڈل کی تشریح کیسے کرتا ہے اور کھوج اور فائدہ اٹھانے کے درمیان توازن کیسے رکھتا ہے۔ یہ ڈیزائن AI کو کھیل کی بنیادی میکانکس بدلے بغیر آرام دہ کھلاڑیوں کے لیے قابلِ رسائی اور تجربہ کار کھلاڑیوں کے لیے چیلنجنگ دونوں بناتا ہے۔ 3
کلاسیکی قواعد کے اوپر ایک نیا موڑ بیٹھا ہے: سونار پنگ (sonar ping)۔ یہ صلاحیت کسی فریق کو اس باری کے شاٹ کی قیمت پر دشمن کے گرڈ کا 3×3 ریڈ آؤٹ ظاہر کرنے دیتی ہے۔ سونار پنگ یہ ظاہر کرتا ہے کہ 3×3 علاقے کے ہر خانے میں جہاز ہے یا خالی پانی۔ یہ معلومات جہازوں کے مقام کو محدود کرنے کے لیے انمول ہو سکتی ہے، لیکن اس کی قیمت اس باری کا اپنا شاٹ کھو دینا ہے۔ 3
سونار پنگ استعمال کرنے کا فیصلہ ایک حکمتِ عملی کا فیصلہ ہے۔ معلومات کب اس قیمت کے لائق ہے؟ اگر آپ کو جہاز ڈھونڈنے میں دشواری ہو رہی ہے تو سونار پنگ آپ کو وہ پیش رفت فراہم کر سکتا ہے جس کی آپ کو ضرورت ہے۔ اگر آپ کسی جہاز کو غرق کرنے کے قریب ہیں تو اپنا شاٹ کھونے کی قیمت بہت زیادہ ہو سکتی ہے۔ سونار پنگ کھیل میں وسائل کے انتظام کی ایک تہہ شامل کرتا ہے، جو کھلاڑیوں کو معلومات کی قدر کو عمل کی قدر کے مقابل تولنے پر مجبور کرتی ہے۔ 3
کلاسیکی قواعد پر ایک اور موڑ فی کھیل ایک بار جگہ بدلنے (reposition) کی سہولت ہے۔ ہر فریق کھیل کے دوران ایک بار اپنے کسی ایک جہاز کو منتقل کر سکتا ہے۔ اس دفاعی پینترے کی کوئی باری خرچ نہیں ہوتی، یعنی آپ جگہ بدل کر بھی اپنی باری میں شاٹ فائر کر سکتے ہیں۔ جگہ بدلنے کی صلاحیت آپ کو خطرے میں گھرے جہاز کو خطرے سے باہر نکالنے، یا اسے زیادہ قابلِ دفاع مقام پر منتقل کرنے دیتی ہے۔ 3
جگہ بدلنے کی صلاحیت ایک بار کا اختیار ہے، جو اسے قیمتی بناتا ہے۔ اسے کب استعمال کرنا چاہیے؟ اگر کوئی جہاز غرق ہونے والا ہے تو جگہ بدلنا اسے بچا سکتا ہے۔ اگر آپ کو اپنی موجودہ پوزیشن پر اعتماد ہے تو جگہ بدلنا فضول ہو سکتا ہے۔ جگہ بدلنے کا فیصلہ ایک حکمتِ عملی کا فیصلہ ہے جس کے لیے کھیل کی موجودہ حالت اور مخالف کے ممکنہ اقدامات پر محتاط غور درکار ہے۔ 3
ان تمام میکانکس کی بنیاد فی باری ایک شاٹ کا کلاسیکی قاعدہ ہے۔ ہر فریق فی باری بالکل ایک شاٹ فائر کرتا ہے، باری باری آگے پیچھے۔ یہ قاعدہ کھیل کی لَے قائم کرتا ہے اور یقینی بناتا ہے کہ دونوں فریقوں کو عمل کرنے کا برابر موقع ملے۔ فی باری ایک شاٹ کا قاعدہ ہی کھیل کو رفتار کی دوڑ کے بجائے عقل کا مقابلہ بناتا ہے۔ 3
یہی کلاسیکی قاعدہ کھیل کو بیٹل شپ (Battleship) کی روایت سے جوڑتا ہے، جو دو کھلاڑیوں کا ایک حکمتِ عملی نما اندازہ لگانے والا کھیل ہے جو لکیردار گرڈوں پر کھیلا جاتا ہے، جہاں ہر کھلاڑی کا بیڑا مخالف سے پوشیدہ رہتا ہے 1۔ فی باری ایک شاٹ کا قاعدہ ہی کھیل کو اضطراری ردِعمل کے امتحان کے بجائے استنباط اور امکان کا امتحان بناتا ہے۔ یہ ایک سادہ قاعدہ ہے، لیکن یہی کھیل کو اس کا مزاج اور اس کا چیلنج دیتا ہے۔
انجن خالص اور سیڈ شدہ تعیّنی ہے، اور اپنے ہی سیڈ شدہ رینڈم نمبر جنریٹر سے چلتا ہے۔ اس کا مطلب ہے کہ کھیل کا ہر پہلو شروع میں فراہم کی گئی سیڈ ویلیو سے طے ہوتا ہے۔ ایک ہی سیڈ کے ساتھ کھیل ہمیشہ واقعات کی ایک ہی ترتیب پیدا کرے گا، بیڑے کی ابتدائی جگہ سے آخری شاٹ تک۔ یہ خاصیت کھیل کو قابلِ جانچ بناتی ہے، کیونکہ ایک ہی منظرنامے کو دوبارہ پیدا کر کے پرکھا جا سکتا ہے۔ 3
سیڈ شدہ تعیّنیت کے کھیل کو سمجھنے پر بھی اثرات ہیں۔ اگر آپ سمجھنا چاہتے ہیں کہ AI کسی خاص منظرنامے میں کیسا برتاؤ کرتا ہے تو آپ کھیل کو ایک مخصوص سیڈ کے ساتھ چلا کر نتیجہ دیکھ سکتے ہیں۔ اگر آپ کسی خاص حکمتِ عملی کو آزمانا چاہتے ہیں تو آپ کھیل کو ایک ہی سیڈ کے ساتھ کئی بار چلا کر دیکھ سکتے ہیں کہ وہ کیسی کارکردگی دکھاتی ہے۔ یہ دوبارہ پیدا کرنے کی صلاحیت کھلاڑیوں اور ڈویلپرز دونوں کے لیے ایک قیمتی خوبی ہے۔
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.