דילוג לתוכן הראשי

איך לבנות פרוטוטייפ של משחק diamondDiggerSaga באמצעות Phaser ו-Typescript



אני אוהב את הבלוג של עמנואל פרונטו: http://www.emanueleferonato.com/
במיוחד אני אוהב את הפורמט של בניית פרוטוטייפ של משחק ופרסום הקוד שלו.
מאחר ובזמן האחרון אני עובד הרבה עם פייזר, באופן טבעי אני מתעניין בפוסטים שלו שעוסקים בפייזר ויש לו כבר די הרבה prototypes של משחקים שהוא כתב ב-Phaser. רק מה, הוא כותב ב-javascript וכל הקוד שלו כתוב בעמוד אחד ארוך.
אז החלטתי לקחת את אחד מאבות הטיפוס שהוא כתב ולכתוב את הקוד מחדש בקלאסים של Typescript. זה יותר מאורגן ככה ויותר קל לעיכול לדעתי (גם אם יותר ארוך קצת).
בסרטון למעלה אפשר לראות את התוצאה כפי שצילמתי אותה בפעולה - גם בטלפון וגם במחשב.
מפתיע לראות כמה קל לכתוב את הקוד הזה, שמהווה בסיס לכל כך הרבה משחקים מוכרים וטובים.
אז בואו נקפוץ ישר לקוד:

אני מציג את הקוד באמצעות codepen רק מטעמי נוחות. אל תצפו לראות את זה עובד כאן, זה רק כדי להציג את הקוד ולאפשר להעתיק ממנו בקלות. יש טאבים של HTML, CSS, TypeScript. אפשר ללחוץ כדי לראות כל אחד מהם.
ה-HTML מכיל את כל הקישורים לקבצי ה-javascript השונים (שנוצרים מהקימפול של ה-TypeScript), ה-CSS רק מאפס כמה דברים (מוריד שוליים ומגדיר שה-div שבו נמצא המשחק מתפרס על 100% משטח המסך) וב-Typescript נמצאים כל הקלאסים שבהם אני משתמש (מוצגים כאן ברצף, אבל במציאות הם מופרדים לקבצים בודדים, כמו שרואים ב-HTML.
אגב, כדאי שכפתור ה-Result ב-codepen יהיה כבוי כדי לראות את הקוד בכל המסך.

אם תרצו לראות את הפרוטוטייפ בפעולה תלחצו כאן.
להלן הסבר קצר על הקוד:
ה-nameSpace שבחרתי הוא DiamondDigger כשם המשחק המקורי. זה ה-module שמכיל את כל הקלאסים.

  1. הקלאס הראשי נקרא באותו שם והוא יורש מ-Game של Phaser. מטרתו היא ליצור את המשחק ולהפעיל את ה-State שנקרא Boot.
  2. הקלאס Boot יורש מ-State של Phaser והוא דואג ל-2 דברים:
    1. לדאוג לכך שהמשחק יוצג במלואו בכל מסך (ע"י ה-ScaleManager)
    2. להוסיף למשחק 2 States שנקראים Preloader ו-Game ולהפעיל את Preloader.
  3. הקלאס Preloader גם כן יורש מ-State והוא דואג ל-2 דברים:
    1. לטעון spritesheet שזאת למעשה תמונה אחת שמכילה את כל סוגי הכדורים (3)
    2. להפעיל את ה-State שנקרא Game
  4. הקלאס Game הוא לב המשחק.

הקוד של Game  מכיל הערות ושמות משמעותיים, כך שהוא די מסביר את עצמו, אבל הנה בכל זאת הסבר קצר:
לאחר שיצרנו את מטריצת הכדורים, ברגע שמשתמש לוחץ על כדור (שיכול כמובן להיות כל צורה אחרת) מופעל אלגוריתם בשם flood fill  כדי להעלים את כל הכדורים מאותו הסוג.
ברגע שכדור נעלם הוא משאיר "חור" בלוח המשחק. הפונקציה holesBelow  מחשבת לנו כמה "חורים" (או מקומות ריקים) יש מתחת לכדור נתון. ברגע שיודעים את זה, אפשר להעביר את אותו כדור באנימציית tween למקום החדש. בנוסף, יש tween נוסף שמעביר לנו כדורים חדשים מלמעלה אל תוך המקום הריק שנוצר.




עד כאן להפעם.
את הקוד השלם ניתן להוריד מכאן.
את המשחק המקורי ניתן לשחק כאן.
לפוסט המקורי של עמנואל פרונטו.

תגובות

פוסטים פופולריים מהבלוג הזה

כלים לפיתוח משחקים בלי ידע בתכנות

מאחר ויש לי די הרבה נסיון בהדרכת תכנות למתחילים (ובפרט בתחום פיתוח משחקים) אני מתעניין כל הזמן בכלים טובים עם ערך מוסף גם לפיתוח משחקים מהיר וגם ללמידה של תכנות על הדרך. לאחרונה החלטתי לפתוח קורס\חוג מקומי לנוער שילמד פיתוח משחקים לחסרי נסיון, או בעלי נסיון בסיסי בתכנות וזה הוביל אותי לבדוק באופן יותר מעמיק אילו כלים קיימים כרגע שעשויים לתמוך בקורס כזה. אחד הקריטריונים החשובים לדעתי בבחינת כלים כאלה היא עד כמה אפשרי ונוח ליצור באמצעותם משחקי HTML5 שאפשר בקלות לפרסם באתר עצמאי, או באתרי מפיצים, כי לשם אני מאמין שהתעשיה הולכת. לכן, קודם כל הלכתי וחיפשתי רשימת השוואה למנועי משחק שמאפשרים ליצור משחקי HTML5 והגעתי לרשימה הזאת. אפשר לראות כאן גם frameworks כמו Phaser, שמאפשרות בניית משחק ע"י תכנות בלבד וגם כלים כמו Construct 2 שלא מצריכות ידע בתכנות בכלל ונותנות ממשק גרפי עם אפשרויות בחירה והזנת פרמטרים מסוגים שונים על מנת להגיע לאותן תוצאות. מנסיוני יש 2 אסכולות של מפתחים: 1. כאלה שבאו מרקע של תכנות פרופר (מדעי המחשב) - מעדיפים לתכנת הכל באמצעות עורכי קוד למיניהם...

קונסטרקט 3 - הכלי הכי אפקטיבי שאני מכיר לפיתוח משחקים קטנים-בינוניים

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

איך להתמצא בממשק של קונסטרקט 3 התוכנה המעולה לפיתוח משחקי מחשב

היי, הפעם אסביר איך להתמצא בממשק של קונסטרקט, איך מורכב המסך הראשי, מהם התפריטים העיקריים שבהם אני משתמש וגם כמה קיצורי מקלדת שימושיים. קודם כל אם אף פעם לא עבדתם עם Construct 3 – שווה להסתכל על מסך הפתיחה של התוכנה (מה שנקרא שם Start page ). בחלק העליון יש כפתורי פתיחת פרויקט חדש, או ישן, משמאל יש גישה לתבניות ופרויקטים לדוגמא, במרכז יש משחקים שלמים שאפשר להיכנס ולראות איך הם בנויים ולמטה חומרי הדרכה מסוגים שונים. בקיצור – כמעט כל מה שדרוש כדי להתחיל לעבוד עם התוכנה נמצא בהישג יד מתוך המסך הזה. משהו שחשוב לדעת לגבי שמירה ופתיחה של פרויקטים בקונסטרקט - ישנם 3 אפשרויות לשמירת פרויקט (וכנ"ל לפתיחה): 1.       CLOUD – הממשק של קונסטרקט מאפשר שמירה ישירות באחד מ-3 שירותי ענן – Dropbox, OneDrive, Google Drive . אם יש לכם חשבון באחד באלה – החיים שלכם יהפכו מאד קלים ופרודוקטיביים בעבודה עם קונסטרקט. תוכלו למעשה לפתוח את הפרויקט שלכם מכל מקום בכל זמן ולהמשיך לעבוד עליו. אני למשל מלמד תלמידים בכיתת מחשבים. בסיום השיעור הם שומרים את מה שעבדו ע...