This article is currently in the process of being translated into Hebrew (~97% done).
Introduction
סיכום מהיר של המאמר ההקדמי הזה: אנחנו נממש את המשחק Snake הקלאסי ב-WPF, והתוצאה הסופית תיראה כמו משהו כזה:
ליצור משחקים זה לעתים הסיבה שהרבה אנשים, בעיקר צעירים, נמשכים לכיוון למידת תכנות. אבל השאלה היא בדרך כלל: איך אני מתחיל ומה אני צריך? ובכן, אתם צריכים שפת תכנות, כמו C#, C++ או כל אחת משפות התכנות הפופולריות האחרות, ואם אתם בקיאים בשפה המועדפת עליכם, אתם לא ממש צריכים משהו אחר: רק תתחילו מהתחתית בכך שתוסיפו פיקסלים למסך, ובנקודה כלשהי, אולי יהיה לכם משחק עובד.
אף על פי כן, רוב האנשים יעדיפו טיפת עזרה עם הדברים ברמה-הנמוכה. למה להוסיף פיקסלים למסך ידנית אם יש ספרייה או מסגרת שיכולה לעשות את זה בשבילך, כך שתוכלו להתמקד בבניית משחק מבדר? יש הרבה מסגרות בחוץ שיכולות לעזור לכם לעשות את זה, ולמעשה, אחת מהן היא מסגרת ה-WPF.
WPF היא לא הבחירה הכי ברורה מאליה כשאתה רוצה ליצור משחקים - היא אכן Framework שמתרכזת בעיקר ביצירת ממשקי משתמש לאפליקציות עסקיות. אך עדיין, יש הרבה אלמנטים במסגרת ה-WPF שאתם יכולים להשתמש בהם כדי ליצור משחק, ואולי חשוב במידה שווה: אתם משיגים את כל המנגנונים לציור ושליטת חלון ב-Windows.
אז, אם אתם מחפשים ליצור משחק פשוט, WPF אולי באמת תהיה בחירה בסדר. לפחות היא תעזור מאוד עבור כל ההיבטים הפשוטים, כמו יצירת חלון, ציור של אזור פשוט למשחק, וכו'. אם אתם רוצים להוסיף דברים כמו גרפיקות תלת-ממדיות מורכבות ועצמים שזזים במהירות, אולי תצטרכו עוד עזרה מספרייה/מסגרת אחרת, אבל היא תהיה בסדר גמור עבור משחק פשוט - לדוגמה, משחק Snake קלאסי!
SnakeWPF
כהוכחת היתכנות, החלטתי ליצור גרסה מבוססת-WPF של משחק ה-Snake המאוד קלאסי. היא תשתמש בחלון WPF רגיל כאזור במשחק שלה, וגם בבקרי/צורות WPF רגילים כדי ליצור את מהלך המשחק. הסיבה שאני בחרתי ב-Snake היא כי זה די קל לממש (אין הרבה לוגיקה לתכנת) וכי זה יכול להיות ממומש עם צורות גאומטריות פשוטות כמו ריבועים ועיגולים, שיכולות להיות משומשת מאוד בקות עם מסגרת ה-WPF. אבל גם כי זה עדיין משחק ממש מצחיק, למרות הטבע הפשטני שלו!
אם אתם לא מכירים את משחק ה-Snake, אני יכול רק להניח שאף פעם לא היה לכם טלפון נוקיה בשנות ה-90 המאוחרות/שנות ה-2000 המוקדמות. הגרסה הראשונה של Snake נרשמה והודגמה הרבה שנים לפני זה, אבל זה הפך ללהיט גדול כשנוקיה החליטה לכלול את הגרסה שלהם על כך הטלפונים שלהם.
מהלך המשחק הוא פשוט כמו שהוא מבדר: אתם מזיזים נחש וירטואלי בכיוון אחד (שמאל, ימין, מעלה או מטה) בחיפוש אחר אוכל (לפעמים תפוח). כשהנחש שלכם פוגע בתפוח, הוא נאכל, והנחש שלכם גדל ותפוח חדש מופיע על המסך. אם אתם פוגעים בקירות או בזנב הנחש שלכם, המשחק נגמר ואתם צריכים להתחיל מההתחלה. ככל שאתם אוכלים יותר תפוחים, הניקוד שלכם יהיה גבוה יותר אבל יהיה קשה יותר לא לפגוע בזנב של עצמכם.
יש *הרבה* וריאציות למהלך המשחק - לדוגמה, המהירות שבה הנחש שלכם זז לרוב תגבר עם כל פעם שאתם אוכלים תפוח, כך שזה יותר ויותר קשה, אבל לא כל מימושי Snake יעשו את זה. וריאציה אחרת היא הקירות - יש מימושים שמרשים לכם לעבור דרך הקיר והחוצה מהצד השני, בזמן שבמימושים אחרים המשחק ייפסק ברגע שאתם פוגעים בקיר.
ב-SnakeWPF שלנו, הקירות קשים (הנחש מת אם הוא פוגע בהם), והמהירות תגדל באופן אקספוננציאלי עבור כל תפוח שאתם אוכלים, עד לנקודה מסוימת.
Summary
לאורך המאמרים האחדים הבאים, אנחנו נממש גרסה נחמדה של משחק ה-Snake הקלאסי בעזרת מסגרת ה-WPF. אנחנו נתחיל מהרקע במאמר הבא, ובסוף, יהיה לנו את המשחק מבוסס-ה-WPF הראשון, המתפקד לגמרי שלנו.
בבקשה שימו לב שאמנם זו *כן* הדרכת WPF, אנחנו נצטרך טיפה יותר קוד C# מבדרך כלל, כדי לממש את לוגיקת המשחק וכו'. אני אנסה להסביר את רוב זה בזמן שאנחנו מתקדמים, אבל במקרה שאתם צריכים טיפה יותר מידע על C#, אל תשכחו שיש לנו הדרכת C# שלמה נחמדה במערכת שלנו!