RPG Karakteri
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 58 / 61.
Görev
KolayBir 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 birCharacterstruct'ı tanımla:healthvedamage. 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ürattack: iki Character işaretçisi (saldıran ve hedef) alır, hedefin sağlığını saldıranın hasarı kadar azaltıris_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ürprint_status: bir const Character işaretçisi alır ve karakterin sağlığınıHealth: Xbiçiminde yazdırırfree_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ı olarakHero wins!veyaEnemy wins!yazdır. Her iki karakterin belleğini serbest bırakmayı unutma.
Programın dört girdi alacak:
- 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!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
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şisiKendi başına pratik yap: Online C derleyicisi