Menu
Coddy logo textTech

RPG Karakteri

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 58 / 61.

challenge icon

Görev

Kolay

Bir RPG Karakteri savaş sistemi oluşturalım: struct'ları, metotları, yapıcıları ve nesne etkileşimini temiz, modüler bir tasarımda bir araya getiren klasik bir örnek.

Kodunu üç dosyaya ayıracaksın:

  • character.h: İki tamsayı alanına sahip bir Character struct'ı tanımla: health ve damage. Karakter oluşturma, saldırı gerçekleştirme, bir karakterin hayatta olup olmadığını kontrol etme ve bir karakterin durumunu yazdırma işlevleri için işlev prototiplerini bildir.
  • character.c: Karakter sistemini uygula:
    • create_character: başlangıç sağlık ve hasar değerlerini alır, heap üzerinde bir Character ayırır, alanlarını başlatır ve bir işaretçi döndürür
    • attack: iki Character işaretçisi (saldıran ve hedef) alır, hedefin sağlığını saldıranın hasarı kadar azaltır
    • is_alive: bir const Character işaretçisi alır ve sağlık 0'dan büyükse 1, aksi takdirde 0 döndürür
    • print_status: bir const Character işaretçisi alır ve karakterin sağlığını Health: X biçiminde yazdırır
    • free_character: ayrılan belleği serbest bırakır
  • main.c: Bir savaş simülasyonu oluştur! Şunları temsil eden dört tamsayı oku: kahramanın sağlığı, kahramanın hasarı, düşmanın sağlığı ve düşmanın hasarı. Yapıcını kullanarak her iki karakteri oluştur. Ardından savaş turlarını simüle et; her turda kahraman önce saldırır, sonra düşman karşılık verir. Her iki vuruş da aynı tur içinde gerçekleşir; bu nedenle kahramanın saldırısı düşmanın sağlığını zaten sıfıra veya altına düşürmüş olsa bile düşmanın karşı saldırısı yine de gerçekleşir. Karakterlerden biri düşene kadar devam et. Her turun ardından her iki karakterin durumunu (önce kahraman, sonra düşman) yazdır. Savaş sona erdiğinde, hayatta kalana bağlı olarak Hero wins! veya Enemy wins! yazdır. Her iki karakterin belleğini serbest bırakmayı unutma.

Programın dört girdi alacak:

  1. Kahramanın başlangıç sağlığı
  2. Kahramanın saldırı başına hasarı
  3. Düşmanın başlangıç sağlığı
  4. Düşmanın saldırı başına hasarı

Girdiler 50, 20, 30, 15 olduğunda örnek çıktı:

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

Girdiler 20, 5, 100, 25 olduğunda örnek çıktı:

Health: -5
Health: 95
Enemy wins!

Başlık dosyanda include guard'ları kullanmayı unutma. attack işlevi, bir nesnenin başka bir nesnenin iç durumunu nasıl değiştirebileceğini gösterir: bu, nesne yönelimli tasarımda önemli bir kavramdır. Yalnızca veri okuyan işlevler için const işaretçilerini uygun şekilde kullan.

Kendin dene

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

int main() {
    // Girdi değerlerini oku
    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: create_character kullanarak kahraman ve düşman karakterleri oluştur
    
    // TODO: Savaş turlarını simüle et
    // - Kahraman önce saldırır
    // - Düşman hâlâ hayattaysa saldırır
    // - Her turdan sonra her iki karakterin durumunu yazdır (önce kahraman, sonra düşman)
    // - Bir karakter düşene kadar devam et
    
    // TODO: Kazananı yazdır ("Hero wins!" or "Enemy wins!")
    
    // TODO: Her iki karakteri de serbest bırak
    
    return 0;
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi