Coder Social home page Coder Social logo

coup-a's Introduction

קו - שלב א

קו (coup - הפיכה) הוא משחק קופסה עבור 2-6 שחקנים המשחקים אחד נגד השני כדי להישאר אחרונים על המגרש.

במטלה זו נממש חלק מחוקי המשחק.

חוקי המשחק

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

השחקן

לכל שחקן יש שם משלו.

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

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

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

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

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

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

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

  • coins השיטה מחזירה כמה מטבעות יש לשחקן

תפקידים

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

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

  2. מתנקש - Assassin: יכול להדיח שחקן מתפקידו בעלות 3 מטבעות בלבד (במקום 7). אולם, יש תפקיד היכול למנוע פעולה זו מהמתנקש. אם מתנקש נחסם השחקן שהודח בעקבות ההתנקשות חוזר למשחק.

  3. שגריר - Ambassador: יכול להעביר מטבע משחקן אחד לשחקן אחר בנוסף, השגריר יכול למנוע את פעולת הגניבה המפורטת בהמשך.

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

  5. רוזנת - Contessa: יכולה לחסום את פעולת ההתנקשות.

הערות:

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

  • אם שחקן מחזיק 10 מטבעות בתחילת תורו, הוא חייב לבצע הפיכה באותו תור

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

מהלך המשחק

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

יש לממש את השיטות

  1. תור - turn - הדפסת שם השחקן אשר תורו לשחק כעת.
  2. שחקנים פעילים - players - השיטה מחזירה את שמות השחקנים שפעילים כעת במשחק.
  3. מנצח - winner - השיטה מחזירה את שם המנצח. אם המשחק עדיין פעיל, השיטה תזרוק שגיאה.

חלק א: יש לכתוב:

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

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

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

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

make tidy
make valgrind

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

בהצלחה

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.