Menu
Coddy logo textTech

Postać RPG

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

challenge icon

Wyzwanie

Łatwy

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

Rozmieścisz swój 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 drukowania jej statusu.
  • character.c: Zaimplementuj system postaci:
    • create_character: przyjmuje początkowe wartości zdrowia i obrażeń, alokuje postać 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 stały wskaźnik do postaci i zwraca 1, jeśli zdrowie jest większe od 0, w przeciwnym razie zwraca 0
    • print_status: przyjmuje stały wskaźnik do postaci i drukuje jej zdrowie w formacie Health: X
    • free_character: zwalnia zaalokowaną pamięć
  • main.c: Stwórz symulację bitwy! Wczytaj cztery liczby całkowite oznaczające: zdrowie bohatera, obrażenia bohatera, zdrowie wroga i obrażenia 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 odpowiada atakiem. Oba ciosy są zadawane w tej samej rundzie, więc kontratak wroga nadal trafia, nawet jeśli atak bohatera obniżył jego zdrowie do zera lub poniżej. Kontynuuj, aż jedna z postaci padnie. Po każdej rundzie wydrukuj status obu postaci (najpierw bohatera, potem wroga). Po zakończeniu bitwy wydrukuj Hero wins! albo Enemy wins!, zależnie od tego, kto przetrwał. Pamiętaj, aby zwolnić pamięć 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: 20
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 dołączania w pliku nagłówkowym. Funkcja attack pokazuje, jak jeden obiekt może modyfikować wewnętrzny stan innego obiektu: to kluczowe pojęcie w projektowaniu obiektowym. Odpowiednio używaj wskaźników const 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 polegnie
    
    // 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