Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

شخصية RPG

جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 58 من 61.

challenge icon

التحدي

سهل

لنقم ببناء نظام قتال RPG Character — وهو مثال كلاسيكي يجمع بين الهياكل (structs)، والأساليب (methods)، والمنشئات (constructors)، وتفاعل الكائنات في تصميم نظيف ومعياري.

ستقوم بتنظيم الكود الخاص بك عبر ثلاثة ملفات:

  • character.h: قم بتعريف هيكل Character مع حقلين من نوع الأعداد الصحيحة: health و damage. صرح عن النماذج الأولية للوظائف (function prototypes) لإنشاء شخصية، وتنفيذ هجوم، والتحقق مما إذا كانت الشخصية على قيد الحياة، وطباعة حالة الشخصية.
  • character.c: قم بتنفيذ نظام الشخصيات الخاص بك:
    • create_character — يأخذ قيم الصحة والضرر الأولية، ويخصص ذاكرة لـ Character في الـ heap، ويهيئ حقوله، ويعيد مؤشرًا (pointer).
    • attack — يأخذ مؤشرين من نوع Character (المهاجم والهدف)، ويقلل صحة الهدف بمقدار ضرر المهاجم.
    • is_alive — يأخذ مؤشر Character ثابتًا (const) ويعيد 1 إذا كانت الصحة أكبر من 0، وإلا يعيد 0.
    • print_status — يأخذ مؤشر Character ثابتًا (const) ويطبع صحة الشخصية بالتنسيق Health: X.
    • free_character — يحرر الذاكرة المخصصة.
  • main.c: قم بإنشاء محاكاة للمعركة! اقرأ أربعة أعداد صحيحة تمثل: صحة البطل، ضرر البطل، صحة العدو، وضرر العدو. أنشئ كلتا الشخصيتين باستخدام المنشئ الخاص بك. ثم قم بمحاكاة جولات القتال — يهاجم البطل أولاً، ثم يهاجم العدو (إذا كان لا يزال على قيد الحياة). استمر حتى يسقط أحد الشخصيات. بعد كل جولة، اطبع حالة كلتا الشخصيتين (البطل أولاً، ثم العدو). عندما تنتهي المعركة، اطبع إما Hero wins! أو Enemy wins! بناءً على من نجا. لا تنسَ تحرير ذاكرة كلتا الشخصيتين.

سيتلقى برنامجك أربعة مدخلات:

  1. صحة البطل عند البداية
  2. ضرر البطل في كل هجوم
  3. صحة العدو عند البداية
  4. ضرر العدو في كل هجوم

مثال على المخرجات عندما تكون المدخلات 50، 20، 30، 15:

Health: 35
Health: 10
Health: 20
Health: -10
Hero wins!

مثال على المخرجات عندما تكون المدخلات 20، 5، 100، 25:

Health: -5
Health: 95
Enemy wins!

تذكر استخدام حراس التضمين (include guards) في ملف الرأس (header file). توضح وظيفة 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;
}

جميع دروس Object Oriented Programming