Menu
CoddyTech

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

Struct'ları, metotları, kurucuları ve nesneler arası etkileşimi temiz, modüler bir tasarımda bir araya getiren klasik bir örnek olan bir RPG karakteri savaş sistemi oluşturalım.

Kodunu üç dosyaya ayıracaksın:

  • character.h: İki tamsayı alanı olan bir Character struct'ı tanımla: health ve damage. Karakter oluşturmak, saldırı gerçekleştirmek, karakterin hayatta olup olmadığını kontrol etmek ve karakterin durumunu yazdırmak için fonksiyon prototiplerini bildir.
  • character.c: Karakter sistemini uygula:
    • create_character: başlangıç sağlık ve hasar değerlerini alır, heap'te bir Character için bellek 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, değilse 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! Kahramanın sağlığını, kahramanın hasarını, düşmanın sağlığını ve düşmanın hasarını temsil eden dört tamsayı oku. Kurucunu kullanarak iki karakteri de oluştur. Ardından savaş turlarını simüle et; her turda önce kahraman saldırır, sonra düşman karşılık verir. Kahramanın saldırısı düşmanın sağlığını sıfıra veya altına düşürürse düşman yenilir ve o turda karşılık vermez. Karakterlerden biri yenilene kadar devam et. Her turun ardından her iki karakterin durumunu yazdır (önce kahraman, sonra düşman). Savaş sona erdiğinde, kimin hayatta kaldığına bağlı olarak Hero wins! veya Enemy wins! yazdır. Her iki karakterin belleğini de 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: 35
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 kullanmayı unutma. attack fonksiyonu, bir nesnenin başka bir nesnenin iç durumunu nasıl değiştirebileceğini gösterir: nesne yönelimli tasarımın temel bir kavramı. Yalnızca veriyi okuyan fonksiyonlarda const işaretçileri uygun şekilde kullan.

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: Çatışma turlarını simüle et
    // - Önce kahraman saldırır
    // - Düşman hâlâ hayattaysa saldırır
    // - Her turdan sonra iki karakterin durumunu yazdır (önce kahraman, sonra düşman)
    // - Karakterlerden biri yenilene kadar devam et
    
    // TODO: Kazananı yazdır ("Hero wins!" veya "Enemy wins!")
    
    // TODO: Her iki karakterin belleğini serbest bırak
    
    return 0;
}

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

Kendi başına pratik yap: Online C derleyicisi