Bir oyuna dayalı teorik el sanatları istatistiklerinin bir aracı için algoritma (efsaneler ligi)


10

Bir oyun için bir simülatör (temel olarak test amaçlı) oluşturmak istiyorum (efsaneler Ligi).

Oyunun temelleri:

bazı istatistikleri olan bir kahramanın var:

  • Sağlık noktası
  • Saldırı hasarı
  • Atak hızı
  • Zırh
  • Zırh penetrasyon
  • Hareket hızı

Kahraman 4 beceriye sahip olabilir (her seviyede bir beceri puanı kazanırsınız) (Manuel olarak etkinleştirilir, çoğu zaman bekleme süresi, hasar, saldırı gücü / saldırı hasarı ölçeği oranı ve beceri seviyesi) + pasif bir beceri

Düşman kahramanlarını veya tarafsız canavarları öldürebilirsin, aynı istatistiklere sahipler:

  • Sağlık noktası
  • Saldırı hasarı
  • Atak hızı
  • Zırh

Ne yapmak istiyorum:

Belirli bir öğenin veya belirli bir istatistik artışının öldürme gücünüzü / hızınızı hızlandıracağını test etmek için bir araç oluşturun.

harita: http://evtron.com/Evtron-Alpha/wp-content/uploads/2011/02/Summoners-Rift.jpg

Stat örnekleri:

  • Hp: 420
  • İlan: 55
  • AttackSpeed: 0.613 (ataklar / s -> 1 / 0.613 s'de her atak)
  • zırh nüfuzu: 25

Karakter, düşmanı 1 / saldırı hızı ile otomatik olarak atacak ve saldırı hasarı ile zarar verecek (hasarı hesaplamak için bir formül var, ancak sanırım bu aşamada önemli değil), öldükten sonra, hareket hızıyla bir sonrakine geçerek ( haritadaki kampları, sarı kafataslarını görebilirsiniz)

Algoritmayı düşünüyordum:

  1. Ben sadece i = 0 dan i = 30000 (ms sayma) için bir yapmak, bu yüzden sadece düşman hp ve benim hp de her ms de çok kötü çıktı (oldukça cpu ağır, ve ben istiyorum düşündüm içine biraz rastgele koymak, bu yüzden imkansız 1k yineleme özetlemek gerekir)

  2. İkincisi, sadece i = 1'den 30'a kadar bir şey yapmam gerektiğini düşündüm ve her saniyeyi kontrol ettim ve son saniyede ne olduğunu kontrol ettim, ama nötr canavarların bazıları büyük bir kampta (4 canavara kadar) ve bu şekilde kod karmaşıklaşmaya başlamıştı.

  3. Her oyuncu / canavar için konu açacağım ve bittikten sonra öldüklerinde bakın ve oyuncunun hp'sini azaltın.

Benim sorum, bu doğru yol mu?

TLDR: Bir oyun hakkında, istatistik artışının karakterin daha hızlı nötr canavarları öldürmesini sağlayacak bir analiz oluşturmak için bir araç oluşturmak istiyorum.

Java'yı tercih ederim, ama atm algoritmaya takılı kaldım.


@Karoly S: Evet, bu benim kötüyüm, .com -> .eu

Ben bunun üzerinde çalışıyorum:

Her nesne (oyuncu beceri, otomatik saldırı, meraklıları) kalan zaman kontrol ediyorum, ve her zaman en kısa zamanı seçin ve last_time depolamak, ve zaman eklemek zaman, bir sonraki turda Ben zaman hesaplamak (zaman- son kez)

Nesnede kalan süre 0 ise, yapılması gereken her şeyi yapar.

Verimli olup olmadığını bilmiyorum, ama yapabileceğim en iyisi bu.


1
Stack Exchange'in Oyun Geliştirme bölümüne / sitesine sorma şansınız daha yüksek olabilir, hareket ettirmek için bir Mod almaya çalışın, ancak olasılıklar yine de olacaktır. Bir ormancılık simülatörü biraz ilginç olurdu, biraz düşüneceğim ve ne bulduğumu göreceğim.
Karoly S

Hızlı cevap için teşekkürler, yardımınız çok takdir edilmektedir. Benim tahminim sen de Macar olman doğru mu?

Kesinlikle, bu neredeyse derinlemesine olmasa da düşündüğüm bir şey, ama ilgileneceğim. İlk yaklaşımım, # 2'nizin etkili ama daha basit bir versiyonunun mümkün olup olmadığını görmek olacaktır. Bunu sizinle daha uzun süre tartışmak isterim. Ve evet, tahmininiz doğru olur :)
Karoly S

Kulağa hoş geliyor, konuyu açık bırakacağım, belki birinin zaten bir fikri var. benim e-postam (etheld at gwelican dot com)

Kulağa hoş geliyor, biraz düşüneceğim ve size biraz sonra e-posta göndereceğim.
Karoly S

Yanıtlar:


1

Kare kare simülasyona alternatifler:

Benzetim gibi bir formülle benzetim için makul bir yaklaşım elde edebilirsiniz.

rawDamage = <some function of strength?)
Damage = rawDamage - enemyArmorReduction
DPS = (attackSpeed * Damage) * enemyArmorMod
myRemainingHP = myDPS / theirHP  - theirDPS / myHP

Ayrıca, bir taşıma kuyruğunu koruyabilirsiniz, böylece işaret başına değil hareket başına simüle edebilirsiniz:

// my aspd = 4 attacks per second, his aspd = 3 attacks per second
0.0s : start battle
0.25s: I attack
0.33s: He attacks
0.50s: I attack again
...
1.00s: I attack
1.00s: He attacks
...

Hareket kuyruğu, hasarın sürekli değil, ayrık olduğu gerçeğini doğru bir şekilde ele aldığı için daha doğru olacaktır. Örneğin, 0 saniyede 50 ve 1 saniyede 50 hasar verirsem, DPS'm 50 olur, ancak 1 saniyede 100 HP hedefi öldürürdüm.

@hammar: Bu doğru. kavga ne kadar kısa olursa, DPS tabanlı bir tahmin o kadar az doğru olur.
Jimmy

Oyunun sersemletmeleri ve diğer debuff'ları olması, böyle bir aracın başarılmasını gerçekten zorlaştıracaktır, çünkü farklı oyuncular öldürme oranlarında farklı sonuçlara sahip olabilirler. Her neyse iyi cevap.
Grimshaw
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.