חלוקת פרוייקט גדול לקבצים

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

var time=60

track is a static track2
car is a gtr_nismo vehicle : pos (0,2,0)
camera.chase car : trailing=true

timer = {
  time=time-1
  sys.print "Time: "+time : pos (0,0,0) and font "yoshi"

  if(time==0) {
    sys.print "Game Over" : pos (300,300,0)
    stop
  }
}

run timer every 1 second

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

במקום לשים את כל הקוד הזה בקובץ אחד (קובץ main) אפשר לחלק אותו למספר קבצים לדוגמא: בואו נעביר את כל טעינת המודלים לקובץ נפרד –
ניצור קובץ חדש תחת התקיה של המשחק – נקרא לו load_game
נעביר לקובץ load_game את הפקודות שטוענות את המסלול והמכונית ואת מצלמת המעקב:

track is a static track2
car is a gtr_nismo vehicle : pos (0,2,0)
camera.chase car : trailing=true

ואז נחבר את הקובץ load_game לתכנית הראשית בקובץ main באמצעות הפקודה add code:

var time=60

add "load_game" code

timer = {
  time=time-1
  sys.print "Time: "+time : pos (0,0,0) and font "yoshi"

  if(time==0) {
    sys.print "Game Over" : pos (300,300,0)
    stop
  }
}

run timer every 1 second

כעת, כל קוד שקשור בטעינת משאבים למשחק יכול להיכתב ישירות בקובץ load_game
הדבר הבא שנרצה לעשות זה להעביר את כל אסטרטגיית ניהול זמן המשחק לקובץ נפרד –
ניצור קובץ חדש בשם game_timer תחת תקיית המשחק.
נעביר לתוכו את הפרוצדורה שמטפלת במדידת הזמן של המשחק:

timer = {
  time=time-1
  sys.print "Time: "+time : pos (0,0,0) and font "yoshi"

  if(time==0) {
    sys.print "Game Over" : pos (300,300,0)
    stop
  }
}

ואז נחבר אותו לתכנית הראשית בקובץ main:

var time=60

add "load_game" code
add "game_timer" code

run timer every 1 second

באופן הזה אנו מחלקים את התכנית לחלקים הגיוניים שקל יותר לתחזק אותם. שימו לב שישנה חשיבות למקום בו נשים את פקודת ה add code . הגיוני שטעינת המשאבים תהיה בהתחלה מפני שקטעי הקוד הבאים ישתמשו באותם משאבים וכך גם הוספנו את הקוד שמטפל בשעון המשחק לפני שקראנו לפקודה
run timer every 1 second
מפני שהפרוצדורה timer הוגדרה שם.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *