מאפייה ללא קרואסונים היא ארגון פשע

תגיות:

אני רוצה לוודא כמה דברים:
1 - לא ברור לי מה עושה הפעולה של השוטר, בהתחשב בכך שהאזרחים מנצחים אם הם הצביעו לרוצח או אם השוטר עיקב את הרוצח, האם הכוונה שעיכוב משמעותו להוציא את השחקן מהמשחק (כמו רציחה) או שהשוטר חושד בו בסיבוב הנוכחי ואם הוא טעה השחקן נשאר?

2 - בגרסת המשחק שלנו יהיה רק איש מאפיה אחד ושוטר אחד, האם הכוונה שיש צורך לא לאפשר ליותר מ1 מכל אחד מהם או שרק להמחשה צריך להכניס שוטר אחד ואיש מאפיה אחד?

3 - איש המאפיה מנצח כאשר נשארים 2 משתתפים במשחק, האם הכוונה היא לאיש המאפיה ועוד איש אחד (שוטר או אזרח) או איש המאפיה ועוד 2 אנשים (שוטר ואזרח או 2 אזרחים)?

עריכה:
4 - מטרת המשחק היא שנחלק באופן רנדומלי מי שוטר ומי רוצח, בהתחלה לא שמתי לב לסעיף הזה ויצרתי מחלקת cop ומחלקת murderer. עכשיו כשהגעתי אליו, אני מבין שבעצם המחלקות האלו מיותרות כיוון שכולם מתחילים בתור אזרחים.
אבל הבעיה היא שאני רוצה לשמור את הפעולה kill רק לרוצח ואת detain רק לשוטר, ושלשאר לא תהיה גישה אליהן, אז אם כך האם עדיף לי להשתמש במחלקה אחת ולתת תנאי לכל פעולה (לבדוק את סוג השחקן), או שיש דרך יותר יעילה לחסום שחקן מלהחזיק בפעולה שלא תואמת לו?

  1. השוטר “מעכב” שחקן אחר בשביל לבדוק מה התפקיד שלו. אם הוא מצא את המאפיונר הוא מוציא אותו מהמשחק (ובהתחשב בכך שיש רק מאפיונר אחד, העיירה מנצחת והמשחק נגמר). אם הוא מצא אזרח רגיל, הוא אומר סליחה יפה (לא שוטר אמיתי כן) ומשחרר אותו לדרכו, ואז עוברים לשלב ההצבעה.
  2. במשחק רגיל אפשר לבחור כמה שחקנים יקבלו תפקיד של שוטר וכמה של איש מאפיה. הבחירה היא עדיין רנדומלית. תחשוב על ערימת קלפים עם תפקידים ויש קלף לכל שחקן, אתה רק בוחר בתחילת המשחק אילו קלפים להכניס לערימה (או כמה מכל קלף). המלצה שלי, תאפשר כל כמות שהמשתמש ירצה, וצור ברירת מחדל של אחד מכל אחד.
  3. אני פירשתי “שני שחקנים” כשני שחקנים, אבל אנחנו מעסקים פה בקוד ולא בפירוש חוקי משחק. עם כמה שזה כיף, לא זה עיקר התרגיל.
  4. החלוקה שלך ל מחלקות הגיונית ונכונה, זכור שזו מחברת על ירושה ואנחנו אכן לא רוצים שאזרח יוכל לעצור אנשים או ששוטר יוכל לרצוח. נסה לחשוב איך בחלוקת התפקידים אתה יוצר אובייקט של המחלקה המתאימה ולא רק משנה תכונה שלו.
    בהצלחה :grinning:
3 לייקים

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

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

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

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

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

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

self.dead_players.append(self.players.pop(self.players.index(victim)))

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

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

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

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

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

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

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

לייק 1

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

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

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