Postać RPG
Część sekcji Programowanie obiektowe ścieżki C w Coddy. Lekcja 58 z 61.
Wyzwanie
ŁatwyStwó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ęCharacterz dwoma polami typu integer:healthidamage. 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źnikattack: przyjmuje dwa wskaźniki do postaci (atakującego i celu) i zmniejsza zdrowie celu o wartość obrażeń atakującegois_alive: przyjmuje stały wskaźnik do postaci i zwraca 1, jeśli zdrowie jest większe od 0, w przeciwnym razie zwraca 0print_status: przyjmuje stały wskaźnik do postaci i drukuje jej zdrowie w formacieHealth: Xfree_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 wydrukujHero wins!alboEnemy wins!, zależnie od tego, kto przetrwał. Pamiętaj, aby zwolnić pamięć 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: 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
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