Önceki alıştırmada, CalculateDamage() için iyi bir başlangıç noktası oluşturmuştun, ancak fonksiyon gövdesinde parametre olarak daha iyi çalışacak sabit ve değişkenler vardı. Hatırlatma olarak, işlev şu anda şöyle görünür:
CalculateDamage() : float =
MinHealth : float = 1.0
PotionDamageAmount : float = 80.0
var PlayerHealth : float = 100.0
# Hasar miktarı oyuncuyu yok etmeyecekse o miktarda hasar ver
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# Canı düşükse oyuncuya bir şans daha ver
return PlayerHealth - MinHealth
else:
# Oyuncuyu avla
return PlayerHealth
Fonksiyonun güncellemiş olduğun versiyonu üç parametre alacak:
PlayerHealth: Oyuncunun mevcut canıDesiredDamageAmount: Oyuncuya verilebilecek maksimum hasar miktarıMinHealth:DesiredDamageAmount’un, oyuncunun canını0.0veya daha da aşağısına düşürmesi halinde oyuncunun sahip olması gereken can.
Fonksiyonu aşağıdakilere uyacak şekilde güncelle:
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Hasar miktarı oyuncuyu yok etmeyecekse o miktarda hasar ver
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Canı düşükse oyuncuya bir şans daha ver
return PlayerHealth - MinHealth
else:
# Oyuncuyu avla
return PlayerHealth
Harika! Fonksiyonun, artık fonksiyon içinde bildirilen değişken ve sabitleri kullanmak yerine fonksiyona üç parametre verildiğinde oyuncunun alması gereken hasarı hesaplıyor.
Bu noktada, HurtPlayer() içindeki CalculateDamage()’a yaptığın çağrıdaki () altında bir kırmızı dalgalı çizgi görüyor olabilirsin. Bu çizgiyi, CalculateDamage() bildirimini 3 parametre gerektirecek şekilde güncellediğin halde CalculateDamage()’a yaptığın çağrıda herhangi bir bağımsız değişken iletmediğin için görüyorsun. Bunu sonraki birkaç adımda düzelteceksin.
-
PlayerHealthiçin bir ifadeyiCalculateDamage()fonksiyonuna geçirmeden önce karakterin canının ne olduğunu bilmen gerekir. Bunun içinGetHealth()metodunu kullanacaksın. BunuDamage()veHeal()’ı çağırdığın gibi çağıracaksın. Ancak bu metot,HurtPlayer()fonksiyonunun içinde kaydetmen gereken bir değer döndürecektir.HurtPlayer() : void = Playspace : fort_playspace = GetPlayspace() AllPlayers : []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): MyCharacterHealth : float = FortniteCharacter.GetHealth() DamageToDo: float = CalculateDamage() Print("Verilecek Hasar: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
CalculateDamage()içindeki ikinci parametre içinHurtPlayer()’dan bir parametreye ihtiyacın olacak. Şimdi bu parametreyi oluşturacaksın.DamageAmountadlı birfloatparametresi ekle.HurtPlayer()şimdi şöyle görünmelidir:HurtPlayer(DamageAmount : float) : void = Playspace: fort_playspace = GetPlayspace() AllPlayers: []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): MyCharacterHealth : float = FortniteCharacter.GetHealth() DamageToDo : float = CalculateDamage() Print("Verilecek Hasar: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) -
Artık
CalculateDamage()’a eklenmeye hazır üç bağımsız değişkenin var.PlayerHealthparametresi içinMyCharacterHealthDesiredDamageAmountparametresi içinDamageAmountMinHealthparametresi için1.0
HurtPlayer() aşağıdaki gibi görünmeli ve artık hata almamalısın:
HurtPlayer(DamageAmount : float) : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
MyCharacterHealth : float = FortniteCharacter.GetHealth()
DamageToDo : float = CalculateDamage(MyCharacterHealth, DamageAmount, 1.0)
Print("Verilecek Hasar: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
Oyuncunun canına bağlı olarak sahip olduğu farklı etkileri görmek için HurtPlayer()’ı birkaç kez çağır.
Peki, ya HealPlayer() işlevi? Parametreleri nasıl kullanacağını artık bildiğine göre bu fonksiyonu güncellemenin ne gibi yolları olabileceğini düşünebilir misin?
Bunun için faydalı olabilecek bir metot daha var. Bu yöntem SetMaxHealth() olarak adlandırılır ve Damage(), Heal() ve GetHealth() ile aynı şekilde çağrılır. HealPlayer() işlevini güncellemek için SetMaxHealth()i ve parametrelerle işlevler hakkında bildiğin diğer her şeyi kullanıp kullanamayacağına bak. Oyuncular için ilginç ve eğlenceli olabilecek şeyleri düşün.
Tam Kod
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Playspaces }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }
hello_world_device := class(creative_device):
# Cihaz, çalışmakta olan bir oyunda başlatıldığında çalışır
OnBegin<override>()<suspends>:void=
HurtPlayer(80.0)
Print("Player Hurt")
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Hasar miktarı oyuncuyu yok etmeyecekse o miktarda hasar ver
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Canı düşükse oyuncuya bir şans daha ver
return PlayerHealth - MinHealth
else:
# Oyuncuyu avla
return PlayerHealth
HurtPlayer(DamageAmount : float) : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
MyCharacterHealth : float = FortniteCharacter.GetHealth()
DamageToDo : float = CalculateDamage(MyCharacterHealth, DamageAmount, 1.0)
FortniteCharacter.Damage(DamageToDo)
Print("{DamageToDo} damage dealt to player")
HealPlayer(HealAmount : float) : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
FortniteCharacter.Heal(HealAmount)