Menu
Coddy logo textTech

RPG Karakteri

Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 58 / 61.

challenge icon

Görev

Kolay

Struct'ları, metotları, yapıcıları (constructors) ve nesne etkileşimini temiz, modüler bir tasarımda bir araya getiren klasik bir örnek olan bir RPG Karakteri savaş sistemi kuralım.

Kodunuzu üç dosya halinde düzenleyeceksiniz:

  • character.h: İki tam sayı alanına sahip bir Character struct'ı tanımlayın: health ve damage. Bir karakter oluşturmak, bir saldırı gerçekleştirmek, bir karakterin hayatta olup olmadığını kontrol etmek ve bir karakterin durumunu yazdırmak için fonksiyon prototiplerini bildirin.
  • character.c: Karakter sisteminizi uygulayın:
    • create_character — başlangıç sağlık ve hasar değerlerini alır, heap üzerinde bir Character tahsis eder, alanlarını başlatır ve bir pointer döndürür
    • attack — iki Character pointer'ı (saldırgan ve hedef) alır, hedefin sağlığını saldırganın hasarı kadar azaltır
    • is_alive — bir const Character pointer'ı alır ve sağlık 0'dan büyükse 1, aksi takdirde 0 döndürür
    • print_status — bir const Character pointer'ı alır ve karakterin sağlığını Health: X formatında yazdırır
    • free_character — tahsis edilen belleği serbest bırakır
  • main.c: Bir savaş simülasyonu oluşturun! Şu dört tam sayıyı okuyun: kahramanın sağlığı, kahramanın hasarı, düşmanın sağlığı ve düşmanın hasarı. Yapıcınızı kullanarak her iki karakteri de oluşturun. Ardından savaş turlarını simüle edin — önce kahraman saldırır, sonra (eğer hala hayattaysa) düşman saldırır. Bir karakter düşene kadar devam edin. Her turdan sonra her iki karakterin durumunu yazdırın (önce kahraman, sonra düşman). Savaş bittiğinde, kimin hayatta kaldığına bağlı olarak Hero wins! veya Enemy wins! yazdırın. Her iki karakteri de serbest bırakmayı (free) unutmayın.

Programınız dört girdi alacaktır:

  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!

Header dosyanızda include guard kullanmayı unutmayın. attack fonksiyonu, bir nesnenin diğerinin iç durumunu nasıl değiştirebileceğini gösterir — bu, nesne yönelimli tasarımda temel bir kavramdır. Yalnızca veri okuyan fonksiyonlar için const pointer'ları uygun şekilde kullanın.

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 karakterlerini oluştur
    
    // TODO: Savaş turlarını simüle et
    // - Önce kahraman saldırır
    // - Eğer hala hayattaysa düşman 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!" veya "Enemy wins!")
    
    // TODO: Her iki karakteri de serbest bırak
    
    return 0;
}

Object Oriented Programming bölümündeki tüm dersler