Git Product home page Git Product logo

cpp-pandemic-a's Introduction

פאנדמיק - שלב א

"כדי להתאמן בהתמודדות עם מגפות עולמיות, אנחנו צריכים משחקים" (ביל גייטס, 2015). אחד המשחקים שנוצרו כדי להתאמן בהתמודדות עם מגפות הוא פאנדמיק. זהו משחק לוח ל-2 עד 4 שחקנים, המשחקים במשותף כדי לרפא מחלות ולגלות תרופות.

במטלה זו נממש חלק מחוקי המשחק, עבור שחקן אחד בלבד.

הלוח

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

רשימת הערים, הצבעים והקשרים נמצאת גם בקובץ cities_map.txt - אפשר להשתמש בו לפי שיקול דעתכם. הקובץ נשלח ע"י אוריה אלפרין - תודה רבה!

במטלה זו, הלוח מיוצג ע"י המחלקה Board.

הקלפים

ישנם 48 קלפים - קלף אחד לכל עיר.

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

המחלות

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

במחלקה "לוח" יש לממש את השיטות הבאות (ראו בקבצי הדוגמה):

  • אופרטור סוגריים מרובעים [] - מקבל כפרמטר מזהה-עיר, ומאפשר לקרוא ולעדכן את רמת המחלה (=מספר קוביות המחלה) באותה עיר. לדוגמה: board[City::HongKong] = 2 מציבה שתי קוביות-מחלה אדומות בעיר הונג קונג.
  • אופרטור פלט - מציג את מצב הלוח בפורמט כלשהו לבחירתכם. מצב הלוח כולל את:
    • רמת המחלה בכל אחת מהערים;
    • התרופות שהתגלו עד כה (ראו הסבר למטה);
    • תחנות-מחקר שנבנו עד כה (ראו הסבר למטה).
  • is_clean - שיטה בוליאנית ללא פרמטרים, המחזירה "אמת" אם ורק אם כל הלוח נקי - אין שום קוביות מחלה.

השחקן

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

  1. נסיעה - drive - מעבר מהעיר הנוכחית לעיר סמוכה (בהתאם למפת הקשרים).
  2. טיסה ישירה - fly_direct - מעבר מהעיר הנוכחית לעיר של קלף כלשהו שנמצא בידו. כדי לבצע פעולה זו יש להשליך את הקלף המתאים לעיר שטסים אליה.
  3. טיסת זכיון - fly_charter - מעבר מהעיר הנוכחית לעיר כלשהי. כדי לבצע פעולה זו יש להשליך את הקלף המתאים לעיר שנמצאים בה.
  4. טיסת שאטל - fly_shuttle - אם בעיר הנוכחית ישנה תחנת-מחקר, אפשר לטוס לכל עיר אחרת שיש בה תחנת-מחקר.
  5. בנייה - build - בניית תחנת-מחקר בעיר שנמצאים בה. כדי לבצע פעולה זו יש להשליך את הקלף המתאים לעיר שנמצאים בה. בכל עיר יכולה להיות לכל היותר תחנת-מחקר אחת.
  6. גילוי תרופה - discover_cure - גילוי תרופה למחלה בצבע מסויים. כדי לבצע פעולה זו, יש להימצא בעיר שיש בה תחנת-מחקר, ולהשליך 5 קלפים בצבע של המחלה.
    • לכל מחלה יש תרופה אחת. אם כבר התגלתה תרופה למחלה, ומבצעים שוב פעולת "גילוי תרופה" לאותה מחלה, אין צורך לזרוק חריגה.
  7. טיפול במחלה - treat - הורדת קוביית-מחלה אחת מהעיר שנמצאים בה (הפחתת רמת המחלה ב-1).
    • אם כבר התגלתה תרופה למחלה בצבע של העיר, אז פעולת "ריפוי מחלה" מורידה את כל קוביות המחלה מהעיר שנמצאים בה (הפחתת רמת המחלה ל-0).
    • אם אין בכלל זיהום בעיר (רמת המחלה היא 0), אז הפעולה תזרוק חריגה.

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

בנוסף, יש לממש את השיטות הבאות:

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

הערות:

  • יכולים להיות שני שחקנים או יותר באותה עיר - לא קורה שום דבר מיוחד במצב זה.

תפקידים

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

  1. קצין מבצעים - OperationsExpert:יכול לבצע פעולת "בנייה" בכל עיר שהוא נמצא בה, בלי להשליך קלף-עיר מתאים.
  2. קצין תעבורה - Dispatcher: כשהוא נמצא בתחנת-מחקר, הוא יכול לבצע פעולת "טיסה ישירה" לכל עיר שהוא רוצה, ללא השלכת קלף-עיר.
  3. מדענית - Scientist: יכולה לבצע פעולת "גילוי תרופה" בעזרת n קלפים בלבד (במקום 5), כאשר הפרמטר n מועבר בבנאי (במשחק המקורי n=4).
  4. חוקרת - Researcher: יכולה לבצע פעולת "גילוי תרופה" בכל עיר - לא חייבת להיות בתחנת מחקר.
  5. פראמדיק - Medic: כשהוא מבצע פעולת "טיפול במחלה", הוא מוריד את כל קוביות-המחלה מהעיר שהוא נמצא בה, ולא רק אחת.
    • אם כבר התגלתה תרופה למחלה, הוא אוטומטית מוריד את כל קוביות-המחלה מכל עיר שהוא נמצא בה, גם בלי לבצע פעולת "טיפול במחלה".
  6. וירולוגית - Virologist: יכולה לבצע פעולת "טיפול במחלה", לא רק בעיר שהיא נמצאת בה, אלא בכל עיר בעולם - ע"י השלכת קלף של אותה העיר.
  7. פורסת גנים - GeneSplicer: יכולה לבצע פעולת "גילוי תרופה" בעזרת 5 קלפים כלשהם - לא דווקא מהצבע של המחלה.
  8. רופא שטח - FieldDoctor: יכול לבצע פעולת "טיפול במחלה" לא רק בעיר שהוא נמצא בה אלא בכל עיר סמוכה לעיר שהוא נמצא בה (ע"פ מפת הקשרים), בלי להשליך קלף עיר.

בשלב א עליכם לכתוב:

  • קובץ כותרת הכולל את כל הפונקציות הדרושות (ללא מימוש). שימו לב: הכותרות צריכות להיות נכונות בהתאם למה שנלמד בהרצאות - מומלץ לחזור על החומר לפני שמתחילים לכתוב.
  • בדיקות מקיפות לכל הפונקציות הדרושות.
    • אין צורך לבדוק את אופרטור הפלט - כיוון שלא הגדרנו את הפורמט.
    • אין צורך לבדוק מצבים לא חוקיים של פונקציית לקיחת הקלפים take_card.

כיתבו את כל הקבצים הדרושים כך שהפקודות הבאות יעבדו ללא שגיאות:

make demo1 && ./demo1
make demo2 && ./demo2
make test && ./test

מומלץ גם להריץ:

make tidy
make valgrind

אין לשנות קבצים קיימים אלא רק להוסיף קבצים חדשים.

בהצלחה

cpp-pandemic-a's People

Contributors

aloneshed avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.