CodeGym /مدونة جافا /Random-AR /في البداية، كان هناك...
John Squirrels
مستوى
San Francisco

في البداية، كان هناك...

نشرت في المجموعة
في البدء كان... - 1 انتهت فترة اختبار وظيفتي الأولى منذ 3 سنوات، ولكن الآن فقط وجدت الوقت لكتابة مقال. أمضيت عامًا في أقسام مختلفة في جامعتي: في الفصل الدراسي الأول درست الإدارة، وفي الفصل الثاني تحولت إلى هندسة البرمجيات. كنت أتمنى أن يعلموني كيفية البرمجة، لكنني كنت مخطئا. لذلك، قمت بجمع المواد وقررت أن أتعلم كل شيء بنفسي. السبب الوحيد الذي يجعلني ممتنًا لمعلمي هو أنه أوصى بأن أبدأ بكتاب ستيفن برات الإلكتروني "لغة البرمجة C". إنه حقًا كتاب جيد يحتوي على الكثير من التمارين العملية. قضيت حوالي شهرين في تأليف الكتاب، وبعد ذلك عثرت على دورة Java عبر الإنترنت في مجموعات الأصدقاء، وهكذا بدأ الأمر. في البداية، خططت لأن أصبح مطورًا لنظام Android ، لكن الواجهة الخلفية بدت أكثر إثارة للاهتمام بالنسبة لي مع تقدمي في تعلمي. بالمناسبة، استغرق الأمر مني 3 أشهر من الدراسة للوصول إلى المستوى 20، وبعد ذلك قررت أن أحاول العثور على وظيفة. كان الأمر الأول في العمل هو الانتقال إلى مدينة أخرىنظرًا لأنه لم يكن لدي أي فرص لمطور Java مبتدئ. لقد وجدت شركة وتقدمت بطلب للحصول عليها وحصلت على مهمة اختبارية، وتم إعطائي أسبوعًا لإكمالها. كان علي أن أكتب تطبيق ويب بسيط باستخدام Hibernate وServlet/JSP وMySQL. بعد رؤية كل هذه المصطلحات، عرفت فقط أن MySQL هي قاعدة بيانات. في البداية، شعرت بخيبة أمل كبيرة. حتى أنني قررت البحث عن فرص عمل في بعض مطاعم كنتاكي، ولكن بعد ذلك قررت أن أقوم بمهمة الاختبار. بعد كل شيء، يمكنني دائمًا الحصول على وظيفة في كنتاكي. لقد عملت دون توقف طوال الأسبوع وتمكنت من إنهاء الاختبار. لقد قدمت الحل الخاص بي، لكنه "لم يكن جميلًا"، لذلك قمت بمراجعته 4 مرات أخرى. وتبين أن الحل الأخير الذي توصلت إليه كان صحيحًا، ولكن الوظائف الشاغرة قد تم شغلها بالفعل ولن يتم قبول الطلبات الإضافية لمدة 3 أشهر. ماذا ستفعل، أليس كذلك؟ خلال الأشهر الثلاثة التالية، تعلمت HTML وCSS وJS وSQL وPHP. لماذا PHP؟ كنت بحاجة إلى لغة خادم تستجيب للطلبات وما شابه. في ذلك الوقت، بدت servlets وjsp معقدة للغاية. في النهاية، قمت بإنتاج تطبيق ويب متكامل بواجهة رهيبة. لقد قمت بنشر الكود على GitHub لمحفظتي. بحلول هذا الوقت، مرت 3 أشهر واتصلت بي نفس الشركة مرة أخرى ودعتني لإجراء مقابلة، وكلفتني بمهمة بسيطة أخرى لاختبار معرفتي بـ SQL، والتي تمكنت من إكمالها في بضع ساعات. ألمح الشخص الذي كنت أتحدث معه عن التوظيف إلى أنه سيسألني عن الخوارزميات وهياكل البيانات، وهي موضوعات لم يكن لدي الوقت الكافي لإتقانها بعد. ومع ذلك، كان هناك 15 يومًا قبل المقابلة. حصلت على هذا! ساعدني كتاب روبرت لافور "هياكل البيانات والخوارزميات في جافا". لم يكن لدي الوقت لقراءة وفهم كل ذلك في أسبوعين، لكنني تعلمت الكثير. ثم جاء يوم المقابلة . وصلت في الوقت المحدد. استقبلني رجلان وبدأت المقابلة. القول بأنني كنت قلقًا سيكون بخسًا شديدًا. ارتعد صوتي. لقد سألوا عن كل شيء باستثناء الخوارزميات وهياكل البيانات. لقد سألوا عن Spring، DI، IoC، Hibernate، وكيف يعمل JVM، وكيف يعمل جامع البيانات المهملة - لم أتمكن من الإجابة على أي من هذه الأسئلة. لقد أجبت بنجاح فقط على الأسئلة المتعلقة بـ Java Core (المجموعات والاستثناءات وOOP وما إلى ذلك). بينما كنت لا أزال في المقابلة، علمت أنني فشلت فيها، لكنني مازلت أشعر بخيبة الأمل لعدم تلقي أي تعليقات. وبدلاً من ذلك، حددت الثغرات في معرفتي وبدأت العمل بجد لسدها. لقد وجدت وظيفة بعد شهر واحد من مقابلتي الفاشلة. بالمناسبة، وجدت الوظيفة الشاغرة في المناقشات حول CodeGym ( CodeGym هي النسخة الروسية من CodeGym - ملاحظة المحرر). أولاً، كانت هناك مقابلة عبر Skype مع مسؤول التوظيف (استمرت حوالي ساعتين). لقد سألوا عن Java Core، وجمع البيانات المهملة (الآن أعرف كيف تعمل)، وقواعد البيانات، وهياكل البيانات. طلب مني القائم بإجراء المقابلة مشاركة شاشتي وكتابة الآلة الحاسبة. كدت أبكي من الفرح، لأنني كتبت الآلة الحاسبة قبل أسبوع واحد فقط. واثقًا من نفسي، بدأت المهمة. ولكن سواء بسبب حماستي أو لسبب آخر، فقد نسيت جزءًا من الخوارزمية. تمت مشاركة شاشتي. كنت خائفًا من استشارة جوجل. ولحسن الحظ، كان لدي هاتف محمول، مما أنقذ مؤخرتي. في اليوم التالي، دعوا لإجراء مقابلة شخصية وبعد يومين تلقيت عرضًا . ولم يكن موقفا رسميا. كان دوري هو المتدرب لمالك وحيد. لقد كتبنا خدمة لتخطيط الأحداث وبيع التذاكر وما إلى ذلك. أتذكر أول يوم عمل لي. استغرق مديري 15 دقيقة لشرح ما يجب القيام به. "هل كل شيء واضح؟" سأل. "هممم، ليس حقًا. هل يمكنك مراجعة الأمر مرة أخرى؟" سألت بقلق كبير. وأوضح الرئيس كل شيء مرة أخرى. "هل أصبح واضحا الآن؟" "نعم، الآن هو." في الواقع، لم أفهم أي شيء. لكنني كنت أخشى أن أطلب تفسيرا آخر. أعتقد أن أي شخص موظف يمكنه فهم ذلك. تلخصت المهمة في النقل من Thymeleaf إلى AngularJS. لحسن الحظ، وجدت جزءًا من الكود النهائي واستخدمته كمثال لما يجب فعله. لم أفهم كيف يعمل الأمر، لكنني أنهيت المهمة. تم تكليفي بعد ذلك بمهام تتعلق مباشرة بالواجهة الخلفية. فقط بعد تجربة عملية مع الربيع بدأت أفهم ما قرأته في "الربيع للمحترفين". عملت هناك لمدة 8 أشهر ثم انتقلت إلى مدينة أخرى، حيث وجدت بسرعة وظيفة رسمية، وعملت لمدة عامين وغيرت لقبي من "مبتدئ" إلى "متوسط ​​المستوى" على طول الطريق. ثم واجهت حقيقة أن وظيفتي أصبحت روتينية ولم تمنحني قطرة من المتعة. لذلك أخذت استراحة. لمنع ضمور أصابعي أثناء فترة الاستراحة، قررت أن أجرب يدي في مجال آخر: تطوير اللعبة. وبشكل أكثر تحديدًا، تطوير ألعاب الهاتف المحمول، واختيار Android، لأنني أعرف Java بالفعل. وهذا ما سأتحدث عنه بالتفصيل الآن. فريقي. في وقت قصير، قمت بتجميع فريق صغير من 4 أشخاص (بما فيهم أنا): مطوران، ومصمم ألعاب، ومهندس صوت. نظرًا لعدم وجود أي شخص في الفريق لديه أي خبرة في تطوير الألعاب، ولأن وقت إجازتي كان محدودًا، قررنا تنفيذ مشروع بسيط سنتمكن بالتأكيد من إنهائه. وهكذا فعلنا! في البداية، كان الموعد النهائي هو 15 نوفمبر، ولكن كما تعلم، فإن إنهاء المشروع في الموعد المحدد هو أمر خاطئ تمامًا. لذلك، انتهينا من ذلك متأخرا أسبوعين. تتكون مجموعتنا التكنولوجية من Java 8 وlibGDX.

تطوير

بدأ التطوير في 17 أكتوبر. في المجمل، أمضينا 45 يومًا، خلالها:
  1. لقد تعلمنا كيفية استخدام libGDX.
  2. لقد كتبنا الكود.
  3. لقد أنشأنا الرسومات.
  4. لقد خلقنا الموسيقى.
قد يتساءل أي شخص شاهد اللعبة: "لماذا استغرقت كل هذا الوقت؟ اللعبة بسيطة للغاية." نعم، هذا صحيح، وعلى وجه الدقة، استغرق جزء التطوير (كتابة الكود) حوالي أسبوع ونصف. وباقي الوقت مقسم بين :
  1. إتقان كيفية استخدام محرك اللعبة.
  2. رسم وإعادة رسم الأعمال الفنية.
  3. كتابة الموسيقى.
  4. البحث عن الأصوات على https://freesound.org .
  5. قراءة أكوام من المقالات حول كيفية الترويج للألعاب.
لقد مررنا أيضًا بلحظات من "التوقف" لأسباب مختلفة: أجرى شخص ما امتحانًا، أو أجرى شخص آخر اختبارًا تعويضيًا، وما إلى ذلك. يمكننا بالتأكيد أن نعزو أسبوعًا ونصف أو أكثر إلى التوقف. تم قضاء بعض الوقت أيضًا في "المناقشات": ظهرت أفكار جديدة حول ما يجب إضافته إلى اللعبة يوميًا تقريبًا، لذلك تناقشنا: "هذا غير ضروري"، "هذا لن يناسب"، وما إلى ذلك. لقد طرحنا الكثير من الأفكار، على سبيل المثال، إضافة صراصير راكضة يمكن سحقها للحصول على نقاط إضافية: في رأيي، كان أحد أصعب الأمور هو اتخاذ قرار مسبق بما سيكون في اللعبة والالتزام بالخطة دون محاولة إضافة "واحد فقط آخر" " ميزة. هكذا تراكمت هذه الأيام الـ 45. أصبح النموذج الأولي للعبة جاهزًا بعد أسبوع ونصف. خلال هذه الفترة، لم يكن لدينا أي رسومات حقًا، لذلك أخذنا بعض الأشياء من المجال العام (على سبيل المثال، استعرنا خلفية ورقية من Doodle Jump) وقمنا بإخراج بعض الأشياء بأنفسنا في برنامج الرسام. في البداية كان هناك... - 2اللعبة بسيطة للغاية من الناحية الفنية. لم نكن بحاجة حتى إلى استخدام box2d (محرك فيزيائي). يمكننا التعامل مع الاصطدامات وحساب الوتر بأنفسنا. النقاط الأكثر إثارة للاهتمام التي سأسلط الضوء عليها هي:
  1. في البداية، تم إنشاء جميع عناصر اللعبة بشكل عشوائي. بمعنى آخر، قمنا بوضع مقدمي الخدمات (الثقوب السوداء، والمقص، ونجوم النينجا، ورصاص القلم الرصاص، والقلوب) في مصفوفة، وحصلنا على مزود عشوائي، وحصلنا على عنصر بإحداثيات عشوائية. وسرعان ما أصبح من الواضح أن هذا النهج "لم يكن جيدًا حقًا". أخبرنا الأصدقاء المشاركون في الاختبار بنفس الشيء، وأوصوا باستخدام القوالب. بالنسبة لأولئك المشاركين في تطوير الألعاب، ربما يكون هذا حلاً واضحًا. ولكن لأننا كنا قادمين جدد إلى هذا المجال، فقد كانت هذه نصيحة عملية للغاية بالنسبة لنا.

    لذلك أنشأنا عدة قوالب: وادي المقص؛ سلاسل الرصاص بالقلم الرصاص - من الرائع أن تجمعها بسرعة فائقة (بإصبعك)؛ ونموذج آخر لا أعرف ماذا أسميه — سأخبرك فقط بما أطلقنا عليه اسم الفصل في الكود الخاص بنا: StraightForwardPattern.

    في البداية كان هناك... - 3

    لقد حسنته هذه القوالب، لكنه أصبح قابلاً للتنبؤ به بطريقة أو بأخرى. ولهذا السبب أضفنا واحدًا آخر: قالب عشوائي. بمعنى آخر، لدينا الآن بعض القوالب "الثابتة" وواحد عشوائي (أدخل الميم "المتوازن تمامًا" هنا).

  2. هذه هي المشكلة الرئيسية التي واجهناها. يستدعي LibGDX طريقة العرض (دلتا العائمة) في حلقة لا نهائية. هذا هو المكان الذي يتم فيه رسم جميع العناصر. يتم رسم خط القلم الرصاص على النحو التالي: نحصل على إحداثيات الإصبع ونرسم الملمس هناك. لذلك، إذا حركنا إصبعنا عبر الشاشة بسرعة كبيرة، فسيكون هناك "فجوات" في السطر بسبب المللي ثانية بين استدعاءات طريقة العرض (دلتا).

    كان الحل بسيطًا جدًا: نتذكر الإحداثيات الأخيرة التي تم رسم النسيج فيها، ونحصل على الإحداثيات التالية، وإذا كانت المسافة بينهما أكثر من X ولم يتم تحرير الإصبع، فإننا نملأ الفجوة. في البداية، اعتقدنا أن هذا الخيار قد لا ينجح، لأن الخطوط ستكون زاوية. لكن مخاوفنا لم يكن لها أساس من الصحة، وكل شيء سار كما ينبغي.

حول اللعبة

لا تدعي طريقة اللعب أنها فريدة من نوعها، ولكنها جيدة جدًا ويمكن أن تجذب المستخدمين. يمكنك التحكم في قلم رصاص، والرسم حرفيًا على الورق وتفادي العوائق - المقص، ونجوم النينجا، والثقوب السوداء. في هذه الأثناء، ينفد قلم الرصاص الخاص بك وتحتاج إلى التقاط أقلام رصاص صغيرة. إذا كان قلم الرصاص الخاص بك على وشك الانتهاء قبل أن تجمع قلمًا صغيرًا، فيمكنك التقاط قطعة من المرآة. لبضع ثوان، بدلاً من استهلاك قلم الرصاص، سيتم استعادته، ومع ذلك، في الوقت نفسه، تنعكس عناصر التحكم - إذا تحرك إصبعك إلى اليسار، فإن قلم الرصاص يتجه إلى اليمين. يمكنك أيضًا التقاط قلب يتيح لك الاصطدام بالعائق مرة واحدة والبقاء على قيد الحياة. كلما قمت بتحريك القلم الرصاص دون رفع إصبعك لفترة أطول، كلما ارتفع مجموعك، مما يعني أنك ستجمع النقاط بشكل أسرع. في البداية كان هناك... - 4كما تزداد سرعة اللعبة تدريجيًا. الشيء الوحيد المفقود هو الطيور الغاضبة. في البداية، خططنا لتسمية اللعبة Karan Dash (الترجمة الصوتية للكلمة الروسية التي تعني قلم رصاص هي karandash — ها! فهمت ذلك؟)، لكننا غيرنا رأينا لاحقًا واستقرينا على لعبة Pencil Dash. لقد فعلنا ذلك لأن هذه التورية اللطيفة لن يفهمها إلا الجمهور الناطق بالروسية. لقد أطلقنا اللعبة منذ بضعة أيام ونقوم الآن بالترويج لها. وهنا أيضًا، لا أحد في الفريق لديه أي خبرة. لقد اكتسبنا كل معرفتنا حول الترويج للعبة من المقالات المختلفة. قمنا بنشر معلومات حول اللعبة على مواقع/منتديات مختلفة مجانًا. تضمنت قنواتنا المدفوعة الإعلان على 4pd، والإعلان مع مدون واحد، والعديد من المنشورات في المجموعات العامة على VKontakte، وإعلانات AdMob. بالمناسبة، يعد هذا المنشور أيضًا جزءًا من حملتنا الترويجية، لذا، بعد الحصول على إذن من إدارة الموقع، أقوم بتضمين رابط للعبة هنا. يمكنك العثور على اللعبة على Google Play هنا . سأكون ممتنًا إذا قمت بتثبيته (ربما يعجبك!)، وإذا تركت تقييمًا، أعدك بتسمية طفل باسمك! :) في البداية كان هناك... - 6
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION