דמות RPG
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 58 מתוך 61.
אתגר
קלבואו נבנה מערכת קרב של דמות RPG: דוגמה קלאסית המשלבת מבנים, מתודות, בנאים ואינטראקציה בין אובייקטים בעיצוב נקי ומודולרי.
תארגנו את הקוד שלכם בשלושה קבצים:
character.h: הגדירו מבנהCharacterעם שני שדות של מספרים שלמים:healthו-damage. הכריזו על אבות הטיפוס של הפונקציות ליצירת דמות, לביצוע התקפה, לבדיקה אם דמות עדיין בחיים ולהדפסת המצב של דמות.character.c: ממשו את מערכת הדמויות:create_character: מקבלת ערכים התחלתיים של בריאות ונזק, מקצה זיכרון לדמות בערימה, מאתחלת את השדות שלה ומחזירה מצביעattack: מקבלת שני מצביעים ל-Character (תוקף ומטרה), ומפחיתה מבריאות המטרה את הנזק של התוקףis_alive: מקבלת מצביע const ל-Character ומחזירה 1 אם הבריאות גדולה מ-0, אחרת מחזירה 0print_status: מקבלת מצביע const ל-Character ומדפיסה את הבריאות של הדמות בפורמטHealth: Xfree_character: משחררת את הזיכרון שהוקצה
main.c: צרו סימולציה של קרב! קראו ארבעה מספרים שלמים המייצגים את הבריאות של הגיבור, את הנזק של הגיבור, את הבריאות של האויב ואת הנזק של האויב. צרו את שתי הדמויות בעזרת הבנאי שלכם. לאחר מכן דמו את סבבי הקרב: בכל סבב הגיבור תוקף ראשון, ואז האויב משיב בהתקפה. אם התקפת הגיבור מורידה את בריאות האויב לאפס או פחות, האויב מובס ואינו משיב בהתקפה באותו סבב. המשיכו עד שאחת הדמויות מובסת. לאחר כל סבב, הדפיסו את המצב של שתי הדמויות (הגיבור תחילה, ואז האויב). כשהקרב מסתיים, הדפיסו אתHero wins!או אתEnemy wins!, בהתאם למי ששרד. אל תשכחו לשחרר את הזיכרון של שתי הדמויות.
התוכנית שלכם תקבל ארבעה קלטים:
- הבריאות ההתחלתית של הגיבור
- הנזק של הגיבור בכל התקפה
- הבריאות ההתחלתית של האויב
- הנזק של האויב בכל התקפה
פלט לדוגמה כאשר הקלטים הם 50, 20, 30, 15:
Health: 35
Health: 10
Health: 35
Health: -10
Hero wins!פלט לדוגמה כאשר הקלטים הם 20, 5, 100, 25:
Health: -5
Health: 95
Enemy wins!זכרו להשתמש במגיני הכללה בקובץ הכותרת שלכם. הפונקציה attack מדגימה כיצד אובייקט אחד יכול לשנות את המצב הפנימי של אובייקט אחר: זהו רעיון מרכזי בתכנון מונחה עצמים. השתמשו כראוי במצביעי const עבור פונקציות שרק קוראות נתונים.
נסו בעצמכם
#include <stdio.h>
#include "character.h"
int main() {
// קרא את ערכי הקלט
int hero_health, hero_damage, enemy_health, enemy_damage;
scanf("%d", &hero_health);
scanf("%d", &hero_damage);
scanf("%d", &enemy_health);
scanf("%d", &enemy_damage);
// TODO: צור דמויות של הגיבור והאויב באמצעות create_character
// TODO: הדמה סבבי קרב
// - הגיבור תוקף ראשון
// - האויב תוקף אם הוא עדיין בחיים
// - הדפס את מצב שתי הדמויות אחרי כל סבב (קודם הגיבור, אחר כך האויב)
// - המשך עד שאחת הדמויות נופלת
// TODO: הדפס את המנצח ("Hero wins!" או "Enemy wins!")
// TODO: שחרר את שתי הדמויות
return 0;
}
כל השיעורים ביחידה תכנות מונחה עצמים
4כימוס
המושג של מצביעים אטומיםהגדרת מבנים אטומיםפונקציות Get ו-Setאימות ב-Settersסיכום: הקופסה הסודית2אובייקטים ומתודות
מבנים כאובייקטיםמצביע 'Self'נכונות constמצביע לעומת ערךמתודות עזרחזרה: מנהל נקודות5פרויקט: חשבון בנק פשוט
הגדרת הפרויקטמימוש החשבוןתרגלו בעצמכם: קומפיילר C אונליין