Menu
Coddy logo textTech

RPG-Charakter

Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 58 von 61.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein RPG-Charakter-Kampfsystem erstellen — ein klassisches Beispiel, das Structs, Methoden, Konstruktoren und Objektinteraktion in einem sauberen, modularen Design vereint.

Sie werden Ihren Code über drei Dateien organisieren:

  • character.h: Definieren Sie einen Character-Struct mit zwei Integer-Feldern: health und damage. Deklarieren Sie die Funktionsprototypen für das Erstellen eines Charakters, das Ausführen eines Angriffs, das Überprüfen, ob ein Charakter am Leben ist, und das Ausgeben des Status eines Charakters.
  • character.c: Implementieren Sie Ihr Charaktersystem:
    • create_character — nimmt initiale Werte für Gesundheit und Schaden entgegen, reserviert einen Character auf dem Heap, initialisiert seine Felder und gibt einen Pointer zurück
    • attack — nimmt zwei Character-Pointer (Angreifer und Ziel) entgegen und reduziert die Gesundheit des Ziels um den Schaden des Angreifers
    • is_alive — nimmt einen const Character-Pointer entgegen und gibt 1 zurück, wenn die Gesundheit größer als 0 ist, andernfalls 0
    • print_status — nimmt einen const Character-Pointer entgegen und gibt die Gesundheit des Charakters im Format Health: X aus
    • free_character — gibt den reservierten Speicher frei
  • main.c: Erstellen Sie eine Kampfsimulation! Lesen Sie vier Integer ein, die Folgendes repräsentieren: Gesundheit des Helden, Schaden des Helden, Gesundheit des Gegners und Schaden des Gegners. Erstellen Sie beide Charaktere mit Ihrem Konstruktor. Simulieren Sie dann Kampfrunden — der Held greift zuerst an, dann greift der Gegner an (falls er noch am Leben ist). Fahren Sie fort, bis ein Charakter fällt. Geben Sie nach jeder Runde den Status beider Charaktere aus (zuerst Held, dann Gegner). Wenn der Kampf endet, geben Sie entweder Hero wins! oder Enemy wins! aus, je nachdem, wer überlebt hat. Vergessen Sie nicht, beide Charaktere freizugeben.

Ihr Programm erhält vier Eingaben:

  1. Startgesundheit des Helden
  2. Schaden des Helden pro Angriff
  3. Startgesundheit des Gegners
  4. Schaden des Gegners pro Angriff

Beispielhafte Ausgabe, wenn die Eingaben 50, 20, 30, 15 sind:

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

Beispielhafte Ausgabe, wenn die Eingaben 20, 5, 100, 25 sind:

Health: -5
Health: 95
Enemy wins!

Denken Sie daran, Include-Guards in Ihrer Header-Datei zu verwenden. Die Funktion attack demonstriert, wie ein Objekt den internen Zustand eines anderen Objekts verändern kann — ein Schlüsselkonzept im objektorientierten Design. Verwenden Sie const-Pointer angemessen für Funktionen, die Daten nur lesen.

Probier es selbst

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

int main() {
    // Eingabewerte lesen
    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: Helden- und Gegner-Charaktere mit create_character erstellen
    
    // TODO: Kampfrunden simulieren
    // - Held greift zuerst an
    // - Gegner greift an, falls er noch am Leben ist
    // - Status beider Charaktere nach jeder Runde ausgeben (zuerst Held, dann Gegner)
    // - Fortfahren, bis ein Charakter fällt
    
    // TODO: Gewinner ausgeben ("Hero wins!" oder "Enemy wins!")
    
    // TODO: Beide Charaktere freigeben
    
    return 0;
}

Alle Lektionen in Object Oriented Programming