Menu
CoddyTech

RPG-Charakter

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

challenge icon

Aufgabe

Einfach

Erstellen wir ein RPG-Charakter-Kampfsystem: ein klassisches Beispiel, das Strukturen, Methoden, Konstruktoren und Objektinteraktionen in einem klaren, modularen Design zusammenführt.

Du organisierst deinen Code auf drei Dateien:

  • character.h: Definiere eine Character-Struktur mit zwei ganzzahligen Feldern: health und damage. Deklariere die Funktionsprototypen zum Erstellen eines Charakters, Ausführen eines Angriffs, Prüfen, ob ein Charakter am Leben ist, und Ausgeben des Status eines Charakters.
  • character.c: Implementiere dein Charaktersystem:
    • create_character: nimmt anfängliche Lebenspunkte und Schadenswerte entgegen, reserviert Speicherplatz für einen Character auf dem Heap, initialisiert seine Felder und gibt einen Zeiger zurück
    • attack: nimmt zwei Character-Zeiger entgegen (Angreifer und Ziel) und verringert die Lebenspunkte des Ziels um den Schaden des Angreifers
    • is_alive: nimmt einen const-Character-Zeiger entgegen und gibt 1 zurück, wenn die Lebenspunkte größer als 0 sind, andernfalls gibt die Funktion 0 zurück
    • print_status: nimmt einen const-Character-Zeiger entgegen und gibt die Lebenspunkte 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 Lebenspunkte des Helden, den Schaden des Helden, die Lebenspunkte des Gegners und den Schaden des Gegners. Erstelle beide Charaktere mit deinem Konstruktor. Simuliere dann Kampfrunden, in denen der Held zuerst angreift und der Gegner anschließend zurückschlägt. Wenn der Angriff des Helden die Lebenspunkte des Gegners auf null oder darunter senkt, ist der Gegner besiegt und greift in dieser Runde nicht zurück. Fahre fort, bis einer der Charaktere 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, den Speicher beider Charaktere freizugeben.

Dein Programm erhält vier Eingaben:

  1. Die anfänglichen Lebenspunkte des Helden
  2. Der Schaden des Helden pro Angriff
  3. Die anfänglichen Lebenspunkte des Gegners
  4. Der Schaden des Gegners pro Angriff

Beispielausgabe für die Eingaben 50, 20, 30, 15:

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

Beispielausgabe für die Eingaben 20, 5, 100, 25:

Health: -5
Health: 95
Enemy wins!

Denke daran, Include-Guards in deiner Headerdatei zu verwenden. Die Funktion attack veranschaulicht, wie ein Objekt den internen Zustand eines anderen ändern kann: ein Schlüsselkonzept des objektorientierten Designs. Verwende const-Zeiger passend für Funktionen, die Daten nur lesen.

Probier es selbst

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

int main() {
    // Eingabewerte einlesen
    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 Gegnercharakter mit create_character erstellen
    
    // TODO: Kampfrunden simulieren
    // - Der Held greift zuerst an
    // - Der Gegner greift an, wenn er noch lebt
    // - Nach jeder Runde den Status beider Charaktere ausgeben (zuerst Held, dann Gegner)
    // - Fortfahren, bis ein Charakter fällt
    
    // TODO: Sieger ausgeben ("Hero wins!" oder "Enemy wins!")
    
    // TODO: Beide Charaktere freigeben
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C-Compiler