RPG Karakteri
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 58 / 61.
Görev
KolayStruct'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 birCharacterstruct'ı tanımla:healthvedamage. 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ü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, değilse 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! 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ı olarakHero wins!veyaEnemy wins!yazdır. Her iki karakterin belleğini de 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: 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
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