שימוש ב Data במשחקי מירוץ

שימוש ב data במשחקים נדרש לעיתים על מנת לפשט ולייעל משימות מסויימות. הנה דוגמא לכך : השבוע חשבתי לכתוב משחקון “משוגע” קצר של מכונית הנעה לאורך מסלול מירוץ כלשהוא וצריכה לאסוף 5 דונאלד טראמפים הפזורים לאורך המסלול בזמן הקצר ביותר האפשרי. בדרך, המכונית צריכה להזהר מ “הפרה המשוגעת” ורקדן הגנגנם סטייל.

מכונית נעה לאורך מסלול זה לא אתגר קשה מדי ב SceneMax3D פשוט טוענים את המסלול ,”זורקים” עליו מכונית ומכיילים מצלמה לעקוב אחריה. סיפור של 3 שורות קוד. לא יותר. משהוא בסגנון הזה:

t is a static track2
car is a hatchback vehicle : pos (0,6,0)
camera.chase car : trailing=true and vertical rotation =15

האתגר התכנותי במשחקון הזה היה להציב את הפרה, רקדן הגנגנם והטראמפים במקומות אקראיים לאורך המסלול. לשם כך נדרשו הצעדים הבאים:
1. ביצוע חד פעמי של נסיעת מבחן איטית לאורך המסלול והקלטת כל הנקודות בהן עברתי
2. שמירת הנקודות הללו בקובץ
3. פתיחת הקובץ והעתקת כל הנקודות המוקלטות למערך אחד ארוך בתוך תכנית המשחק
4. קריאה של 5 מיקומים אקראים מתוך המערך והצבת “טראמפ” בכל מיקום
5. קריאת מיקום אקראי מתוך המערך והצבת הפרה המשוגעת שם וכך גם לגבי רקדן הגנגנם

לשם ביצוע ההקלטה ושמירת המיקומים בקובץ כתבתי class חדש ב C# ובו שתי פונקציות:
1. פונקצית איסוף נקודות – צוברת את ה x,y,z הנתון לתוך משתנה סטטי מסוג string
2. פונקצית שמירה לקובץ – שומרת את התוכן של המשתני לתוך קובץ טקסט
כך נראות הפונקציות:

public void Track(float x, float y, float z) {
track+=x+","+y+","+z+","; 
}

public void Save() {
System.IO.File.WriteAllText(@"C:\dev\track.txt", track);
}

הפונקציה Track צוברת את הנתונים והפונקציה Save שומרת אותם בקובץ.
מתוך התכנית ב SceneMax3D יצרנו טיימר שקורא לפונקצית ה Track בכל שניה. ז”א שתוך כדי נסיעת המבחן, דגמנו את מיקום המכונית בכל שניה וצברנו אותו באמצעות הפונקציה Track.
בסיום נסיעת המבחן, קראנו לפונקציה Save והרי לנו קובץ עם נתוני המיקום של המכונית לאורך המסלול.
עם הנתונים הללו אפשר לעשות המון דברים לדוגמא:
א. להניע מכוניות לאורך המסלול
ב. להציב דמויות במיקומים אקראיים (כפי שעשינו במשחק הזה)
ג. להטיס מצלמת רחיפה לצילומים דינאמיים מזווית שונות
במקרה שלנו לקחנו את כל ה Data הזה והצבנו אותו בתוך מערך סטטי של double. זה נראה בערך ככה:

static double[] track = new double[] {0.0007467895,-5.671143,0.005862104,-0.0009969613,-5.471975,0.2241218,-0.02135887,-5.55441,0.5309632,-0.02154934,-5.554307,0.530955,-0.02119409,-5.554948,0.5309886,-0.02005673}

וכעת כל שנשאר הוא לבחור איזה שימוש לעשות עם הנתונים הללו. במשחקון הזה כאמור בחרנו לשלוף חמישה מיקומים אקראיים מתוך המערך וליצור שם “טראמפים”.

זאת הייתה דוגמא לשימוש ב Data במשחק. תחילה דגמנו ואספנו את הנתונים, לאחר מכן שמרנו אותם בקובץ ולבסוף העברנו אותם לגוף התכנית לשימוש במכניקת המשחק.

כתיבת תגובה

האימייל לא יוצג באתר.