יצירת משחק חדש

מאת: אראל

אל:

תגובה ל: שיבת ציון - משחק הרפתקאות ליחיד שנכתבה ב14:01:34  12.07.2005


[טיוטה]

המשחק "שיבת ציון" כתוב בשפה כללית, שמאפשרת ליצור בקלות משחקים חדשים.

כדי ליצור משחק חדש, יש ללחוץ על הכפתור " editgame ". ייפתח לפניכם חלון ובו תיבת-טקסט, שבה כתוב המשחק.

דף זה מסביר כיצד ניתן להשתמש בשפה ליצירת משחקים חדשים. 

כמה דגשים בקשר לתחביר

 

עמוד

כדי להתחיל לעבוד על עמוד חדש במפת המשחק, יש להשתמש בפקודה:

page column row

column, row מציינים את מיקומו של העמוד במפת המשחק.

 

למשל, הפקודה:

page 6 5

יוצרת עמוד ריק בטור 6 ובשורה 5 על מפת המשחק.

ניתן להגדיר קוד שירוץ כשהמשתמש ייכנס לעמוד הנוכחי או ייצא ממנו, ע"י הפקודות:

on_enter [code]

on_exit [code]

למשל, הפקודות הבאות:

page 6 5 

on_enter [bird, clickon] 
on_exit  [bird, clickoff]

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

ניתן להגדיר קוד שירוץ כל עוד המשתמש נמצא בעמוד הנוכחי, ע"י הפקודה:

while_inside [code]

למשל, הפקודות הבאות:

page 7 5 

while_inside [run laugh3]

יוצרות עמוד בטור 7 ובשורה 5; כל עוד השחקן יהיה בעמוד זה, תרוץ הפונקציה laugh3, שגורמת לשלושה ילדים לצחוק. פקודה זו מתאימה לעיר בית-לחם .

הפונקציה laugh3 מוגדרת בעזרת הפקודה function - ע' למטה.

ניתן להגדיר קוד איתחול עבור העמוד הנוכחי, ע"י הפקודה:

on_start [code]

הקוד ירוץ פעם אחת - בתחילת המשחק.

 

חפץ

כדי ליצור חפץ חדש בעמוד הנוכחי (העמוד האחרון שנוצר ע"י page ), יש להשתמש בפקודה:

object [x y] "shape

x, y מציינים את מיקומו של החפץ על העמוד הנוכחי (שימו לב לסוגריים).

type מציין את סוג החפץ - שיקבע איך החפץ ייראה על המסך, ואיך הוא ייראה ברשימת החפצים של השחקן ( inventory ). שימו לב - לא צריך לסגור גרשיים!

למשל, הפקודה:

object [200 100] "shekel

יוצרת שקל בקואורדינטות 200,100 על העמוד הנוכחי.

 

 

דמות

כדי ליצור דמות חדשה בעמוד הנוכחי (העמוד האחרון שנוצר ע"י page ), יש להשתמש בפקודה:

NPC [x y] "name [shape] size [conversation_command]

NPC = ראשי-תיבות של Non Player Character, כלומר - דמות שאינה מופעלת ע"י השחקן אלא ע"י המחשב (מושג מקובל במשחקי הרפתקאות).

x, y מציינים את מיקומה של הדמות על העמוד הנוכחי (שימו לב לסוגריים).

name מציין את שמה של הדמות. שימו לב - לא צריך לסגור גרשיים!

shape מציין את הצורה החיצונית של הדמות.

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

למשל, הפקודה:

npc [100 50] "Shalum [deaf1]

   [converse parse deaf_text "Hello]

יוצרת את דמותו של שלוּם, שצורתו היא deaf1, בקואורדינטות 100, 50   על העמוד הנוכחי.

הפקודה converse parse deaf_text… אומרת, שכאשר השחקן ידבר עם שלוּם, השיחה תתנהל על-פי מבנה השיחה שנקרא deaf_text (כדי להגדיר את מבנה השיחה יש להשתמש בפקודה text - ע' למטה).

המשך הפקודה - "Hello - מציין שהשיחה תתחיל מהשורה שמתחילה במילה Hello (ע' בסעיף הבא - דוגמה למבנה-שיחה מתאים). שימו לב - לא צריך לסגור גרשיים!

deaf1 היא אחת הצורות של אנשים חירשים במשחק "שיבת ציון".

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

npc [100 50] "Shalum [deaf1 deaf2]

   [converse parse deaf_text "Hello]

 

טקסט לשיחה

כדי ליצור מבנה לשיחה בין השחקן לבין דמות כלשהי, יש להשתמש בפקודה:

text "name [content]

name מציין את שם השיחה; צריך לתת שם לשיחה, כדי שיהיה אפשר לקשר בין הדמות לבין השיחה המתאימה (ע' למעלה - הפקודה  npc ). ניתן לקשר שיחה אחת לכמה דמויות שונות.

content מציין את תוכן השיחה. מבנה השיחות מוסבר כאן .

 

לדוגמה, הפקודה:

text "deaf_text [

   [|Hello, pl-please write on the sand because I can't hear. OK?|   

       [yes Fine!]   

       [no |Too bad…|]     ]

 

   [|Fine! you are a good man.|]

 

   [|Thanks for helping me! you are a good man.|]

]

יוצרת מבנה-שיחה פשוט בשם deaf_text

(זהו המבנה שהשתמשנו בו למעלה, בדוגמה של פקודת npc).

 

הערה

כדי שהתוכנית תהיה ברורה יותר, ניתן להכניס בה הערות, בעזרת הפקודה comment , למשל:

comment [comment-text]

בתוך הסוגריים המרובעים ניתן להכניס מה שרוצים (חוץ מאשר סוגריים מרובעים לא-מאוזנים), אפילו כמה שורות, למשל:

comment [This

  is    

  a

  comment

]

משתנה

ניתן להגדיר משתנים גלובאליים, שישפיעו על התקדמות המשחק. לשם כך יש להשתמש בפקודה:

make "variable_name initial_value

variable_name מציין את שם המשתנה. שימו לב - לא צריך לסגור גרשיים!

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

למשל:

make "number_of_horns 4

מגדירה משתנה מספרי בשם " number_of_horns " שערכו ההתחלתי הוא 4.

make "player_saw_a_horn "false

מגדירה משתנה בוליאני בשם " player_saw_a_horn " שערכו ההתחלתי הוא "שקר".

make "inventory []

מגדירה משתנה בשם " inventory " שערכו ההתחלתי הוא רשימה ריקה (זוהי רשימת החפצים של השחקן).

 

 

פונקציה

כדי להגדיר פונקציות חדשות (ללא פרמטרים) יש להשתמש בפקודה:

function "name [commands]

name - שם הפונקציה;

commands - הפקודות; ניתן להשתמש בכל פקודת-לוגו.

למשל:

function "randomize_olives [

  everyone [ ifelse random 100 > 70 [st] [ht] ]

]

 

מגדירה פונקציה בשם randomize_olives , שמשמשת לאתחול אקראי של הזיתים בהר-הזיתים.

כדי להבין את הפקודה יש ללמוד "לוגו".

כדי להריץ פונקציה שהוגדרה ע"י function, יש להשתמש בפקודה run, למשל:

run randomize_olives

ניתן להשתמש בפונקציות החדשות גם בגוף התוכנית, וגם במקומות שבהם דרושות פקודות (למשל בקוד onenter, onexit , וגם בתוך שיחות).

למשל, ניתן לכתוב את הפקודה ליצירת עמוד בהר-הזיתים כך:

page 9 7
on_enter [run randomize_olives]

משמעות הפקודה: "צור עמוד בטור 9 שורה 7 על מפת המשחק; בכל פעם שהשחקן נכנס לעמוד, הרץ את הפונקציה randomize_olives ".

תגובות