Menu
Coddy logo textTech

RPG-Charakter

Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 58 von 61.

challenge icon

Aufgabe

Einfach

Lass uns ein RPG-Charakter-Kampfsystem entwickeln: ein klassisches Beispiel, das Strukturen, Methoden, Konstruktoren und Objektinteraktion in einem sauberen, modularen Design zusammenführt.

Du wirst deinen Code auf drei Dateien verteilen:

  • character.h: Definiere eine Character-Struktur mit zwei ganzzahligen Feldern: health und damage. Deklariere die Funktionsprototypen zum Erstellen eines Charakters, Ausführen eines Angriffs, Überprüfen, ob ein Charakter am Leben ist, und Ausgeben des Status eines Charakters.
  • character.c: Implementiere dein Charaktersystem:
    • create_character: nimmt anfängliche Gesundheits- und Schadenswerte entgegen, reserviert einen Character auf dem Heap, initialisiert seine Felder und gibt einen Zeiger zurück
    • attack: nimmt zwei Character-Zeiger (Angreifer und Ziel) entgegen und reduziert die Gesundheit des Ziels um den Schaden des Angreifers
    • is_alive: nimmt einen const-Character-Zeiger entgegen und gibt 1 zurück, wenn die Gesundheit größer als 0 ist, andernfalls 0
    • print_status: nimmt einen const-Character-Zeiger entgegen und gibt die Gesundheit des Charakters im Format Health: X aus
    • free_character: gibt den reservierten Speicher frei
  • main.c: Erstelle eine Kampfsimulation! Lies vier Ganzzahlen ein, die Folgendes darstellen: die Gesundheit des Helden, den Schaden des Helden, die Gesundheit des Gegners und den Schaden des Gegners. Erstelle beide Charaktere mithilfe deines Konstruktors. Simuliere anschließend Kampfrunden; in jeder Runde greift der Held zuerst an, dann schlägt der Gegner zurück. Beide Schläge finden innerhalb derselben Runde statt, daher trifft der Gegenangriff des Gegners auch dann, wenn der Angriff des Helden dessen Gesundheit bereits auf null oder darunter reduziert hat. Fahre fort, bis ein Charakter fällt. Gib nach jeder Runde den Status beider Charaktere aus (zuerst den Helden, dann den Gegner). Wenn der Kampf endet, gib je nachdem, wer überlebt hat, entweder Hero wins! oder Enemy wins! aus. Vergiss nicht, beide Charaktere freizugeben.

Dein Programm erhält vier Eingaben:

  1. Die anfängliche Gesundheit des Helden
  2. Der Schaden des Helden pro Angriff
  3. Die anfängliche Gesundheit des Gegners
  4. Der Schaden des Gegners pro Angriff

Beispielausgabe bei den Eingaben 50, 20, 30, 15:

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

Beispielausgabe bei den Eingaben 20, 5, 100, 25:

Health: -5
Health: 95
Enemy wins!

Denke daran, Include-Guards in deiner Header-Datei zu verwenden. Die Funktion attack veranschaulicht, wie ein Objekt den internen Zustand eines anderen Objekts ändern kann – ein zentrales Konzept im objektorientierten Design. Verwende const-Zeiger 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: Erstelle Helden- und Gegner-Charaktere mit create_character
    
    // TODO: Simuliere Kampfrunden
    // - Held greift zuerst an
    // - Gegner greift an, wenn er noch am Leben ist
    // - Gib den Status beider Charaktere nach jeder Runde aus (zuerst Held, dann Gegner)
    // - Setze fort, bis ein Charakter fällt
    
    // TODO: Gib den Gewinner aus ("Hero wins!" oder "Enemy wins!")
    
    // TODO: Gib beide Charaktere frei
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C-Compiler