Yeni bir oyun geliştirirken göz önünde bulundurulması gereken en büyük tuzaklar nelerdir?


19

Aslında birkaç hafta önce Facebook için birkaç yeni web tabanlı oyunu izlemeye başladım (isimlendirme düzeltmesi için teşekkürler David Young) ve yeniden kodlamanın zihinsel blokları ve zaman berbatları ile su altında kaldım. Sıra tabanlı (Vampire Wars) tarzı RPG'ye benzer bir şey üzerinde çalışıyorum. Bir oyunu kodlamak için becerilerim var, ancak tasarım modellerini doğru yapmaya ve ürünü aklımın gözünde gördüğümle eşleştirmeye çalışıyorum.

Normalde bir web sitesi oluştururken 'kodu düşünmeyi' severim ve sadece kod / HTML'yi değiştirmek için değiştirmeyi daha hızlı buluyorum. Bu muhtemelen ne yaptığımda çok rahat olduğum ve ne olacağını biliyorum tekrar tekrar yaptığım gibi. Oyun geliştirme ile bu noktada kendimi tekrar kağıda başlarken buluyorum (web sitelerinde alışkın olduğum gibi) ve bunun sadece oyun mantığına odaklanma ve sezgim eksikliğim olup olmadığını veya bunun düşüncelerimi ortaya çıkarmanın uygun bir yolu olup olmadığını merak ediyorum kodlamanın ilerleyişi.

Bu soruna doğru bir şekilde saldırmak ve kendimi görevde tutmak için bazı tavsiyeleri takdir ediyorum. Bir oyun motorunun standart bir işletme web sitesinden ne kadar farklı olduğunu çabucak öğreniyorum! Ne zaman bir şey yerleştirirsem, sadece mooshy ve eksik hissediyor ve sinir bozucu oluyor.

Genişletilmiş

Örnek olarak, bana bu kadar çok sorun veren savaş motoru son zamanlarda basit bir saldırı becerisi alıyor ve ardından -50% ile +% 50 arasında rastgele bir atış yapıyor ve orijinal saldırı becerisini bu yüzde ile çarpıyor. Aynı şey savunma ile yapılır ve sonra düşman sağlığına herhangi bir hasar verilip verilmediğini belirlemek için bunları birbirine bağlarım. Sanırım kendime bunu yapmanın doğru yolu olup olmadığını veya 'doğru' bir yol olup olmadığını sormaya başladığımda başımın üstünde olduğumu fark etmeliyim. Bununla bulduğum en büyük hata, aynı seviyedeki iki karakterin, saldırının% -50 olduğu ve savunmanın +% 50 olduğu birkaç 'top' olabileceğidir, bu yüzden kimsenin bir şey yapmadığı son derece uzun savaş dizileriyle sonuçlanıyorum. BAŞARISIZ

Belki de benim yazdığım basit oyun mantığını açıklayan önerilen bağlantılar istemeliydi.

Son Uzantı

Hepinize şimdiden teşekkürler!


1
Bu yararlı bulduğum biraz alakalı ve ilginç bir okuma: makegames.tumblr.com/post/1136623767/finishing-a-game
zfedoran

Yanıtlar:


22

çok fazla özellik ekliyor. Oyunun çekirdeğine odaklanın, inşa edin, sonra her şey iyi çalışıyorsa özellikler ekleyin. İnsanlar harika şeyler eklemeye ve hiçbir şey yapmamaya çok fazla odaklanırlar.


4
Bu neredeyse FB maçlarımdan birini öldürdü. Özelliklerle doludur, ancak her şey genel olarak yarım yamalaktır.
Tesserex

Doğru hatırlıyorsam bu olaya "özellik sürünme" denir. Gerçekten tehlikeli bir tuzak.
S. Tarık Çetin

14

Bu, bir oyunun prototipinin nasıl oluşturulacağı hakkında harika bir makale. Sorunuzdan, bir prototipin ne olması gerektiği fikrini kaçırdığınız anlaşılıyor.

Prototipleme: (Muhtemelen) Yanlış Yapıyorsunuz

blurb:

Hata # 4: Oyun değil, sistem
oluşturma Prototip yaparken, kendinizi doğrudan ileriye doğru hareket etmeyen bir şey üzerinde çalışırken bulursanız, hemen orada durun. Programcılar olarak, kodumuzu genelleme ve zarif hale getirme ve her durumla başa çıkma eğilimindeyiz. Kaşıntıyı çok zor çiziyoruz, ancak nasıl yapacağımızı öğrenmemiz gerekiyor. Bunun kodla ilgili olmadığını, sonunda gönderdiğiniz oyunla ilgili olduğunu anlamak uzun yıllar aldı.

Zarif bir oyun bileşeni sistemi yazmayın, editörü tamamen atlamayın ve durumu kodda zorlayın, veri odaklı, kendi kendine ayrışan, XML delilikten kaçının ve sadece lanet şeyi kodlayın.

Düzenle:

Bunu sadece Prototip ve İzleme Kodu arasındaki farkı açıklığa kavuşturmak için ekliyorum.

Her zaman unutmayın: Bir Prototip atılacak şekilde tasarlanmıştır! İzleme Kodu değil.

Prototip Tuzağı

... İzleme kodu yaklaşımı farklı bir sorunu ele alıyor. Uygulamanın bir bütün olarak nasıl bir arada kaldığını bilmeniz gerekir. Kullanıcılarınıza etkileşimlerin pratikte nasıl çalışacağını göstermek istiyorsunuz ve geliştiricilerinize kod asacakları mimari bir iskelet vermek istiyorsunuz. Bu durumda, konteyner paketleme algoritmasının önemsiz bir uygulamasından (belki ilk gelen, ilk hizmet gibi bir şey) ve basit ama çalışan bir kullanıcı arayüzünden oluşan bir izleyici oluşturabilirsiniz. Uygulamadaki tüm bileşenleri bir araya getirdiğinizde, kullanıcılarınızı ve geliştiricilerinizi göstermek için bir çerçeveniz vardır. Zamanla bu çerçeveye, stubined rutinlerini tamamlayarak yeni işlevlerle eklersiniz. Ancak çerçeve bozulmadan kalır ve sistemin ilk izleme kodunuz tamamlandığında olduğu gibi davranmaya devam edeceğini bilirsiniz.

Ayrım tekrarlamayı gerektirecek kadar önemlidir. Prototipleme tek kullanımlık kod üretir. İzleme kodu yalın fakat eksiksizdir ve son sistemin iskeletinin bir parçasını oluşturur. Prototiplemeyi tek bir iz mermi ateşlenmeden önce gerçekleşen keşif ve istihbarat toplama olarak düşünün.

Pragmatik Programcı'dan İzleyici Kodu tasarımı hakkında daha fazla bilgi

İzleyici Madde İşaretleri ve Prototipler


Bu harika ... Bu makaleye bir göz atmam gerekecek. Göndermiş olduğunuz alıntıdan, yanlış bir şekilde prototip oluşturmaya benziyor gibiyim, ama aynı zamanda yaygın bir hata olabilir gibi geliyor.
angryCodeMonkey

alıntıladığınız hata bir süredir beni rahatsız ediyor.
jokoon

4

Tuzaklar: Mantığınızı verilerinizden ayırmamak. Verilerinizin istenen sonuçları verdiğini test etmemek.

Joe'nun gönderisine yaptığınız yorumdan:

Canavar karşılaşmaları için bir savaş motorunu kodlamamı istiyorsun BOOM! Motorumu bu hafta en az üç kez yeniden yazdım ve asla iyi hissetmiyorum. Yani, matematik işe yarıyor, ama denediğimde sadece sakat geliyor. bu mantıklı mı?

Buradaki motoru verilerle sınırlandırdığınız anlaşılıyor. Canavar karşılaşma motorunuz veriler tarafından yönlendirilmelidir. Oyun dengenizi / eğlencenizi etkileyen veriler yanlışsa, motorunuzu tamamen yeniden yazmanıza gerek yoktur - sadece doğru olana kadar denge değişkenlerinizi değiştirin.

Ancak, denge değişkenleri bazen birbirine bağımlı olduğundan, bir değişkeni daha iyi bir senaryoya dönüştürmek diğer senaryolar üzerinde büyük (negatif) bir etkiye sahip olabilir.

Yeni ayarlanmış verilerinizin bir sürü başka vakayı yok etmediğini test etmek için, birkaç test vakasını saklamak ve ince ayar yaptıktan sonra kırılmadığından emin olmak yararlıdır. İşte bunu nasıl test edeceğiniz konusunda itiraf edilmiş bir örnek.

TestResult TestPlayerKillsMonsterDuringAttack(PlayerStats, MonsterStats, seed)
{
   Player player(PlayerStats);
   Monster monster(MonsterStats);

EncounterEngine.SeedRNG(seed);
while(1) { result = EncounterEngine.Attack(player, monster); if (result == PLAYER_DEAD) return TEST_FAIL; if (result == MONSTER_DEAD) return TEST_PASS; // result == MONSTER_DAMAGED, PLAYER_DAMAGED is expected. } }

Örneğin. Bunu PlayerStats.Level == 5 ve MonsterStats.Level == 3 ile çağırırsanız, oyuncunun sonunda bu canavarı her zaman yenmesini beklersiniz.


Buraya geldiğim tavsiye harikadır ve bunun birçoğuna yanlış yaklaştığımı görebiliyorum. Yine de motoru yeniden yazmamın nedeni, onu çok karmaşık hale getirdiğimi düşünüyorum. Savaş motorunun en son versiyonum (şu anda) tek bir ortak fonksiyona ve birkaç desteğe sahip bir sınıf. Ana işlev 'dövüş' sadece temel saldırıya karşı savunmayı hesaplamakla kalmaz, aynı zamanda ilk vuruşu belirlemek, taktik yeteneğinizin size ikinci bir vuruş, vb. zor!
angryCodeMonkey

Mantık verilerinizden ayrılmıyor. Bu hemen hemen her zaman yolda veya güncelleme sırasında sorunlara neden olacak harika bir nokta!
Spooks

2

Buradaki tuzak, görebildiğim kadarıyla, programlama ve oyun tasarımına, gerçekten ayrı görevler olduklarında aynı görev gibi davranıyor olmanız. Önerdiğiniz gibi, bu bir programlama veya algoritmik sorun değil (savaş sistemini istediğiniz gibi kodlayabilirsiniz), oyuncu için eğlenceli ve ilginç olanla ilgilidir.

Cevap, oyun tasarımı ve oyun dengesi ile ilgili kaynaklara bakmaktır. Aslında dört yıllık bir eğitim programının tamamını yetiştirdiğiniz konulara adayan üniversiteler vardır, bu yüzden size hızlı ve kirli bir cevap vermek imkansızdır (aynı şekilde birileri " evet, bir oyun için bu fikrim var ama nasıl programlayacağımı bilmiyorum, nelere dikkat etmeliyim? "). Oyun tasarımı hakkında kitaplar, kurslar ve çevrimiçi yazılar var; onları ara.


1

Oyun yazarken en büyük tuzak, kendinizi iyi hissettiğiniz kodu yazmak yerine doğru tasarım desenlerini kullanıp kullanmadığınız konusunda endişelenmektir.


Şu anda yaşadığım sorun yazdığım kod hakkında iyi hissediyorum. İşletmeniz için bir muhasebe arka planı istiyorsunuz, sorun değil ... Canavar karşılaşmaları için bir savaş motorunu kodlamamı istiyorsunuz, BOOM! Motorumu bu hafta en az üç kez yeniden yazdım ve asla iyi hissetmiyorum. Yani, matematik işe yarıyor, ama denediğimde sadece sakat geliyor. bu mantıklı mı?
angryCodeMonkey

motoru neden yeniden yazmalıyım? oyuna özgü kodu lua gibi bir betik dilinde uygulayabilirsiniz. Değişkenleri veya matematiğin nasıl hesaplandığını değiştirin ve hiçbir şeyi kontrol etmek için asla yeniden derlemenize gerek yoktur. gamedev.net/reference/articles/article1932.asp
David Young

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.