Skip to content

cpp-exercises/wargame-a

Repository files navigation

משחק מלחמה - שלב א

במטלה זו עליכם לתכנן משחק מלחמה לשני שחקנים על לוח מלבני.

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

רשימת החיילים והיכולות

  • FootSoldier - רגלי - יכול ללכת משבצת אחת לכל כיוון. יורה על החייל של האויב שנמצא הכי קרוב למקום שאליו הגיע לפי משפט פיתגורס (אם יש כמה - הוא יורה על אחד מהם שרירותית).
  • FootCommander - כמו רגלי, אבל כשהוא זז, לא רק הוא יורה אלא כל החיילים הרגלים של אותו שחקן יורים.
  • Sniper - צלף - יכול ללכת משבצת אחת לכל כיוון. יורה על החייל החזק ביותר של האויב - זה שיש לו הכי הרבה נקודות בריאות (אם יש כמה - הוא בוחר אחד מהם שרירותית).
  • SniperCommander - כמו צלף, אבל כשהוא זז, לא רק הוא יורה אלא כל הצלפים של אותו שחקן יורים.
  • Paramedic - חובש - יכול ללכת משבצת אחת לכל כיוון. לא יורה בכלל, אלא רק מרפא את כל החיילים של אותו שחקן שנמצאים במשבצת ליד המקום שאליו הגיע (מחזיר את מספר נקודות-הבריאות שלהם למספר ההתחלתי). לא מרפא את עצמו.
  • ParamedicCommander - כמו חובש, אבל כשהוא זז, כל החובשים של אותו שחקן מרפאים את החיילים שנמצאים לידם.

תכונות החיילים

  • FootSoldier: initial health points=100, damage per activity=10.
  • FootCommander: initial health points=150, damage per activity=20.
  • Sniper: initial health points=100, damage per activity=50.
  • SniperCommander: initial health points=120, damage per activity=100.
  • Paramedic: initial health points=100, health per activity=full.
  • ParamedicCommander: initial health points=200, health per activity=full.

מחלקות

בנוסף למחלקות המייצגות את סוגי החיילים השונים, אתם צריכים לממש את המחלקה Board המייצגת את לוח המשחק, בהתאם לכותרת שבקובץ Board.hpp.

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

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

תנועה

תנועה של דמות תבצע את השינוי הבא.

אם נקודות המוצא של השחקן היא (x,y).

אזי בתנועה up תשתנה ל (x+1,y).

ובתנועה right תשתנה ל (x,y+1).

היגיון הפוך עבור מטה, ושמאלה.

הגשה

כמו תמיד בשלב א יש לכתוב בדיקות-יחידה. הפקודות הבאות צריכות לרוץ בלי שגיאות:

make demo && ./demo
make test && ./test

כיוון שהמטלה ארוכה מהרגיל, במטלה זו אין צורך לבדוק את כל מקרי-הקצה, אלא רק את הדרישות הבסיסיות.

דגשים

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

מקורות

  • ההשראה למטלה היא ממטלה של גיל לוי בקורס "תיכנות מתקדם" שנת ה'תשע"ז.

About

Write a text-based war-game in C++

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages