Bir sıra tabanlı oyunda veya Roguelikes'te isabet hesaplamak için özellikler


22

Bir Roguelike'deki oyuncu bir düşmana saldırdığında bir vuruş belirlemek için iyi bir formül bulmaya çalışıyorum. Basit bir şeyle gelmek isterdim, ama hala D & D'de veya AngBand veya NetHack gibi popüler Roguelikes'te olduğu gibi.

Şimdiye kadar sahip olduğum şey rastgele bir tamsayı ile birlikte oyuncu ve düşman özellikleri arasındaki farkları eklemek.

if ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
    (player.luck - enemy.luck) + random_integer_below_6()) >= 10) {
    hit(enemy);
}

Bu, doğal olmayan oyun oynamayı sağlar: oyuncu, zayıf düşmanları asla kaçırmaz ve güçlü oyuncular için tersi de geçerlidir. Sırayla oyunlarda kullanılan sırayla dövüşün özniteliği hakkında bir rehber bilen var mı? D&D kurallarını yazılı olarak kopyalamalı mıyım?

Yanıtlar:


18

Ne "garantili hit" ve "garantili bayan" şansının olmasını istediğinizi (yani bir yavru kedi için bir ejderhaya çarpma ve bir yavru kediyi özlemek için bir ejderhaya ulaşma şansı) ne istediğinizi çözerdim. Rasgele sonucunuzu saklayın ve güç farkları uygulamadan önce, bu sınırlar dahilindeyse bir isabet işaretleyin. Bu,% 100 isabet / kaçınma şans problemini önler ... her zaman bir isabet şansı sağlamak için bir seçenek daha olmasına rağmen, aşağıda detaylandırılmıştır.

D&D, olasılığın olası rulo sonuçlarına eşit olarak dağıtıldığı "düz" bir sistemdir. Diğer sistemler, genellikle birden fazla zar atıp ekleyerek elde edilen daha kavisli bir dağılım kullanır. Böyle bir eğri oluşturmak yeterince kolaydır (rand () + rand ()) / 2 akla geliyor).

Diğer bir olasılık "patlayan zar" dır. Shadowrun ve Savage Worlds gibi sistemlerde, mümkün olan maksimum kalıp sonucunu haddelemek, bu kalıbı tekrar kontrol etmenizi ve yeni sonucu eklemenizi sağlar. Oyununuzda, rastgele sonucunuzun belirli bir eşiğin üstünde olup olmadığını test edersiniz ve öyleyse tekrar rulo. Zarın süresiz olarak patlamasına izin verirseniz, en alçak goblin bile bir tanrıya çarpma şansına sahiptir ve açık bir "garantili vuruş" tamircisine ihtiyacınız yoktur.

Böylece kavisli bir rulo ile olası bir yaklaşım, garantili kayıp şansı ve patlayan zar gibi bir şey olur:

function getRoll():Number
{
  var result:Number = (rand() + rand()) * 3; //Curved result from 0 to 6
  if(result > 5.75) result += getRoll(); //Explode over a certain threshold, recursively
  return result;
}

function attackHits():Boolean
{
  var roll:Number = getRoll();
  if(roll < 0.25) return false; //Guaranteed chance of miss
  else return ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
    (player.luck - enemy.luck) + roll) >= 10; //Your original test.
}

Tabii ki, bu denenmemiş ve dengesiz; tüm bu sihirli sayıları doğru hissedene kadar ayarlamak istersiniz.

Sözlü olarak kopyalanan kurallara gelince, bununla ilgili yasal ve etik konular var. Yine de D & D'den ve diğer masa üstü oyunlarından ilham alıyorsunuz; İlk başta hepsi böyle tasarlandı. Oyuncuya kuralların tam olarak nasıl çalıştığını göstermeniz gerekmez ve yumuşak bir kayan nokta zar eğrisi kullanmanın kendinizi fiziksel zarın tamsayı kısıtlamaları ile sınırlamaktan daha iyi bir his verdiğini fark edebilirsiniz.


3
Bu komik dileklerin dili hangi dilde? Yoksa sadece sahte kod mu?
tenpn

2
Actionscript veya Javascript olabilir, ancak beni buna tutmayın.
Komünist Ördek

Actionscript 3. Ben bir Flash geliştiricisiyim.
Gregory Avery-Weir

6

Bunun bir oyun dengesi sorusu olduğunu ve kodlama sorusu olmadığını ve bununla baş etmenin birçok yolu olduğunu farz ediyorum. Mevcut algoritmanızdan, olduğundan daha karmaşık hale getirdiğinizden şüpheleniyorum (üç özellik VE rastgele bir sayı oyuncunun perspektifinden aşırı derecede çamurlu bir sistem oluşturur). İlk içgüdüm basitleştirmek!

Birden çok özellik tarafından belirlenen sonuçlar yerine birden çok işi yapan özellikleri favorilere ekleyin. DEX, vuruş şansının ana belirleyicisi olarak gayet iyi çalışıyor; her şeyin eklenmesi sadece dengeyi zorlaştırmaya hizmet ediyor. Bunu şu şekilde düşünün: Bir oyuncunun her vuruşta beklenen zararı, vuruşta elde ettikleri ortalama hasar ile çarpılan% vurma oranıdır. "Beklenen" veya "tipik" bir% beklenen isabet oranını bu kadar çok değişkenle nasıl hesaplamayı düşünüyorsunuz?

Formülünüzün ölçeklenemediği başka bir sorun görüyorum ve bu muhtemelen deneyimlediğiniz şeydir. DEX, LUCK ve SPEED'in oyun boyunca artma eğiliminde olduğunu varsayarsak, bu istatistiklerdeki oyuncu ve canavar arasındaki farklar da artacaktır. Örnek olarak, bir oyuncunun erken oyun DEX'i 4 ila 6 aralığındaysa ve canavarlarsa, bu% 10-20 oranında bir değiştiricidir. Oyunun ilerleyen aşamalarında menzil 10 ila 20 arasındaysa, bu% 100 değiştiricidir.

Bunu düzeltmenin bir yolu istatistikleri sabit tutmaktır. Oyuncu ve canavarlık aralıkları oyun boyunca aynıdır ve +1 DEX gibi bir şeye sahip olmak çok nadirdir ve çok nadir görülür ve (eğer varsa) olduğu gibi davranılır. O zaman formülün tüm oyun için gayet iyi çalışacak ve oyun boyunca aynı vuruş şansı olan bir oyuncu göreceksiniz.

Baska bir yol, "10" kodlu seviye ile ölçeklendirmek için degildir, bu yüzden belki "10 + canavar seviyesi" veya "10 + zindan seviyesi" veya oyuncu seviye alamazsa, oyun ilerledikçe zorlukta hafif bir artışa neden olan bir sey olabilir. buna göre onların istatistikleri.

Diğerlerinin de söylediği gibi üçüncü bir yol, sert başlıkları kabul edilebilir en yüksek ve en düşük% 'ye ayarlamak ve sadece "hesaplanan değer X'ten küçükse, bunun yerine X kullanın" demektir.

Tamamlanma uğruna, ilk etapta bir tokmak rulosu eklemeniz GEREKEN mutlak bir yasa olmadığını belirteceğim. Etkili olmayan bir oyunda bir eylemde bulunmak, özellikle eğlenceli değildir ve nadir durumlar haricinde, deneyime gerçekten katılmaz. Alternatif olarak, oyunculara HER ZAMAN vurur ve sadece hasar alanını karıştırırlar, böylece bazen diğerlerinden çok daha az hasar alırlar. Karmaşık sistemlerin tasarımcı için oyuncudan daha eğlenceli olduğunu unutmayın.


Bu harika bir cevap.
seanicus

3

Kritik isabetler (genellikle kaçıramazsınız, bonus hasarı) ve kritik kaçaklar (ne olursa olsun, muhtemelen oyuncuyu şaşırtan şeyleri kaçırmama şansı) eklemek isteyebilirsiniz.


0

Bir çok oyun normal isabet formülüne ek olarak tüm faktörlerden bağımsız olarak isabetin yüzde beşini kullanır.

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.