کروم ڈینو گیم کے اندرونی کام: کرومیم سورس کوڈ کا دورہ

وائی ​​فائی منقطع ہو جاتا ہے، کروم کندھے اچکاتا ہے، اور تھوڑا سا پکسلیٹڈ T-Rex ظاہر ہوتا ہے، جب آپ اسپیس بار کو دباتے ہیں تو صحرا سے گزرنے کے لیے تیار ہوتا ہے۔

2014 سے، ‘انٹرنیٹ نہیں’ کی غلطی کے پیچھے چھپا یہ چھوٹا سا گیم ہر ماہ تقریباً 270 ملین بار کھیلا جا چکا ہے۔ گوگل کا داخلی کوڈ نام "پروجیکٹ بولان” تھا۔ اس کا نام مارک بولان کے نام پر رکھا گیا ہے، جو راک بینڈ ٹی ریکس کے فرنٹ مین ہے۔

اور چونکہ کروم اوپن سورس Chromium پروجیکٹ پر بنایا گیا ہے، اس لیے پوری گیم (تمام جاری ڈیزائن کے فیصلے اور ہیکس) ہر کسی کے پڑھنے کے لیے کھلا ہے۔

تو میں نے اسے پڑھا۔ تمام اور یہ پتہ چلتا ہے کہ یہ "سادہ” گیم گیم ڈیزائن میں ایک چھوٹا ماسٹر کلاس ہے۔ گیم خاموشی سے آپ کو بورڈ پر لے جاتی ہے، آپ کو غیر منصفانہ طریقے سے مارنے سے انکار کرتی ہے، چاند کو سات مراحل سے متحرک کرتی ہے، اور ایک دہائی سے اربوں آلات کو ٹائپ کی غلطیوں کی فراہمی کر رہی ہے۔

اس آرٹیکل میں، ہم اصل سورس کوڈ پر ایک نظر ڈالیں گے اور دیکھیں گے کہ ڈائنوسار گیم اصل میں کیسے کام کرتا ہے۔ اگر آپ پڑھتے ہوئے کسی ٹیب میں گیم کھولنا چاہتے ہیں تو آپ کو وائی فائی کو بند کرنے کی ضرورت نہیں ہے۔ آپ ڈائناسور گیم آن لائن کھیل سکتے ہیں، اور freeCodeCamp میں آن لائن اور آف لائن دونوں ریلیز کے لیے گائیڈز بھی موجود ہیں۔

اور کوڈ خود کرومیم ٹری میں ہے، جو source.chromium.org پر پایا جا سکتا ہے۔ یہ تاریخی طور پر ایک واحد فائل ہے جس میں انحصار سے پاک ونیلا جاوا اسکرپٹ کی تقریباً 3,000 لائنیں ہیں، . کوئی انجن نہیں ہے۔ کوئی فریم ورک نہیں ہے۔ یہاں تک کہ jQuery بھی نہیں۔

ویسے، یہاں پورے گیم کی ایک مثال ہے۔ یہ ایک چھوٹا سا PNG ہے جس میں تمام اسپرائٹس شامل ہیں جن کا کوڈ کوآرڈینیٹ کے ذریعے حوالہ دیتا ہے۔

اصل تشریح شدہ سپرائٹ شیٹ: گیم کے تمام بصری عناصر اس ایک تصویر میں موجود ہیں۔

انڈیکس

گھڑی: کھیل ہر جگہ ایک ہی رفتار سے کیوں چلتے ہیں۔

ہر گیم کو حل کرنے کا پہلا مسئلہ یہ ہے کہ براؤزر ایک مقررہ شرح پر دوبارہ پینٹ نہیں کرتے ہیں۔ ایک 144Hz گیمنگ مانیٹر کام کرے گا۔ requestAnimationFrame 144 بار فی سیکنڈ۔ تاہم، ایک جدوجہد کرنے والا لیپ ٹاپ 40 کا انتظام کر سکتا ہے۔ فی فریم پکسلز کی ایک مقررہ تعداد کو منتقل کرنے سے، کھیل لفظی طور پر بہتر ہارڈ ویئر پر تین گنا زیادہ تیزی سے چلے گا۔

ڈایناسور کا حل ایک معیاری حل ہے جو صاف طور پر چلتا ہے۔ گیمز فی فریم پکسلز میں رفتار کی وضاحت کرتے ہیں۔ ایک فرض شدہ 60FPS پراصل گزرے ہوئے وقت کی بنیاد پر تمام حرکات کو پیمانہ بناتا ہے۔

this.msPerFrame = 1000 / FPS;
// ...in each update:
this.xPos -= Math.floor((currentSpeed * FPS / 1000) * deltaTime);

ہر وہ چیز جو گیم میں حرکت کرتی ہے، ڈایناسور کی چھلانگ سے لے کر کیکٹی، بادلوں اور یہاں تک کہ چاند تک، کو اس سے ضرب دیا جاتا ہے: deltaTime. اس لیے آپ کا بہترین سکور آپ کے دوست کے سکور جیسا ہو گا جو بھی آپ استعمال کریں گے۔

اگر آپ انجینئرنگ کی ایک عادت کو اس مضمون سے دور کرتے ہیں: اس رقم سے "فی فریم” سے کسی بھی چیز کو منتقل نہ کریں۔ گزرے ہوئے وقت کی بنیاد پر ہمیشہ سائز تبدیل کریں۔

T-Rex: چار مستقل اور ایک ٹائپو

ایک ڈایناسور کے پورے جسمانی وجود کی تعریف چند نمبروں سے ہوتی ہے۔ Trex.config اور Runner.config:

GRAVITY: 0.6,
INIITAL_JUMP_VELOCITY: -10,
SPEED: 6,
ACCELERATION: 0.001,
MAX_SPEED: 13,

جی ہاں، آپ نے اسے صحیح پڑھا: INIITAL_JUMP_VELOCITYمیں تین ہیں۔ ہجے کی یہ غلطی کروم میں تقریباً ایک دہائی تک موجود ہے، جو اربوں ڈیوائسز پر انسٹال ہے۔ کیونکہ نام بدلنا کبھی خطرے کے قابل نہیں تھا۔ اگلی بار جب آپ کو اپنے پروڈکشن کوڈ میں ٹائپنگ کی غلطی نظر آتی ہے تو یہ راحت کا باعث بن سکتا ہے۔

60FPS پر یونٹس فی فریم پکسلز ہیں۔ اس کو تبدیل کریں اور طبیعیات بدیہی بن جاتی ہے۔ کشش ثقل 0.6px/فریم² ہے، چھلانگ کی رفتار −10px/فریم ہے۔ اگر آپ ریاضی کرتے ہیں تو، ٹیک آف کے تقریباً 0.28 سیکنڈ بعد، جمپ آرک کی چوٹی تقریباً 83 پکسلز ہوگی۔ 150 پکسلز اونچائی پر، پلے فیلڈ اسکرین کے نصف سے زیادہ حصہ لے گا۔

دنیا 6px/فریم (360px/s) پر سکرول کرنا شروع کرتی ہے اور 13 کی بالائی حد تک پہنچنے تک ہر فریم 0.001px/فریم حاصل کرتی ہے۔ یہ شروع ہونے والی رفتار سے صرف دو گنا زیادہ ہے۔ وہ ٹوپی اہم ہے: یہ وہ وعدہ ہے جو گیم کو ملے گا۔ سختلیکن کبھی نہیں ناممکن.

لیکن یہاں ایک تفصیل ہے جو زیادہ تر کلون یاد کرتے ہیں: چھلانگ کی اونچائی متغیر ہے۔ اس کوڈ پر ایک نظر ڈالیں جو اسپیس بار کو جاری کرتے وقت چلتا ہے۔

endJump: function () {
    if (this.reachedMinHeight &&
        this.jumpVelocity < this.config.DROP_VELOCITY) {
        this.jumpVelocity = this.config.DROP_VELOCITY;
    }
},

اسپیس بار کو تھپتھپانے سے ڈائنوسار ایک مختصر چھلانگ لگانے پر مجبور ہو جائے گا، جبکہ اسے نیچے رکھنے سے ڈائنوسار مکمل قوس میں سوار ہو جائے گا۔ کلید کو جلد چھوڑنے سے آپ کی اوپر کی رفتار بند ہو جائے گی، جس سے آپ کی چھلانگ چھوٹی ہو جائے گی (تاکہ آپ کم از کم اونچائی پر نہ پہنچیں اور کیکٹس میں گر جائیں)۔ ہوا میں نیچے تیر کو دبائیں setSpeedDrop گرنے کی رفتار کو تین گنا کر دیتا ہے، جس سے ڈایناسور دوبارہ زمین سے ٹکرانے اور تیزی سے صحت یاب ہونے دیتا ہے۔

دو چھوٹے میکینکس اور اچانک ایک بٹن والے گیم میں مہارت کی حد ہوتی تھی: شارٹ ہاپس، مکمل چھلانگیں، اور فوری سلام۔ یہی وجہ ہے کہ بہترین کھلاڑیوں کے کھیل آپ سے بالکل مختلف ہیں۔

فیئرنس انجن: گیمز کو آپ کو دھوکہ دینے سے انکار کیسے کریں۔

یہ کوڈ بیس کا میرا پسندیدہ حصہ ہے۔ کیونکہ کچھ بھی الگ نہیں ہے۔ آپ کر سکتے ہیں محسوس کہ گیم میں ہر رکاوٹ کو ایک چھوٹی کمپوزیشن قرار دیا جاتا ہے، اور کمپوزیشن منصفانہ اصولوں کے ایک سیٹ کو انکوڈ کرتی ہے۔ چھوٹے کیکٹس میں شامل ہیں:

{
    type: 'CACTUS_SMALL',
    width: 17,
    height: 35,
    multipleSpeed: 4,
    minGap: 120,
    minSpeed: 0,
    // ...
}

آئیے تیار کردہ کوڈ کے اندر اور کہیں اور چھپے ہوئے اصولوں کو کھولتے ہیں۔

اصول 1: پہلے 3 سیکنڈ خالی ہیں۔ CLEAR_TIME: 3000 اس بات کو یقینی بناتا ہے کہ رن کے پہلے 3 سیکنڈ میں کوئی رکاوٹیں پیدا نہ ہوں۔ یہ خودکار آن بورڈنگ ہے۔ گیم آپ سے کچھ پوچھے اس سے پہلے آپ کو کنٹرولز کو محسوس کرنے کا ایک لمحہ ملتا ہے۔

قاعدہ 2: کلسٹرز کو رفتار کی بنیاد پر گیٹ کیا جاتا ہے۔ کیکٹی زیادہ سے زیادہ گروپوں میں بنائی جا سکتی ہے۔ MAX_OBSTACLE_LENGTH: 3تاہم، یہ صرف اس صورت میں لاگو ہوتا ہے جب موجودہ رفتار رفتار کی حد سے زیادہ ہو۔ multipleSpeed (4 چھوٹے کیکٹس، 7 بڑے کیکٹس) کیوں؟ آپ کی چھلانگ کی وجہ سے فاصلہ دنیا کی رفتار سے بڑھ رہی ہے۔ قوس ایک مقررہ وقت تک چلتا ہے، لہذا زمین جتنی تیزی سے حرکت کرے گی، آپ ہر چھلانگ کے ساتھ اتنی ہی زیادہ زمین صاف کر سکتے ہیں۔

وسیع رکاوٹیں صرف اس وقت ظاہر ہوتی ہیں جب چھلانگ جسمانی طور پر اتنی لمبی ہو کہ رکاوٹ کو دور کر سکے۔ کھیل کبھی بھی ناقابل تسخیر دیواریں نہیں بناتا۔

قاعدہ 3: خلا بھی رفتار کے ساتھ پیمانہ ہوتا ہے۔ ہر رکاوٹ کے بعد فرق کا حساب تقریباً اس طرح کیا جاتا ہے: obstacleWidth × speed + minGap × 0.6پلس بے ترتیب پن۔ لہذا کھیل جتنی تیز ہوگی، آپ کو ردعمل کا اظہار کرنے کی گنجائش اتنی ہی زیادہ ہوگی۔ مشکل خود رفتار سے آتی ہے، غیر منصفانہ وقفہ کاری سے نہیں۔

قاعدہ 4: رکاوٹیں لگاتار تین بار ظاہر نہیں ہوتیں۔ پورے آپریشن میں مختلف خصوصیات ہیں۔

duplicateObstacleCheck: function (nextObstacleType) {
    var duplicateCount = 0;
    for (var i = 0; i < this.obstacleHistory.length; i++) {
        duplicateCount = this.obstacleHistory[i] == nextObstacleType ?
            duplicateCount + 1 : 0;
    }
    return duplicateCount >= Runner.config.MAX_OBSTACLE_DUPLICATION;
},

کے ساتھ MAX_OBSTACLE_DUPLICATION: 2اگر ایک ہی رکاوٹ کی قسم لگاتار تیسری بار ظاہر ہوتی ہے، تو جنریٹر ریکارڈ رکھتا ہے اور دوبارہ رول کرتا ہے۔ ہو سکتا ہے آپ نے اس اصول کو بالکل نہیں دیکھا ہو گا۔ یہ کلید ہے۔ آپ نے اس کی غیر موجودگی کو محسوس کیا ہوگا۔

قاعدہ 5: Pterosaurs دیر سے کھیل کے مالک ہیں۔ ترکیب کہتی ہے۔ minSpeed: 8.5اس کا مطلب ہے کہ یہ اس وقت تک ظاہر نہیں ہو سکتا جب تک کہ یہ اپنی زیادہ سے زیادہ رفتار کے 2/3 تک نہ پہنچ جائے۔ آپ تین میں سے کسی ایک اونچائی پر اڑتے ہیں (لہذا کبھی کبھی آپ چھلانگ لگاتے ہیں، کبھی آپ جھک جاتے ہیں، آپ کو 50 پکسلز پر فیصلہ کرنا ہوتا ہے)۔ یہ کبھی بھی ایک گروپ کے طور پر نہیں بنایا جاتا ہے (multipleSpeed: 999) اور خود speedOffset: 0.8اس کا مطلب یہ ہے کہ ہر پیٹروڈیکٹائل دنیا کے اسکرول سے قدرے تیز یا سست پرواز کرتا ہے۔ یہ آخری تفصیل آپ کی تال پر مبنی پٹھوں کی یادداشت کو بالکل اسی وقت توڑ دیتی ہے جب آپ آرام سے ہوں۔

یہ قواعد ہر گیم ڈیزائنر کو درپیش سوالات کا جواب دیتے ہیں۔ آپ ایک کھیل کیسے بناتے ہیں؟ مشکل بنا بنا بھی غیر منصفانہ? کھلاڑی "میں ہار گیا کیونکہ میں سست تھا" اور "میں ہارا کیونکہ کھیل غیر منصفانہ تھا" کے درمیان فرق محسوس کر سکتے ہیں۔ اور 10 سالوں اور کھربوں رنز میں، ڈائنوسار نے کبھی کسی کو بیوقوف نہیں بنایا۔

تصادم کا پتہ لگانا: ڈائنوسار چھ مستطیل ہیں۔

سادہ تصادم کا پتہ لگانے سے ڈائنوسار کو ایک ہی باؤنڈنگ باکس میں لپیٹ دیا جاتا ہے اور اوورلیپ کی جانچ ہوتی ہے۔ لیکن ڈائنوسار کو دیکھو۔ اس کی ٹھوڑی کے نیچے پھیلی ہوئی تھوتھنی، ایک دم اور ایک کٹا ہوا ہے۔ آپ کی ٹھوڑی کے نیچے خالی ہوا میں صرف ایک ڈبہ اور ایک کیکٹس آپ کو مار ڈالے گا، اور آپ خوفناک محسوس کریں گے۔

تو اصل ڈایناسور 6 خانے ہیں۔

Trex.collisionBoxes = {
    RUNNING: [
        new CollisionBox(22, 0, 17, 16),   // head
        new CollisionBox(1, 18, 30, 9),    // torso
        new CollisionBox(10, 35, 14, 8),   // legs
        new CollisionBox(1, 24, 29, 5),
        new CollisionBox(5, 30, 21, 4),
        new CollisionBox(9, 34, 15, 4)
    ],
    DUCKING: [
        new CollisionBox(1, 18, 55, 25)    // one long low box
    ]
};

چھ چھوٹے مستطیل جو ڈایناسور کے حقیقی سلیویٹ کا پتہ لگاتے ہیں (سر، دھڑ، پیٹ اور ٹانگوں کے نیچے جانے والے باکس کے قدم)۔ جب ڈایناسور بطخ کرتا ہے، تو پورے سیٹ کو ایک لمبے، کم باکس سے بدل دیا جاتا ہے۔

رکاوٹوں کو اسی طرح سنبھالا جاتا ہے۔ ایک چھوٹے کیکٹس کے تین خانے ہوتے ہیں جو اس کے دھڑ اور بازوؤں کے ساتھ ساتھ چلتے ہیں، اور ایک پٹیروسور پانچپروں اور چونچ کی پیروی کریں۔

یہ ہے کہ باکس اصل میں کیسا لگتا ہے، اصل سپرائٹ کے اوپر بنایا گیا ہے:

اصل تصادم کے خانے جو اسپرائٹس کے اوپر کھینچے گئے سورس کوڈ کے لیے ہیں: 6 چلتے ہوئے T-Rex کے لیے، 3 بڑے کیکٹس کے لیے، اور 5 ایک pterodactyl کے لیے۔

الگورتھم ایک کلاسک دو قدمی چیک ہے۔ سب سے پہلے، ایک تفصیلی لوپ جو ہر ڈایناسور باکس کا موازنہ ہر رکاوٹ والے باکس سے کرتا ہے صرف اس صورت میں جب وہ سستے بیرونی باکس ٹیسٹ میں کامیاب ہو جائے (کیا پورا مستطیل چھو رہا ہے؟) زیادہ تر معاملات میں تیز، درست جب یہ شمار ہوتا ہے۔ اگر کیکٹس کی سوئی بصری طور پر ڈائنوسار کے جبڑے کے نیچے سے گزرتی ہے تو آپ زندہ ہیں اور ہڈی آپ کی آنکھ سے ملتی ہے۔

یہ اس مہارت کا سب سے سستا ورژن ہے جسے فائٹنگ گیمز میں ہٹ باکسز اور زخم خانوں تک بڑھایا جا سکتا ہے۔ اس سبق میں ہم عام کریں گے: تصادم اس سے مماثل ہونا چاہئے جو کھلاڑی دیکھتا ہے، نہ کہ ریاضی کے لحاظ سے کوئی آسان چیز۔

نائٹ موڈ اور اسٹیج 7 کا چاند

700 پوائنٹس حاصل کریں (INVERT_DISTANCE: 700) اور دنیا الٹ گئی ہے: سیاہ آسمان، ہلکی زمین، ستارے۔ 12 سیکنڈ کے بعد (INVERT_FADE_DURATION: 12000)، دن قریب آتا ہے۔ نمبروں کے لحاظ سے، یہ صرف ایک کلاس ٹوگل کے علاوہ CSS طرز پیلیٹ الٹا ہے۔ لیکن دلچسپ حصہ وہ ہے جو آسمان میں ہوتا ہے۔

چاند ساکن پری نہیں ہے۔ سپرائٹ شیٹ میں 7 ورژن اور ان کے ذریعے کوڈ سائیکل ہوتے ہیں۔

NightMode.phases = [140, 120, 100, 60, 40, 20, 0];

ایکس سپرائٹ شیٹ پر، ایک پتلی ہلال کے چاند سے آدھے چاند تک مکمل ڈسک تک۔

چاند کے تمام سات مراحل سیدھے سپرائٹ شیٹ سے کوڈ کے ذریعہ بیان کردہ آفسیٹس پر کاٹے جاتے ہیں۔

ہر رات، چاند ایک قدم آگے بڑھتا ہے۔ ستارے اپنی رفتار سے بہتے ہیں (STAR_SPEED: 0.3)، رات کو parallax گہرائی کی ایک سرگوشی فراہم کرتا ہے، زمین سے آہستہ۔ براؤزر کی خرابی والے صفحے کو قمری کیلنڈر کی ضرورت نہیں تھی۔ سب کے بعد، کسی نے اسے بنایا، اور کسی نے سمجھا کہ اس طرح کی تفصیلات فعالیت اور آپ کی پسند کی چیز کے درمیان فرق ہے۔

سادہ نظروں میں چھپی چھوٹی خوشیاں

ذرائع سے کچھ اور نتائج جو تفصیل پر توجہ دیتے ہیں:

ڈینو پلک جھپکتا ہے۔ کھیل کے شروع ہونے کا انتظار کرتے ہوئے، بیکار ڈایناسور بے ترتیب وقفوں سے پلک جھپکائے گا۔ اور مستقل ہیں۔ MAX_BLINK_COUNT: 3اس کے کرنے کی تعداد کو محدود کریں۔ پلک جھپکنے کی تاخیر خود ہے۔ Math.ceil(Math.random() * Trex.BLINK_TIMING). گوگل پر کسی نے ڈائنوسار کی پلکوں کی بے ترتیب پن کو ایڈجسٹ کیا۔

آپ کا سکور ایک پکسل نہیں ہے۔ فاصلے کا میٹر اصل پکسلز کو منتقل کر دیتا ہے۔ COEFFICIENT: 0.025. تو 100 کے اسکور کا مطلب ہے کہ آپ نے 4,000 پکسلز دوڑے۔ ہر 100 پوائنٹس (ACHIEVEMENT_DISTANCE: 100)، سکور 4 دھڑکن فی سیکنڈ پر پلک جھپکتا ہے۔ یہ ایک چھوٹا سا ڈوپامائن میٹرنوم ہے جو گول نمبروں کو واقعات کی طرح محسوس کرتا ہے۔

کاؤنٹر اوور فلو کے بارے میں تھیٹریکل ہے۔ ڈسپلے پر ظاہر ہوتا ہے۔ MAX_DISTANCE_UNITS: 5 نمبر اگر آپ 99,999 سے تجاوز کرتے ہیں، تو آپ کا سکور بصری طور پر دوبارہ ترتیب دیا جائے گا۔ اندرونی کاؤنٹر فعال رہتا ہے، لیکن اوڈومیٹر کا اثر برقرار رہتا ہے، آرکیڈ کیبنٹ کو جان بوجھ کر خراج عقیدت۔

موبائل پلیئرز کو معذوری ملتی ہے۔ MOBILE_SPEED_COEFFICIENT: 1.2: کھیل تیزی سے چلتا ہے... ایک منٹ انتظار کریں۔ نہیں۔ بات یہ ہے کہ کسی نے شیشے کی کھڑکی پر انگوٹھے اور اسپیس بار پر انگلی کے درمیان فرق کو ناپا اور جواب کو مستقل کے طور پر انکوڈ کیا۔

دوبارہ شروع کرنا محفوظ ہے۔ حادثے کے بعد GAMEOVER_CLEAR_TIME: 750. جمپ کی کو 3/4 سیکنڈ تک دبانے سے گیم دوبارہ شروع نہیں ہوتا ہے۔ یہ آپ کی وجہ سے وہاں ہے۔ کرے گا اگر آپ مرنے پر اسپیس بار کو تھپتھپاتے ہیں اور فوری طور پر دوبارہ شروع کرتے ہیں، تو آپ اپنا سکور دیکھنے کا موقع کھو دیں گے۔ رحم کا ایک 750 ملی سیکنڈ کا عمل۔

آپ اپنے منصوبوں کے لیے کیا چوری کر سکتے ہیں۔

ڈایناسور گیم اپنی سخت رکاوٹوں کی وجہ سے ایک ماسٹر کلاس تھا۔ اسے چھوٹا ہونا چاہیے، فوری طور پر لوڈ کرنا، گیمنگ رگ سے لے کر $50 سیل فونز تک ہر چیز پر چلنا، اور ایک سیکنڈ سے بھی کم وقت میں کسی کے لیے سمجھ میں آنا تھا۔

ان رکاوٹوں کے تحت آپ جو تکنیکیں استعمال کرتے ہیں وہ تمام منصوبوں پر لاگو ہوتی ہیں۔

  • وقت کے لحاظ سے پیمانہ، فریم کے لحاظ سے نہیں۔ ڈیلٹا ٹائم شفٹنگ یہی وجہ ہے کہ گیمز ہارڈ ویئر میں منصفانہ ہیں۔

  • صلاحیتوں کے پیچھے گیٹ کی مشکل ہے۔ وسیع کلسٹر صرف اس صورت میں ظاہر ہوتے ہیں جب آپ انہیں چھلانگ لگا کر ہٹا سکتے ہیں۔ پلیئر سے پوچھیں کیا؟ کر سکتے ہیںاس کے مطابق بنایا گیا ہے۔

  • کھلاڑیوں کو خالی رن وے فراہم کریں۔ تین سیکنڈ کی خاموشی ٹیوٹوریل اسکرین سے بہتر کنٹرولز سکھاتی ہے۔

  • تنوع کو بڑھانا۔ تین لائنوں کی تاریخ کی جانچ یکجہتی کو روکتی ہے، جسے کھلاڑی صرف مبہم بوریت کے طور پر ہی سمجھ سکتا ہے۔

  • اپنے ہٹ باکسز کو ایماندار بنائیں۔ چھ مستطیلوں نے سلہیٹ سے مماثل ایک مستطیل کو شکست دی جس نے کھلاڑی کی آنکھ کو دھوکہ دیا۔

  • ان تفصیلات میں کوشش کریں جو آپ نہیں دیکھ سکتے۔ پلک جھپکنا، چاند کے مراحل، فضل کے ادوار کو دوبارہ شروع کرنا: اس میں سے کوئی بھی ضروری نہیں ہے، لیکن یہ سب محسوس کیا جاتا ہے۔ اب، 10 سال بعد، کروم ڈایناسور اس بات کا ثبوت ہے کہ عظیم گیمز کو تصویری حقیقت پسندانہ گرافکس یا 100GB انسٹال کی ضرورت نہیں ہے۔ آپ کو صرف سخت کنٹرول، منصفانہ اصول، ایک بٹن، اور چاند کے مراحل کو برقرار رکھنے کی ضرورت ہے۔ اب آپ جانتے ہیں کہ یہ اتنا اچھا کیوں لگتا ہے۔ کیونکہ، لائن بہ لائن، کسی کو یقین تھا کہ ایسا ہوگا۔

جا کر ماخذ پڑھیں۔ یہ انٹرنیٹ پر بہترین مفت گیم ڈیزائن کورسز میں سے ایک ہے، اور یہ پردے کے پیچھے تھا جب وائی فائی بدترین حالت میں تھا۔

اوپر تک سکرول کریں۔