Menu
CoddyTech

Postać RPG

Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 58 z 61.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system walki dla postaci RPG: klasyczny przykład łączący struktury, metody, konstruktory i interakcje między obiektami w przejrzystym, modułowym projekcie.

Rozmieść kod w trzech plikach:

  • character.h: Zdefiniuj strukturę Character z dwoma polami typu integer: health i damage. Zadeklaruj prototypy funkcji służących do tworzenia postaci, wykonywania ataku, sprawdzania, czy postać żyje, oraz wyświetlania jej statusu.
  • character.c: Zaimplementuj system postaci:
    • create_character: przyjmuje początkowe wartości zdrowia i obrażeń, alokuje pamięć dla postaci na stercie, inicjalizuje jej pola i zwraca wskaźnik
    • attack: przyjmuje dwa wskaźniki do postaci (atakującego i celu) i zmniejsza zdrowie celu o wartość obrażeń atakującego
    • is_alive: przyjmuje wskaźnik const do postaci i zwraca 1, jeśli zdrowie jest większe niż 0, w przeciwnym razie zwraca 0
    • print_status: przyjmuje wskaźnik const do postaci i wyświetla jej zdrowie w formacie Health: X
    • free_character: zwalnia zaalokowaną pamięć
  • main.c: Stwórz symulację walki! Wczytaj cztery liczby całkowite oznaczające: zdrowie bohatera, obrażenia zadawane przez bohatera, zdrowie wroga i obrażenia zadawane przez wroga. Utwórz obie postacie za pomocą konstruktora. Następnie przeprowadź symulację rund walki: w każdej rundzie najpierw atakuje bohater, a potem wróg kontratakuje. Jeśli atak bohatera obniży zdrowie wroga do zera lub mniej, wróg zostaje pokonany i nie kontratakuje w tej rundzie. Kontynuuj, aż jedna z postaci polegnie. Po każdej rundzie wyświetl status obu postaci (najpierw bohatera, potem wroga). Po zakończeniu walki wyświetl Hero wins! lub Enemy wins!, zależnie od tego, kto przeżył. Nie zapomnij zwolnić pamięci obu postaci.

Twój program otrzyma cztery dane wejściowe:

  1. Początkowe zdrowie bohatera
  2. Obrażenia zadawane przez bohatera w jednym ataku
  3. Początkowe zdrowie wroga
  4. Obrażenia zadawane przez wroga w jednym ataku

Przykładowe wyjście dla danych wejściowych 50, 20, 30, 15:

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

Przykładowe wyjście dla danych wejściowych 20, 5, 100, 25:

Health: -5
Health: 95
Enemy wins!

Pamiętaj, aby użyć strażników nagłówka w pliku nagłówkowym. Funkcja attack pokazuje, jak jeden obiekt może modyfikować stan wewnętrzny innego obiektu — to kluczowa koncepcja w projektowaniu obiektowym. Używaj wskaźników const odpowiednio w funkcjach, które tylko odczytują dane.

Spróbuj swoich sił

#include <stdio.h>
#include "character.h"

int main() {
    // Wczytaj wartości wejściowe
    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: Utwórz postacie bohatera i wroga za pomocą create_character
    
    // TODO: Symuluj rundy walki
    // - Bohater atakuje pierwszy
    // - Wróg atakuje, jeśli nadal żyje
    // - Wyświetl stan obu postaci po każdej rundzie (najpierw bohatera, potem wroga)
    // - Kontynuuj, aż jedna z postaci padnie
    
    // TODO: Wyświetl zwycięzcę ("Hero wins!" lub "Enemy wins!")
    
    // TODO: Zwolnij pamięć obu postaci
    
    return 0;
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C online