RPG Karakteri
Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 58 / 61.
Görev
KolayStruct'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 birCharacterstruct'ı tanımlayın:healthvedamage. 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ürattack— iki Character pointer'ı (saldırgan ve hedef) alır, hedefin sağlığını saldırganın hasarı kadar azaltıris_alive— bir const Character pointer'ı alır ve sağlık 0'dan büyükse 1, aksi takdirde 0 döndürürprint_status— bir const Character pointer'ı alır ve karakterin sağlığınıHealth: Xformatında yazdırırfree_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ı olarakHero wins!veyaEnemy wins!yazdırın. Her iki karakteri de serbest bırakmayı (free) unutmayın.
Programınız dört girdi alacaktır:
- Kahramanın başlangıç sağlığı
- Kahramanın saldırı başına hasarı
- Düşmanın başlangıç sağlığı
- 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
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil Hiyerarşisi