CodeGym /בלוג Java /Random-HE /בהתחלה היה...
John Squirrels
רָמָה
San Francisco

בהתחלה היה...

פורסם בקבוצה
בהתחלה, היה ... - 1 תקופת המבחן של העבודה הראשונה שלי הסתיימה לפני 3 שנים, אבל רק עכשיו מצאתי זמן לכתוב מאמר. ביליתי שנה בחוגים שונים באוניברסיטה שלי: בסמסטר א' למדתי ניהול ובסמסטר ב' עברתי להנדסת תוכנה. קיוויתי שילמדו אותי לתכנת, אבל טעיתי. אז אספתי חומרים והחלטתי ללמוד הכל לבד. הסיבה היחידה שאני אסיר תודה למורה שלי היא שהוא המליץ ​​לי להתחיל עם הספר האלקטרוני של סטיבן פראט "The C Programming Language". זה באמת ספר טוב עם הרבה תרגילים מעשיים. ביליתי כחודשיים על הספר, ולאחר מכן נתקלתי בקורס Java המקוון הזה בקבוצות של חברים וכך זה התחיל. בהתחלה תכננתי להפוך למפתח אנדרואיד , אבל ה-backend נראה לי מעניין יותר ככל שהתקדמתי בלמידה שלי. אגב, לקח לי 3 חודשי לימוד להגיע לרמה 20, ולאחר מכן החלטתי לנסות למצוא עבודה. הצו הראשון היה לעבור לעיר אחרתמאחר שלי לא היו פתחים למפתח ג'אווה זוטר. מצאתי חברה, הגשתי בקשה וקיבלתי משימת מבחן שקיבלתי שבוע להשלים. הייתי צריך לכתוב יישום אינטרנט פשוט באמצעות Hibernate, Servlet/JSP ו-MySQL. כשראיתי את כל המונחים האלה, ידעתי רק ש-MySQL הוא מסד נתונים. בהתחלה התאכזבתי מאוד. אפילו החלטתי לחפש משרות פנויות באיזה KFC, אבל אז החלטתי לקחת פצח במשימה המבחן. אחרי הכל, תמיד יכולתי למצוא עבודה ב-KFC. עבדתי ללא הפסקה כל השבוע והצלחתי לסיים את המבחן. הגשתי את הפתרון שלי, אבל הוא "לא היה יפה", אז תיקנתי אותו 4 פעמים נוספות. הפתרון האחרון שלי התברר כנכון, אבל המשרות כבר אוישו ובקשות נוספות לא יתקבלו במשך 3 חודשים. מה אתה הולך לעשות, נכון? במשך 3 החודשים הבאים, למדתי HTML, CSS, JS, SQL ו-PHP. למה PHP? הייתי צריך שפת שרת שתענה לבקשות וכאלה. בזמנו, servlets ו-jsp נראו מסובכים מדי. בסופו של דבר, הפקתי אפליקציית אינטרנט מלאה עם ממשק נורא. פרסמתי את הקוד ב-GitHub עבור תיק העבודות שלי. בשלב זה עברו 3 חודשים ואותה חברה פנתה אליי שוב והזמינה אותי לראיון, תוך משימה פשוטה נוספת לבחון את הידע שלי ב-SQL, אותה הצלחתי להשלים תוך מספר שעות. האדם שדיברתי איתו על תעסוקה רמז שישאלו על אלגוריתמים ומבני נתונים - נושאים שעדיין לא הספקתי לשלוט בהם. עם זאת, היו 15 ימים לפני הראיון. יש לי את זה! ספרו של רוברט לאפור "מבני נתונים ואלגוריתמים בג'אווה" עזר לי. לא הספקתי לקרוא ולהבין הכל תוך שבועיים, אבל בכל זאת למדתי המון. ואז הגיע יום הראיון. הגעתי בשעה שנקבעה. שני גברים בירכו אותי והראיון התחיל. להגיד שאני מודאג יהיה אנדרסטייטמנט פרוע. הקול שלי רעד. הם שאלו על הכל חוץ מאלגוריתמים ומבני נתונים. הם שאלו על Spring, DI, IoC, Hibernate, איך ה-JVM עובד, איך עובד אוסף האשפה - לא הצלחתי לענות על אף אחת מהשאלות האלה. עניתי בהצלחה על שאלות לגבי Java Core (אוספים, חריגים, OOP וכו'). עוד בראיון ידעתי שנכשלתי בו, אבל עדיין התאכזבתי שלא קיבלתי שום משוב. במקום זאת, זיהיתי פערים בידע שלי והתחלתי לעבוד במרץ כדי לסגור אותם. מצאתי עבודה חודש לאחר הראיון הכושל שלי. דרך אגב, מצאתי את המשרה הפתוחה בדיונים על CodeGym ( CodeGym היא הגרסה בשפה הרוסית של CodeGym - הערת עורך). ראשית, היה ראיון בסקייפ עם מגייס (זה נמשך כשעתיים). הם שאלו על Java Core, איסוף אשפה (עכשיו ידעתי איך זה עובד), מסדי נתונים ומבני נתונים. המראיין ביקש ממני לשתף את המסך שלי ולכתוב מחשבון. כמעט בכיתי משמחה, מאחר שכתבתי מחשבון רק שבוע לפני כן. בטוח בעצמי, התחלתי במשימה. אבל אם בגלל ההתרגשות שלי או מסיבה אחרת, שכחתי חלק מהאלגוריתם. המסך שלי שותף. פחדתי להתייעץ עם גוגל. למרבה המזל, היה לי את הטלפון הנייד שלי, מה שהציל לי את התחת. למחרת הם התקשרו לראיון אישי וכעבור כמה ימים קיבלתי הצעה . זו לא הייתה עמדה רשמית. התפקיד שלי היה חניך לבעלים יחיד. כתבנו שירות לתכנון אירועים, מכירת כרטיסים וכו'. אני זוכר את היום הראשון שלי בעבודה. לבוס שלי לקח 15 דקות להסביר מה צריך לעשות. "הכל ברור?" הוא שאל. "הממ, לא ממש. אתה יכול לעבור על זה פעם נוספת?" שאלתי בדאגה רבה. הבוס הסביר הכל שוב. "עכשיו זה ברור?" "כן, עכשיו זה כן." בעצם, לא הבנתי כלום. אבל פחדתי לבקש הסבר אחר. אני חושב שכל אחד מועסק יכול להבין את זה. המשימה הסתכמה במעבר מ-Thymeleaf ל-AngularJS. למרבה המזל, מצאתי גוש של קוד מוגמר והשתמשתי בו כדוגמה למה לעשות. לא הבנתי איך זה עובד, אבל סיימתי את המשימה. לאחר מכן הוקצו לי משימות הקשורות ישירות ל-backend. רק לאחר התנסות מעשית עם אביב התחלתי להבין את מה שקראתי ב"אביב למקצוענים". עבדתי שם 8 חודשים ולאחר מכן עברתי לעיר אחרת, שם מצאתי עבודה רשמית במהירות, עבדתי שנתיים ושיניתי את התואר שלי מ"ג'וניור" ל"בינוני" בדרך. ואז התמודדתי עם העובדה שהעבודה שלי הפכה לשגרה ולא הסבה לי טיפת הנאה. אז לקחתי הפסקה. כדי למנוע מהאצבעות שלי להתנוון במהלך ההפסקה שלי, החלטתי לנסות את כוחי בתחום אחר: פיתוח משחקים. ליתר דיוק, פיתוח משחקים לנייד, איסוף אנדרואיד, מכיוון שכבר הכרתי את ג'אווה. ועל זה אני הולך לדבר עכשיו בהרחבה. הקבוצה שלי. בקיצור, הרכבתי צוות קטן של 4 אנשים (כולל אותי): 2 מפתחים, מעצב משחקים אחד ומהנדס סאונד אחד. מכיוון שלאף אחד בצוות לא היה ניסיון בפיתוח משחקים, ומכיוון שזמן החופשה שלי היה מוגבל, החלטנו ליישם פרויקט פשוט שבהחלט נוכל לסיים. וכך עשינו! בתחילה, המועד האחרון היה 15 בנובמבר, אבל כידוע, לסיים פרויקט על לוח הזמנים הוא פשוט שגוי. אז סיימנו את זה באיחור של שבועיים. מחסנית הטכנולוגיה שלנו כללה Java 8 ו-libGDX.

התפתחות

הפיתוח החל ב-17 באוקטובר. בסך הכל בילינו 45 ימים שבהם:
  1. למדנו איך להשתמש ב-libGDX.
  2. כתבנו קוד.
  3. יצרנו גרפיקה.
  4. יצרנו מוזיקה.
כל מי שראה את המשחק עשוי לשאול: "למה זה לקח כל כך הרבה זמן? המשחק כל כך פשוט". כן, זה נכון, ואם לדייק, חלק הפיתוח (כתיבת הקוד) ארך כשבוע וחצי. שאר הזמן התחלק בין:
  1. שליטה כיצד להשתמש במנוע המשחק.
  2. ציור ורישום מחדש של יצירות אמנות.
  3. כתיבת מוזיקה.
  4. מחפש צלילים ב- https://freesound.org .
  5. קורא ערימות של מאמרים על איך לקדם משחקים.
היו לנו גם רגעים של "השבתה" מסיבות שונות: למישהו היה בחינה, למישהו אחר עשו מבחן איפור וכו', בהחלט אפשר לייחס להפסקה שבוע וחצי ויותר. קצת זמן הושקע גם ב"דיונים": רעיונות חדשים לגבי מה להוסיף למשחק הופיעו כמעט מדי יום, אז התלבטנו: "זה מיותר", "זה לא יתאים" וכו'. זרקנו הרבה רעיונות, למשל, הוספת ג'וקים רצים שאפשר לרסק כדי לקבל נקודות נוספות: לדעתי, אחד הדברים הכי קשים היה להחליט מראש מה יהיה במשחק ולדבוק בתוכנית בלי לנסות להוסיף "רק עוד אחד " תכונה. כך הצטברו 45 הימים הללו. אב טיפוס של המשחק היה מוכן לאחר שבוע וחצי. במהלך התקופה הזו באמת לא הייתה לנו גרפיקה, אז לקחנו כמה דברים מהנחלה הציבורית (לדוגמה, השאלנו רקע נייר מ-Doodle Jump) וחיברנו כמה דברים בעצמנו ב-Paint. בהתחלה, היה ... - 2המשחק מאוד פשוט מבחינה טכנית. אפילו לא היינו צריכים להשתמש ב-box2d (מנוע פיזיקה). אנחנו יכולים להתמודד עם התנגשויות ולחשב את תת-המנוזה בעצמנו. הנקודות המעניינות ביותר שאדגיש הן:
  1. בתחילה, כל רכיבי המשחק נוצרו באופן אקראי. במילים אחרות, הכנסנו ספקים (של חורים שחורים, מספריים, כוכבי נינג'ה, עופרת עיפרון, לבבות) למערך, קיבלנו ספק אקראי, קיבלנו אלמנט עם קואורדינטות אקראיות. די מהר התברר שהגישה הזו "ממש לא ממש טובה". חברים שהשתתפו בבדיקה אמרו לנו את אותו הדבר, והמליצו להשתמש בתבניות. עבור העוסקים בפיתוח משחקים, זה כנראה פתרון ברור. אבל בגלל שהיינו חדשים לתחום, זו הייתה עצה מעשית מאוד עבורנו.

    אז יצרנו כמה תבניות: עמק של מספריים; מובילי עיפרון - זה די מגניב לאסוף אותם סופר מהיר (וווש, וואוש, וואו עם האצבע); ועוד תבנית אחת שאני לא יודע איך לקרוא לה - אני רק אגיד לך איך קראנו לכיתה בקוד שלנו: StraightForwardPattern.

    בהתחלה, היה ... - 3

    התבניות האלה שיפרו את זה, אבל זה הפך להיות צפוי מדי איכשהו. לכן הוספנו עוד אחת: תבנית אקראית. במילים אחרות, יש לנו עכשיו כמה תבניות "סטטיות" ואחת אקראית (הכנס כאן מם "מאוזן לחלוטין").

  2. הנה הבעיה העיקרית שנתקלנו בה. LibGDX קורא לשיטת render (float delta) בלולאה אינסופית. זה המקום שבו כל האלמנטים מצוירים. קו העיפרון מצויר באופן הבא: אנו מקבלים קואורדינטות של האצבעות ומציירים שם מרקם. לכן, אם נעביר את האצבע על פני המסך מהר מאוד, אז לקו היו "פערים" עקב האלפיות השניות בין קריאות לשיטת render(delta).

    הפתרון היה די פשוט: אנחנו זוכרים את הקואורדינטות האחרונות שבהן המרקם מצויר, מקבלים את הקואורדינטות הבאות, ואם המרחק ביניהן גדול מ-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