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ı, kurucuları (constructors) ve nesne etkileşimini temiz, modüler bir tasarımda bir araya getiren klasik bir örnek olan bir RPG Karakteri savaş sistemi oluşturalı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ı. Kurucunuzu kullanarak her iki karakteri de oluşturun. Ardından savaş turlarını simüle edin — her turda önce kahraman saldırır, sonra düşman karşı saldırı yapar. Her iki vuruş da aynı tur içinde gerçekleşir, bu nedenle kahramanın saldırısı düşmanı zaten sıfıra veya altına düşürmüş olsa bile düşmanın karşı saldırısı yine de gerçekleşir. 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() {
    // Giriş 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: Dövüş turlarını simüle et
    // - Önce kahraman saldırır
    // - Düşman hala 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!" veya "Enemy wins!")
    
    // TODO: Her iki karakteri de serbest bırak (free)
    
    return 0;
}

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