جدول المحتويات:
- الخطوة 1: المواد
- الخطوة 2: تعرف على البرنامج - المجلس
- الخطوة 3: تعرف على البرنامج - Tile
- الخطوة 4: تعرف على البرنامج - اللعبة
- الخطوة 5: طرق مهمة - الحركة
فيديو: قم ببرمجة لعبة 2048 الخاصة بك مع جافا!: 8 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:35
بواسطة PranP1My (غير مكتمل) Site
أحب لعبة 2048. ولذا قررت أن أبرمج نسختي الخاصة.
إنها مشابهة جدًا للعبة الفعلية ، لكن برمجتها بنفسي تمنحني الحرية في تغيير ما أريد وقتما أريد. إذا كنت أريد لعبة 5 × 5 بدلاً من 4 × 4 النموذجية ، فإن التغيير البسيط باستخدام مُنشئ "اللوحة" سيسمح لي بالقيام بذلك. لنفترض أنني أريد أن أجعل اللعبة أكثر صعوبة ، بإضافة القطع في المواضع التي تجعلها أكثر تعقيدًا بالنسبة للاعب وليس بشكل عشوائي. باستخدام خوارزمية بسيطة ، يمكنني فعل ذلك. على الرغم من أنني لن أغطي كل هذه التعديلات في Instructable ، فإنني أخطط لإضافة المزيد أثناء التنقل.
لكن في الوقت الحالي ، سنبرمج لعبتك النموذجية لعام 2048.
هيا بنا نبدأ!
(ملاحظة جانبية: هذا Instructable يتطلب معرفة معتدلة بالبرمجة - خاصة مع Java)
الخطوة 1: المواد
لن تحتاج إلى الكثير لهذا المشروع لأنه مجرد تجول في البرمجة.
المواد:
- حاسوب محمول
- كسوف (أو أي IDE من اختيارك)
نعم. هذا كل شيء.
الخطوة 2: تعرف على البرنامج - المجلس
لقد قمت بتحميل كل الكود الخاص بي على GitHub - تحقق من ذلك هنا:
لقد قسمت اللعبة إلى 3 فئات: لوحة ، تجانب ، ولعبة.
مجلس:
الوصف: تتعامل فئة اللوحة مع لوحة الألعاب ، وتقوم بإعداد مجموعة من عناصر "المربعات" ، والحصول على الدرجة الحالية وأعلى قطعة ، ووضع المصفوفة في سلسلة (لاستخدامها لاحقًا في "اللعبة"). معظم المنطق موجود هنا أيضًا ، حيث يوفر الفصل طرقًا لتوليد 2 و 4 في مواقع عشوائية ، والتحرك لأعلى ولأسفل ولليسار ولليمين ، وإعلام اللاعبين عندما تنتهي اللعبة.
المنشئون:
/ * المُنشئ الافتراضي للوحة - يُنشئ مصفوفة 4x4 * /
لوحة عامة () {…}
/ * مُنشئ اللوحة - يُنشئ مصفوفة بحجم الشبكة المحدد * /
لوحة عامة (شبكات int) {…}
أساليب:
/ * طريقة Getter التي تُرجع اللوحة * /
تجانب عام getBoard () {…}
/ * طريقة Getter التي تُرجع النتيجة * /
getScore int العامة () {…}
/ * يبحث عن أعلى بلاطة على السبورة ويعيدها * /
getHighTile int العامة () {…}
/ * طباعة اللوحة على وحدة التحكم - لأغراض الاختبار * /
طباعة باطلة عامة () {…}
/ * إرجاع اللوحة كسلسلة - مستخدمة في واجهة المستخدم الرسومية * /
سلسلة toString العامة () {…}
/ * يولد 2 (أو 4) في مساحة فارغة في الوقت الذي يتم فيه التحرك * /
تفرخ الفراغ العام () {…}
/ * يتحقق لمعرفة ما إذا كانت اللوحة محجوبة تمامًا وإذا كانت كذلك ، فسوف تدفع اللاعبين لإعادة التشغيل * /
blackOut المنطقية العامة () {…}
/ * يتحقق لمعرفة ما إذا كانت اللعبة قد انتهت - عندما يتم تعتيم اللوحة ولا يمكن دمج أي من المربعات * /
gameOver المنطقية العامة () {…}
/ * يُستدعى عند الضغط على "w" أو سهم لأعلى - يستدعي "verticalMove" لكل بلاطة على السبورة مع المعلمة "up" * /
فراغ عام () {…}
/ * يتم الاتصال به عند الضغط على "s" أو السهم لأسفل - يستدعي "verticalMove" لكل بلاطة على اللوحة مع المعلمة "down" * / public void down () {…}
/ * يتم الاستدعاء عند الضغط على "d" أو السهم الأيمن - استدعاء "أفقي الحركة" لكل بلاطة على اللوحة مع المعلمة "right" * / public void right () {…}
/ * يتم الاستدعاء عند الضغط على "a" أو السهم الأيسر - استدعاء "الأفقي" لكل بلاطة على اللوحة مع المعلمة "يسار" * /
ترك فراغ عام () {…}
/ * يقارن قيمتي البلاط معًا وإذا كانت متطابقة أو إذا كانت واحدة تساوي 0 (بلاطة عادية) - تتم إضافة قيمها (بشرط أن تكون المربعات التي نقارنها عبارة عن قطعتين مختلفتين وتتحركان نحو الاتجاه المناسب) - يتحرك بشكل متكرر خلال الصف * /
نقل أفقي فارغ عام (int row ، int col ، string direction) {…}
/ * مقارنة قيمتي البلاط معًا وإذا كانت متطابقة أو إذا كانت واحدة تساوي 0 (بلاطة عادية) - تتم إضافة قيمها (بشرط أن تكون المربعات التي نقارنها عبارة عن قطعتين مختلفتين وتتحركان نحو الاتجاه المناسب) - يتحرك بشكل متكرر خلال العمود * /
نقل عمودي فارغ عام (int row ، int col ، string direction) {…}
نعم ، هذه طرق كثيرة - لكن لا تقلق ، فمعظمها سهل الفهم للغاية. علاوة على ذلك ، فإن فئة "Board" هي الأكثر تعقيدًا ، لذا فإن كل شيء بعد ذلك سيكون بسيطًا نسبيًا.
الخطوة 3: تعرف على البرنامج - Tile
البلاط:
الوصف: يتعامل فئة البلاط مع البلاط الفردي ، وهو الأصغر بين جميع الفئات. كل بلاطة لها قيمة ولون صحيحان. يحتوي على مُنشئين يقومان بإنشاء مربعات ذات قيمة 0 (افتراضي) أو قيمة #. معظم الأساليب تشرح نفسها بنفسها ، حيث تشكل أساليب "getter" و "setter" الجزء الأكبر من الإجمالي.
المنشئون:
/ * يُنشئ تجانبًا أساسيًا بقيمة 0 * /
مربع عام () {…}
/ * يُنشئ بلاطة بقيمة رقم * /
تجانب عام (رقم int) {…}
أساليب:
/ * الحصول على قيمة البلاط * /
public int getValue () {…}
/ * يضبط قيمة البلاط - تُستخدم عند إضافة مربعين معًا * /
setValue العامة الباطلة (قيمة int) {…}
/ * يمثل التجانب كسلسلة - مستخدمة في واجهة المستخدم الرسومية * /
سلسلة toString العامة () {…}
/ * يضبط لون البلاط بناءً على قيمته * /
setColor باطل عام () {…}
/ * الحصول على لون البلاط * /
getColor باطل عام () {…}
الخطوة 4: تعرف على البرنامج - اللعبة
لعبة
الوصف: تضم فئة اللعبة الطريقة الرئيسية ومعظم طرق واجهة المستخدم الرسومية والتفاعلات الرئيسية. يستغرق كلاً من فصول Tile و Board ، ويمكّنهما من العمل معًا.
المنشئون:
لا أحد
أساليب:
/ * إعداد واجهة المستخدم الرسومية بأحجام مناسبة وإضافة مستمع رئيسي * /
setUpGUI العامة باطلة ثابتة () {…}
/ * يتحقق لمعرفة ما إذا كان قد تم الضغط على مفتاحي الوسادة أو مفاتيح الأسهم ويقوم بالإجراءات المناسبة - يقوم بتحديث JFrame مع كل حركة * /
ضغط مفتاح عام باطل (KeyEvent e) {…}
/ * يرسم واجهة المستخدم الرسومية بسلسلة من الأوتار واللوحة والبلاط ويضمن إعادة طلاءها عند انتهاء اللعبة * /
طلاء الفراغ العام (الرسومات ز) {…}
/ * يرسم بلاطة فردية - تسمى من طريقة الطلاء * /
مربعات الرسم الفارغة العامة (رسومات g ، تجانب تجانب ، int x ، int y) {…}
/ * الطريقة الرئيسية - إعداد واجهة المستخدم الرسومية وبدء اللعبة * /
الرئيسي العام الثابت الفارغ (سلسلة وسائط) {…}
الخطوة 5: طرق مهمة - الحركة
تعتبر طرق الحركة هي الأكثر أهمية لفهمها ، ولكن الخبر السار هو أنه بمجرد فهمك للحركات الرأسية ، يمكنك تطبيق هذا الفهم على الحركات الأفقية. في الواقع ، فإن طرق الحركة العمودية الثلاثة هي نفسها تمامًا حركات الطريقة الأفقية الثلاثة ، باستثناء واحدة تتحرك عبر الصفوف والأخرى عبر الأعمدة. لهذا السبب ، دعنا نركز فقط على طرق الحركة العمودية.
نقل عمودي فارغ خاص (int row ، int col ، string direction)
{المربع الأولي = اللوحة [الحدود] [العمود] ؛ مقارنة البلاط = اللوحة [الصف] [العمود] ؛ if (initial.getValue () == 0 || initial.getValue () == Compar.getValue ()) {if (row> border || (direction.equals ("down") && (row <border))) {int addScore = initial.getValue () + Compar.getValue () ؛ إذا (initial.getValue ()! = 0) {الدرجة + = addScore ؛ } initial.setValue (addScore) ؛ قارن.setValue (0) ، }} else {if (direction.equals ("down")) {border--؛ } else {border ++؛ } VerticalMove (صف ، عمود ، اتجاه) ؛ }}
يتم استدعاء الطريقة أعلاه ، VerticalMove ، بواسطة طريقتي "up" و "down". دعنا نلقي نظرة على طريقة "up".
الفراغ العام ()
{for (int i = 0؛ i <grids؛ i ++) {border = 0 ؛ لـ (int j = 0؛ j <grids؛ j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j، i، "up") ؛ }}}}}
تمر هذه الطريقة عبر اللوحة بأكملها وتستدعي VerticalMove لكل بلاطة مع المعلمة "up". VerticalMove ثم يقارن التجانب الموجود في الموضعين "j" و "i" مع التجانب الموجود في الموضعين "الحدود" و "i". إذا كان الاثنان متساويين ، يتم الجمع بينهما. إذا لم تكن كذلك ، فسيتم زيادة تجانب الحدود بمقدار 1 (حيث تكون المعلمة في المكان "up") ، ويتم استدعاء VerticalMove مرة أخرى.
موصى به:
اصنع لعبة بونغ 1D الخاصة بك: 5 خطوات (بالصور)
اصنع لعبة 1D Pong الخاصة بك: بالنسبة لهذا المشروع ، سأوضح لك كيف قمت بدمج لوحة MDF مع أزرار الجرس ومصابيح LED و Arduino Nano من أجل إنشاء لعبة 1D Pong ممتعة حقًا للعب. على طول الطريق سأوضح لك كيفية إنشاء دائرة الإلكترونيات ومدى الاختلاف
وحدة تحكم لعبة Arduino Rhythm (للعبتي الخاصة): 6 خطوات
Arduino Rhythm Game Controller (للعبتي الخاصة): سأوضح لك في هذه التعليمات كيف أقوم ببناء وحدة التحكم في لعبة Rhythm Game من الصفر. يتضمن مهارات النجارة الأساسية ومهارات الطباعة ثلاثية الأبعاد الأساسية ومهارات اللحام الأساسية. ربما يمكنك بناء هذا المشروع بنجاح إذا لم يكن لديك أي شيء سابق
بدون لحام - تبديل لعبة ملائمة لذوي الاحتياجات الخاصة / الإعاقة: 7 خطوات (بالصور)
لا يوجد لحام - لعبة متكيفة بالتبديل لتلبية الاحتياجات الخاصة / الإعاقات: يأخذ تعديل اللعبة هذا لعبة تعمل بالبطارية ، يتم تنشيطها بمفتاح واحد ، ويضيف مفتاحًا خارجيًا إضافيًا. المفتاح الخارجي عبارة عن زر ضغط كبير التنسيق يسمح بإمكانية وصول أكبر ، من خلال تقديم l
قم بإنشاء الرسوم البيانية الخاصة بي لبيانات IOT الخاصة بي على Raspberry PI: 3 خطوات
قم بإنشاء الرسوم البيانية الخاصة بي لبيانات IOT الخاصة بي على Raspberry PI: يرجى القراءة إذا كنت تريد أن تكون قادرًا على إنشاء الرسوم البيانية الخاصة بك باستخدام 7 أسطر من التعليمات البرمجية ، أردت إنشاء مخططات لعرض البيانات بتنسيق رسومي من مستشعرات IOT الخاصة بي على صفحة الويب. في السابق ، لهذا الغرض ، كنت قد استخدمت خدمات جهات خارجية (بعضها من
قم ببرمجة جهاز الكمبيوتر الخاص بك لإيقاف التشغيل تلقائيًا عن طريق تحديد الوقت الذي تريده للقيام بذلك: 4 خطوات
قم ببرمجة جهاز الكمبيوتر الخاص بك لإيقاف التشغيل تلقائيًا عن طريق تحديد الوقت الذي تريده للقيام بذلك: مرحبًا ، هذه تعليمات أخرى مأخوذة من حياتي اليومية … في المرة الأخيرة التي اضطررت فيها إلى تنزيل الكثير من البرامج على جهاز الكمبيوتر الخاص بي واضطررت إلى السماح لها بالتنزيل بين عشية وضحاها ، لم أرغب في إبقاء جهاز الكمبيوتر الخاص بي قيد التشغيل طوال الليل بعد الانتهاء من التنزيلات وعند