Postać RPG
Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 58 z 61.
Wyzwanie
ŁatwyZbudujmy 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ęCharacterz dwoma polami typu integer:healthidamage. 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źnikattack: przyjmuje dwa wskaźniki do postaci (atakującego i celu) i zmniejsza zdrowie celu o wartość obrażeń atakującegois_alive: przyjmuje wskaźnik const do postaci i zwraca 1, jeśli zdrowie jest większe niż 0, w przeciwnym razie zwraca 0print_status: przyjmuje wskaźnik const do postaci i wyświetla jej zdrowie w formacieHealth: Xfree_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świetlHero wins!lubEnemy wins!, zależnie od tego, kto przeżył. Nie zapomnij zwolnić pamięci obu postaci.
Twój program otrzyma cztery dane wejściowe:
- Początkowe zdrowie bohatera
- Obrażenia zadawane przez bohatera w jednym ataku
- Początkowe zdrowie wroga
- 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
1Podstawy programowania modularnego
Pliki nagłówkoweZabezpieczenia przed wielokrotnym dołączeniemPliki źródłoweFunkcje statycznePodsumowanie: kalkulator modularny4Enkapsulacja
Koncepcja niejawnych wskaźnikówDefiniowanie niejawnych strukturGettery i setteryWalidacja w setterachPowtórka: tajemnicze pudełko2Obiekty i metody
Struktury jako obiektyWskaźnik „self”Poprawność constWskaźnik czy wartośćMetody pomocniczePodsumowanie: menedżer punktów5Projekt: Proste konto bankowe
Konfiguracja projektuImplementacja konta8Polimorfizm
Wskaźniki do funkcji w strukturachSymulowanie metodKoncepcja interfejsuImplementowanie interfejsówIteracja polimorficznaPodsumowanie: Greeter11Wzorce projektowe w C
Wzorzec SingletonWzorzec fabrykiWzorzec iteratoraPodsumowanie: fabryka loggera3Cykl życia obiektu
Wzorzec konstruktoraWzorzec destruktoraInicjalizacja na stosieKopia głębokaPodsumowanie: klasa opakowująca ciąg znaków6Dziedziczenie przez kompozycję
Osadzanie strukturZasada pierwszego elementuDostęp do elementów klasy nadrzędnejKonwersja w górę hierarchiiPodsumowanie: hierarchia kształtów9Projekt: Rysownik kształtów
Przegląd projektuImplementacja kołaImplementacja prostokątaZastosowanie polimorfizmuKontener kształtówPoćwicz samodzielnie: Kompilator C online