24 KiB
خلائی کھیل بنائیں حصہ 4: لیزر شامل کریں اور تصادم کا پتہ لگائیں
لیکچر سے پہلے کا کوئز
اس لمحے کے بارے میں سوچیں جب اسٹار وارز میں لوک کے پروٹون ٹورپیڈوز نے ڈیتھ اسٹار کے ایگزاسٹ پورٹ کو نشانہ بنایا۔ اس درست تصادم کا پتہ لگانا کہکشاں کی تقدیر کو بدل دیا! کھیلوں میں، تصادم کا پتہ لگانا اسی طرح کام کرتا ہے - یہ طے کرتا ہے کہ کب اشیاء ایک دوسرے کے ساتھ تعامل کرتی ہیں اور اس کے بعد کیا ہوتا ہے۔
اس سبق میں، آپ اپنے خلائی کھیل میں لیزر ہتھیار شامل کریں گے اور تصادم کا پتہ لگانے کا طریقہ نافذ کریں گے۔ بالکل اسی طرح جیسے ناسا کے مشن پلانرز خلائی جہاز کے راستے کا حساب لگاتے ہیں تاکہ ملبے سے بچا جا سکے، آپ سیکھیں گے کہ جب کھیل کی اشیاء ایک دوسرے سے ٹکرا رہی ہوں تو ان کا پتہ کیسے لگایا جائے۔ ہم اسے قابل انتظام مراحل میں تقسیم کریں گے جو ایک دوسرے پر تعمیر ہوتے ہیں۔
آخر میں، آپ کے پاس ایک فعال جنگی نظام ہوگا جہاں لیزر دشمنوں کو تباہ کرتے ہیں اور تصادم کھیل کے واقعات کو متحرک کرتے ہیں۔ یہی تصادم کے اصول ہر چیز میں استعمال ہوتے ہیں، فزکس کی سیمولیشنز سے لے کر انٹرایکٹو ویب انٹرفیس تک۔
✅ دنیا کے پہلے کمپیوٹر گیم کے بارے میں تھوڑی تحقیق کریں۔ اس کی فعالیت کیا تھی؟
تصادم کا پتہ لگانا
تصادم کا پتہ لگانا اپولو لونر ماڈیول کے قریبیت سینسرز کی طرح کام کرتا ہے - یہ مسلسل فاصلے چیک کرتا ہے اور جب اشیاء بہت قریب ہو جاتی ہیں تو الرٹس کو متحرک کرتا ہے۔ کھیلوں میں، یہ نظام طے کرتا ہے کہ کب اشیاء ایک دوسرے کے ساتھ تعامل کرتی ہیں اور اس کے بعد کیا ہونا چاہیے۔
جو طریقہ ہم استعمال کریں گے وہ ہر کھیل کی چیز کو ایک مستطیل کے طور پر برتتا ہے، بالکل اسی طرح جیسے ایئر ٹریفک کنٹرول سسٹمز ہوائی جہاز کو ٹریک کرنے کے لیے آسان جیومیٹرک شکلیں استعمال کرتے ہیں۔ یہ مستطیل طریقہ بنیادی لگ سکتا ہے، لیکن یہ کمپیوٹیشنل طور پر موثر ہے اور زیادہ تر کھیل کے منظرناموں کے لیے اچھی طرح کام کرتا ہے۔
مستطیل کی نمائندگی
ہر کھیل کی چیز کو کوآرڈینیٹ کی حدود کی ضرورت ہوتی ہے، بالکل اسی طرح جیسے مارس پاتھ فائنڈر روور نے مریخ کی سطح پر اپنی جگہ کا نقشہ بنایا۔ یہاں ہم ان حدود کو کیسے بیان کرتے ہیں:
rectFromGameObject() {
return {
top: this.y,
left: this.x,
bottom: this.y + this.height,
right: this.x + this.width
}
}
آئیے اسے توڑتے ہیں:
- اوپر کا کنارہ: یہ وہ جگہ ہے جہاں آپ کی چیز عمودی طور پر شروع ہوتی ہے (اس کا y مقام)
- بائیں کنارہ: جہاں یہ افقی طور پر شروع ہوتا ہے (اس کا x مقام)
- نیچے کا کنارہ: y مقام میں اونچائی شامل کریں - اب آپ جانتے ہیں کہ یہ کہاں ختم ہوتا ہے!
- دائیں کنارہ: x مقام میں چوڑائی شامل کریں - اور آپ کے پاس مکمل حد ہے
انٹرسیکشن الگورتھم
مستطیل کے انٹرسیکشن کا پتہ لگانا اسی منطق کا استعمال کرتا ہے جیسے ہبل اسپیس ٹیلی سکوپ یہ طے کرتا ہے کہ آیا آسمانی اشیاء اس کے فیلڈ آف ویو میں ایک دوسرے سے اوورلیپ کر رہی ہیں۔ الگورتھم علیحدگی کی جانچ کرتا ہے:
function intersectRect(r1, r2) {
return !(r2.left > r1.right ||
r2.right < r1.left ||
r2.top > r1.bottom ||
r2.bottom < r1.top);
}
علیحدگی کا ٹیسٹ ریڈار سسٹمز کی طرح کام کرتا ہے:
- کیا مستطیل 2 مکمل طور پر مستطیل 1 کے دائیں طرف ہے؟
- کیا مستطیل 2 مکمل طور پر مستطیل 1 کے بائیں طرف ہے؟
- کیا مستطیل 2 مکمل طور پر مستطیل 1 کے نیچے ہے؟
- کیا مستطیل 2 مکمل طور پر مستطیل 1 کے اوپر ہے؟
اگر ان میں سے کوئی بھی شرط درست نہیں ہے، تو مستطیلیں لازمی طور پر اوورلیپ کر رہی ہیں۔ یہ طریقہ ریڈار آپریٹرز کے اس بات کا تعین کرنے کے طریقے کی عکاسی کرتا ہے کہ آیا دو ہوائی جہاز محفوظ فاصلے پر ہیں۔
اشیاء کے لائف سائیکل کا انتظام کرنا
جب لیزر دشمن کو ٹکراتا ہے، تو دونوں اشیاء کو کھیل سے ہٹانے کی ضرورت ہوتی ہے۔ تاہم، لوپ کے درمیان اشیاء کو حذف کرنا کریش کا سبب بن سکتا ہے - ایک سبق جو اپولو گائیڈنس کمپیوٹر جیسے ابتدائی کمپیوٹر سسٹمز میں سختی سے سیکھا گیا۔ اس کے بجائے، ہم "حذف کرنے کے لیے نشان زد کریں" کا طریقہ استعمال کرتے ہیں جو فریموں کے درمیان اشیاء کو محفوظ طریقے سے ہٹاتا ہے۔
یہاں ہم کسی چیز کو ہٹانے کے لیے کیسے نشان زد کرتے ہیں:
// Mark object for removal
enemy.dead = true;
یہ طریقہ کیوں کام کرتا ہے:
- ہم چیز کو "مردہ" کے طور پر نشان زد کرتے ہیں لیکن اسے فوراً حذف نہیں کرتے
- یہ موجودہ کھیل کے فریم کو محفوظ طریقے سے ختم کرنے دیتا ہے
- کسی ایسی چیز کو استعمال کرنے کی کوشش سے کوئی کریش نہیں ہوتا جو پہلے ہی ختم ہو چکی ہو!
پھر اگلے رینڈر سائیکل سے پہلے نشان زد کردہ اشیاء کو فلٹر کریں:
gameObjects = gameObjects.filter(go => !go.dead);
یہ فلٹرنگ کیا کرتی ہے:
- صرف "زندہ" اشیاء کے ساتھ ایک تازہ فہرست بناتی ہے
- کسی بھی چیز کو پھینک دیتی ہے جو مردہ کے طور پر نشان زد ہو
- آپ کے کھیل کو ہموار طریقے سے چلتا رکھتی ہے
- تباہ شدہ اشیاء کے جمع ہونے سے میموری کے بوجھ کو روکتی ہے
لیزر میکینکس کو نافذ کرنا
کھیلوں میں لیزر پروجیکٹائل اسٹار ٹریک کے فوٹون ٹورپیڈوز کے اصول پر کام کرتے ہیں - یہ الگ الگ اشیاء ہیں جو سیدھی لائنوں میں سفر کرتی ہیں جب تک کہ وہ کسی چیز سے ٹکرا نہ جائیں۔ ہر اسپیس بار پریس ایک نیا لیزر آبجیکٹ بناتا ہے جو اسکرین پر حرکت کرتا ہے۔
اسے کام کرنے کے لیے، ہمیں چند مختلف حصوں کو مربوط کرنے کی ضرورت ہے:
عمل درآمد کے کلیدی اجزاء:
- لیزر اشیاء بنائیں جو ہیرو کی پوزیشن سے پیدا ہوتی ہیں
- کی بورڈ ان پٹ کو ہینڈل کریں تاکہ لیزر تخلیق کو متحرک کیا جا سکے
- لیزر کی حرکت اور لائف سائیکل کا انتظام کریں
- لیزر پروجیکٹائل کے لیے بصری نمائندگی نافذ کریں
فائرنگ کی شرح کنٹرول کو نافذ کرنا
لامحدود فائرنگ کی شرح کھیل کے انجن کو مغلوب کر دے گی اور گیم پلے کو بہت آسان بنا دے گی۔ حقیقی ہتھیاروں کے نظام کو اسی طرح کی رکاوٹوں کا سامنا کرنا پڑتا ہے - یہاں تک کہ یو ایس ایس انٹرپرائز کے فیزرز کو شاٹس کے درمیان ری چارج کرنے کے لیے وقت درکار ہوتا تھا۔
ہم ایک کول ڈاؤن سسٹم نافذ کریں گے جو اسپام فائرنگ کو روکتا ہے جبکہ کنٹرولز کو جوابدہ رکھتا ہے:
class Cooldown {
constructor(time) {
this.cool = false;
setTimeout(() => {
this.cool = true;
}, time);
}
}
class Weapon {
constructor() {
this.cooldown = null;
}
fire() {
if (!this.cooldown || this.cooldown.cool) {
// Create laser projectile
this.cooldown = new Cooldown(500);
} else {
// Weapon is still cooling down
}
}
}
کول ڈاؤن کیسے کام کرتا ہے:
- جب تخلیق کیا جاتا ہے، ہتھیار "گرم" شروع ہوتا ہے (ابھی فائر نہیں کر سکتا)
- ٹائم آؤٹ مدت کے بعد، یہ "ٹھنڈا" ہو جاتا ہے (فائر کرنے کے لیے تیار)
- فائر کرنے سے پہلے، ہم چیک کرتے ہیں: "کیا ہتھیار ٹھنڈا ہے؟"
- یہ اسپام کلکنگ کو روکتا ہے جبکہ کنٹرولز کو جوابدہ رکھتا ہے
✅ خلائی کھیل سیریز کے سبق 1 کا حوالہ دیں تاکہ کول ڈاؤنز کے بارے میں یاد دہانی حاصل ہو۔
تصادم کے نظام کی تعمیر
آپ اپنے موجودہ خلائی کھیل کے کوڈ کو بڑھا دیں گے تاکہ تصادم کا پتہ لگانے کا نظام بنایا جا سکے۔ بین الاقوامی خلائی اسٹیشن کے خودکار تصادم سے بچاؤ کے نظام کی طرح، آپ کا کھیل مسلسل اشیاء کی پوزیشنوں کی نگرانی کرے گا اور انٹرسیکشنز کا جواب دے گا۔
پچھلے سبق کے کوڈ سے شروع کرتے ہوئے، آپ تصادم کا پتہ لگانے کے لیے مخصوص اصولوں کے ساتھ اضافہ کریں گے جو اشیاء کے تعاملات کو کنٹرول کرتے ہیں۔
💡 پرو ٹپ: لیزر اسپریٹ پہلے ہی آپ کے اثاثوں کے فولڈر میں شامل ہے اور آپ کے کوڈ میں حوالہ دیا گیا ہے، عمل درآمد کے لیے تیار ہے۔
نافذ کرنے کے لیے تصادم کے اصول
کھیل کے میکینکس شامل کریں:
- لیزر دشمن کو ٹکراتا ہے: دشمن کی چیز لیزر پروجیکٹائل کے ذریعے مارے جانے پر تباہ ہو جاتی ہے
- لیزر اسکرین کی حد کو ٹکراتا ہے: لیزر اسکرین کے اوپر کے کنارے تک پہنچنے پر ہٹا دیا جاتا ہے
- دشمن اور ہیرو کا تصادم: دونوں اشیاء انٹرسیکشن پر تباہ ہو جاتی ہیں
- دشمن نیچے پہنچتا ہے: کھیل ختم ہونے کی حالت جب دشمن اسکرین کے نیچے پہنچتے ہیں
اپنے ترقیاتی ماحول کو ترتیب دینا
اچھی خبر - ہم نے آپ کے لیے زیادہ تر بنیاد پہلے ہی تیار کر دی ہے! آپ کے تمام کھیل کے اثاثے اور بنیادی ڈھانچہ your-work سب فولڈر میں موجود ہیں، جو آپ کے لیے ٹھنڈی تصادم کی خصوصیات شامل کرنے کے لیے تیار ہیں۔
پروجیکٹ کا ڈھانچہ
-| assets
-| enemyShip.png
-| player.png
-| laserRed.png
-| index.html
-| app.js
-| package.json
فائل ڈھانچے کو سمجھنا:
- تمام اسپریٹ تصاویر پر مشتمل ہے جو کھیل کی اشیاء کے لیے ضروری ہیں
- مین HTML دستاویز اور جاوا اسکرپٹ ایپلیکیشن فائل شامل ہے
- مقامی ترقیاتی سرور کے لیے پیکیج کنفیگریشن فراہم کرتا ہے
ترقیاتی سرور شروع کرنا
اپنے پروجیکٹ فولڈر پر جائیں اور مقامی سرور شروع کریں:
cd your-work
npm start
یہ کمانڈ ترتیب:
- کام کرنے والے پروجیکٹ فولڈر میں ڈائریکٹری تبدیل کرتی ہے
- مقامی HTTP سرور شروع کرتی ہے
http://localhost:5000پر - آپ کے کھیل کی فائلوں کو جانچ اور ترقی کے لیے پیش کرتی ہے
- لائیو ترقی کو فعال کرتی ہے خودکار ری لوڈنگ کے ساتھ
اپنے براؤزر کو کھولیں اور http://localhost:5000 پر جائیں تاکہ اپنے موجودہ کھیل کی حالت کو دیکھ سکیں جس میں ہیرو اور دشمن اسکرین پر پیش کیے گئے ہیں۔
مرحلہ وار عمل درآمد
بالکل اسی طرح جیسے ناسا نے ووئجر خلائی جہاز کو پروگرام کرنے کے لیے منظم طریقہ اختیار کیا، ہم تصادم کا پتہ لگانے کو مرحلہ وار طریقے سے نافذ کریں گے، ہر جزو کو قدم بہ قدم بنائیں گے۔
1. مستطیل تصادم کی حدود شامل کریں
سب سے پہلے، آئیے اپنے کھیل کی اشیاء کو سکھائیں کہ وہ اپنی حدود کو کیسے بیان کریں۔ اپنے GameObject کلاس میں یہ طریقہ شامل کریں:
rectFromGameObject() {
return {
top: this.y,
left: this.x,
bottom: this.y + this.height,
right: this.x + this.width,
};
}
یہ طریقہ انجام دیتا ہے:
- ایک مستطیل چیز بناتا ہے جس میں درست حد کے کوآرڈینیٹس ہوتے ہیں
- نیچے اور دائیں کنارے کا حساب لگاتا ہے پوزیشن اور طول و عرض کا استعمال کرتے ہوئے
- ایک چیز واپس کرتا ہے جو تصادم کا پتہ لگانے والے الگورتھم کے لیے تیار ہے
- تمام کھیل کی اشیاء کے لیے ایک معیاری انٹرفیس فراہم کرتا ہے
2. انٹرسیکشن کا پتہ لگانا نافذ کریں
اب آئیے اپنے تصادم کے جاسوس کو بنائیں - ایک فنکشن جو بتا سکتا ہے کہ آیا دو مستطیلیں اوورلیپ کر رہی ہیں:
function intersectRect(r1, r2) {
return !(
r2.left > r1.right ||
r2.right < r1.left ||
r2.top > r1.bottom ||
r2.bottom < r1.top
);
}
یہ الگورتھم کام کرتا ہے:
- چار علیحدگی کی شرائط کا ٹیسٹ کرتا ہے مستطیلوں کے درمیان
- اگر کوئی علیحدگی کی شرط درست ہو تو
falseواپس کرتا ہے - تصادم کی نشاندہی کرتا ہے جب کوئی علیحدگی موجود نہ ہو
- موثر انٹرسیکشن ٹیسٹنگ کے لیے نفی کی منطق استعمال کرتا ہے
3. لیزر فائرنگ کا نظام نافذ کریں
یہاں چیزیں دلچسپ ہو جاتی ہیں! آئیے لیزر فائرنگ کا نظام ترتیب دیں۔
پیغام کے مستقلات
سب سے پہلے، آئیے کچھ پیغام کی اقسام کی وضاحت کریں تاکہ ہمارے کھیل کے مختلف حصے ایک دوسرے سے بات کر سکیں:
KEY_EVENT_SPACE: "KEY_EVENT_SPACE",
COLLISION_ENEMY_LASER: "COLLISION_ENEMY_LASER",
COLLISION_ENEMY_HERO: "COLLISION_ENEMY_HERO",
یہ مستقلات فراہم کرتے ہیں:
- ایپلیکیشن میں ایونٹ کے ناموں کو معیاری بناتا ہے
- کھیل کے نظام کے درمیان مستقل مواصلات کو فعال کرتا ہے
- ایونٹ ہینڈلر رجسٹریشن میں ٹائپوز کو روکتا ہے
کی بورڈ ان پٹ ہینڈلنگ
اپنے کی ایونٹ لسٹنر میں اسپیس کی کی ڈیٹیکشن شامل کریں:
} else if(evt.keyCode === 32) {
eventEmitter.emit(Messages.KEY_EVENT_SPACE);
}
یہ ان پٹ ہینڈلر:
- اسپیس کی پریسز کا پتہ لگاتا ہے keyCode 32 کا استعمال کرتے ہوئے
- ایک معیاری ایونٹ پیغام خارج کرتا ہے
- ڈیکپلڈ فائرنگ منطق کو فعال کرتا ہے
ایونٹ لسٹنر سیٹ اپ
اپنے initGame() فنکشن میں فائرنگ کے رویے کو رجسٹر کریں:
eventEmitter.on(Messages.KEY_EVENT_SPACE, () => {
if (hero.canFire()) {
hero.fire();
}
});
یہ ایونٹ لسٹنر:
- اسپیس کی ایونٹس کا جواب دیتا ہے
- فائرنگ کول ڈاؤن کی حیثیت کو چیک کرتا ہے
- اجازت دی گئی صورت میں لیزر تخلیق کو متحرک کرتا ہے
لیزر-دشمن تعاملات کے لیے تصادم ہینڈلنگ شامل کریں:
eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => {
first.dead = true;
second.dead = true;
});
یہ تصادم ہینڈلر:
- تصادم ایونٹ ڈیٹا وصول کرتا ہے دونوں اشیاء کے ساتھ
- دونوں اشیاء کو ہٹانے کے لیے نشان زد کرتا ہے
- تصادم کے بعد مناسب صفائی کو یقینی بناتا ہے
4. لیزر کلاس بنائیں
ایک لیزر پروجیکٹائل نافذ کریں جو اوپر کی طرف حرکت کرتا ہے اور اپنے لائف سائیکل کا انتظام کرتا ہے:
class Laser extends GameObject {
constructor(x, y) {
super(x, y);
this.width = 9;
this.height = 33;
this.type = 'Laser';
this.img = laserImg;
let id = setInterval(() => {
if (this.y > 0) {
this.y -= 15;
} else {
this.dead = true;
clearInterval(id);
}
}, 100);
}
}
یہ کلاس عمل درآمد:
- GameObject کو بڑھاتا ہے بنیادی فعالیت کو وراثت میں لینے کے لیے
- لیزر اسپریٹ کے لیے مناسب طول و عرض مقرر کرتا ہے
- خودکار اوپر کی حرکت پیدا کرتا ہے
setInterval()کا استعمال کرتے ہوئے - اسکرین کے اوپر پہنچنے پر خود کو تباہ کرتا ہے
- اپنے اینیمیشن کے وقت اور صفائی کا انتظام کرتا ہے
5. تصادم کا پتہ لگانے کا نظام نافذ کریں
ایک جامع تصادم کا پتہ لگانے کا فنکشن بنائیں:
function updateGameObjects() {
const enemies = gameObjects.filter(go => go.type === 'Enemy');
const lasers = gameObjects.filter(go => go.type === "Laser");
// Test laser-enemy collisions
lasers.forEach((laser) => {
enemies.forEach((enemy) => {
if (intersectRect(laser.rectFromGameObject(), enemy.rectFromGameObject())) {
eventEmitter.emit(Messages.COLLISION_ENEMY_LASER, {
first: laser,
second: enemy,
});
}
});
});
// Remove destroyed objects
gameObjects = gameObjects.filter(go => !go.dead);
}
یہ تصادم کا نظام:
- کھیل کی اشیاء کو قسم کے لحاظ سے فلٹر کرتا ہے مؤثر جانچ کے لیے
- ہر لیزر کو ہر دشمن کے خلاف ٹیسٹ کرتا ہے انٹرسیکشن کے لیے
- تصادم کے ایونٹس خارج کرتا ہے جب انٹرسیکشن کا پتہ چلتا ہے
- تصادم کی پروسیسنگ کے بعد تباہ شدہ اشیاء کو صاف کرتا ہے
⚠️ اہم: اپنے مین گیم لوپ میں
updateGameObjects()شامل کریںwindow.onloadمیں تصادم کا پتہ لگانے کو فعال کرنے کے لیے۔
6. ہیرو کلاس میں کول ڈاؤن سسٹم شامل کریں
ہیرو کلاس کو فائرنگ میکینکس اور شرح کی حد بندی کے ساتھ بہتر بنائیں:
class Hero extends GameObject {
constructor(x, y) {
super(x, y);
this.width = 99;
this.height = 75;
this.type = "Hero";
this.speed = { x: 0, y: 0 };
this.cooldown = 0;
}
fire() {
gameObjects.push(new Laser(this.x + 45, this.y - 10));
this.cooldown = 500;
let id = setInterval(() => {
if (this.cooldown > 0) {
this.cooldown -= 100;
} else {
clearInterval(id);
}
}, 200);
}
canFire() {
return this.cooldown === 0;
}
}
بہتر ہیرو کلاس کو سمجھنا:
- کول ڈاؤن ٹائمر کو صفر پر شروع کرتا ہے (فائر کرنے کے لیے تیار)
- لیزر اشیاء تخلیق کرتا ہے ہیرو شپ کے اوپر پوزیشن میں
- تیز فائرنگ کو روکنے کے لیے کول ڈاؤن مدت مقرر کرتا ہے
- وقفہ پر مبنی اپ ڈیٹس کا استعمال کرتے ہوئے کول ڈاؤن ٹائمر کو کم کرتا ہے
canFire()طریقہ کے ذریعے فائرنگ کی حیثیت کی جانچ فراہم کرتا ہے
اپنے عمل درآمد کی جانچ کرنا
آپ کے خلائی کھیل میں اب مکمل تصادم کا پتہ لگانے اور جنگی میکینکس شامل ہیں۔ 🚀 ان نئی صلاحیتوں کی جانچ کریں:
- ایرو کیز کے ساتھ نیویگیٹ کریں حرکت کنٹرولز کی تصدیق کے لیے
- اسپیس بار کے ساتھ لیزر فائر کریں - نوٹ کریں کہ کول ڈاؤن اسپام کلکنگ کو کیسے روکتا ہے
- تصادم کا مشاہدہ کریں جب لیزر دشمنوں کو ٹکراتے ہیں، ہٹانے کو متحرک کرتے ہیں
- صفائی کی تصدیق کریں جیسے تباہ شدہ اشیاء کھیل سے غائب ہو جاتی ہیں
آپ نے کامیابی سے تصادم کا پتہ لگانے کا نظام نافذ کیا ہے جو خلائی جہاز کی نیویگیشن اور روبوٹکس کی رہنمائی کرنے والے انہی ری
ڈسکلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔