Harici verileri ne zaman sabit kodla vermeliyim?


36

Rasgele oluşturulmuş yıldız sistemleri ağları yaratan ve rastgele gezegenler, istasyonlar, gemiler ve silahlar yelpazesiyle dolduran 2B uzay tabanlı oyunumu oluşturmak için binlerce satır kod yapıyorum.

Potansiyel olarak, oyunun kullanması gereken yüzlerce farklı istasyon / gemi / etc olacaktır - işte merak ediyorum. Tüm bu bilgileri (örneğin) XML dosyalarında saklayacak bir 'yazılım kodlu' veri yükleyici oluşturmak için zaman harcamalı mıyım ve bu nedenle daha sonra değiştirmek biraz daha kolay olacak mıydı yoksa basitçe Şu an yapıyordum - tüm nesneleri oyunun ana motoruna kodlamak.

Projedeki tek insan benim ve dediğim gibi, üniversiteden uzakta, boş zamanlarında yaptığım sadece hobi bir şey. Ancak topluluk, ek dosyalarda veri depolamak için ilave bir sistem oluşturmak için yatırım yapmasını tavsiye eder mi?

Yazılım kodlama verilerinin bu şekilde, sadece tüm bunları yapıcılar aracılığıyla sabit kodlamaya karşı sağlamanın faydaları nelerdir? Değiştirilebilecek harici dosyalara sahip olmanın uzun vadeli bir faydası var mı - oyunu 'mod'lara sahip olmak istemiyorsam, harici dosyalara sahip olmak gerekli mi? Birkaç hafta veya ay içinde pes edebileceğim bir hobi olayıysa, bunun için zaman harcamalı mıyım?


10
Aradığınız terim "Data Driven" ve evet, uzun vadede yeni istasyonlar oluşturmak ve XML (veya gerçekten JSON gibi herhangi bir biçimde) dosyaları içeren yeni istasyonlar oluşturmak, daha küçük bir projede yaptığınızdan çok daha hızlı . Ayrıca daha sonra, ikinci kez tasarruf etmek için koda dokunup yeniden derlemek zorunda kalmadan kaldırabilir ve düzenleyebilirsiniz.
Patrick Hughes,

@PatrickHughes Cevabımı yazarken, zaten yorumuna koy!
MartinTeeVarga

1
Eğer "yumuşak kodlamayı" gerçek bir terim olarak meşrulaştırmaya çalışıyorsak, "yumuşak kodlanmış bir veri matrisine sabit kodlanmış bir girdi kullanma" olarak firma kodlamasını öneririm.
Sean Middleditch

1
@ Tekil1ty bu site diğer bazı SE'lerden daha fazla tartışmayı bağışlamaktadır. Bence sorunuzun "iyi tartışma" statüsünde olması gerekiyor.
Seth Battin

2
@ Singular1ty Ah, işte burada. İlk yorumumu yayınladığımda bulamadım. blog.stackoverflow.com/2010/09/good-subjective-bad-subjective
Seth Battin

Yanıtlar:


62

Evet. İçeriği ana motorunuzun dışına yüklemek için bir sistem uygulamanız gerekir.

Özlü cevaplar için başlıklar.

Hayır. Çok fazla zaman tüketmez.

Bunun sınırlı bir sürenin geçerli bir tahsisi olup olmadığı sorusu tartışma değil; toplam proje süresinin küçük bir kısmı olacağı için bile.

Tamamladığınız bir oyun projesinde yüzlerce (binlerce) saat harcayacaksınız. Belki bir Pong klonu üzerinde değil, kesinlikle karmaşık uzay oyununuz için de öyle. Bunu config dosya okuyucusuyla karşılaştırın. XML'i ana kurucunuza aktaracak ve daha sonra oyun sürecine yeniden başlayacak bir sistem uygulamak belki 10 veya 20 saat sürer. 50 veya 100 alıyor olsanız bile, toplam proje süresinin küçük bir kısmı olacaktır.

Zaman kazandıracak

Bu bir zaman gideri değil; bu bir zaman yatırımı. Ve karşılığını ödeyecek.

İş akışı önemlidir ve bir yapılandırma yükleyiciye sahip olmak iş akışınızı daha iyi hale getirir. Konfigürasyonları anında düzenlemenizi sağlayan bir sistem oluşturarak sayısız yeniden oluşturma işlemini kurtaracaksınız. Oyuna çalışırken çalışırken bakabilir, XML ayarını değiştirebilir ve saniyeler içinde yeniden denetleyebilirsiniz. Ya da koda bakabilir, bir kod satırı (binlerce arasında) bulabilir, değerlerini son derece dikkatli bir şekilde düzenleyebilirsiniz (ana motorunuzdasınız, sonradan), yeniden oluşturun, uygulayın, oyunu tekrar test durumuna getirin, zorlanmayı deneyin Değişiklikten önce nasıl göründüğünü hatırlayın ve değişikliğinizin istediğiniz gibi olup olmadığını görün. Motorunuzda hiçbir şey kırılmadığını varsayarsak, treniniz kesinlikle bozuluyor.

Daha temel bir teknoloji bakış açısına göre, yazma yazılımının en fazla zaman alan kısmının birkaç ekstra tuşa veya boşluk bırakmadığını hatırlamaya çalışın. Böcek avı. Ve daha ayrıntılı kod yazarak olayları daha net hale getirmek için biraz daha zaman harcıyorsanız, daha sonra kendinizden çok daha fazla zaman kazanırsınız. Sizin durumunuzda, bir içerik ithalatçısı yazmak daha kolay okunacak daha temiz bir kodla sonuçlanır. Kodlanmış değerlerin mil ve milleri yerine, kaynağınız basit bir dosya yüküne sahip olacaktır. Aynı şekilde, config dosyasını oyun motoru kodunda gezinmeden de okuyabilirsiniz. Her iki parça da daha bakılabilir ve hata ayıklaması daha kolay hale gelir.

Tek üyeli ekipler en fazla yararlanır

Bu içeriğin bir bölümünü oluşturmak için bir sanatçıyı işe aldıysanız, onlarla çalışması için araçlar yapmanız gerekir. Piksel düzenlemeleri yapmaları ve efektleri hızla görmeleri gerekiyor. Her değişikliği görmeleri için kodu yeniden oluşturmaya zorlamazsınız. Zamanları pahalıdır ve boşa harcamak istemezsiniz.

Şimdi, sanatçının çok vasıfsız ve yavaş (programcı sanatçı) olduğunu ve endişelenecek çok şey olduğunu, çünkü aynı zamanda ana programcı ve müzisyen olduklarını hayal edin. Kesinlikle o zamanı boşa harcamak istemiyorsun, yoksa proje asla bitmeyecek. Ve, bu berbat sanatçı daha iyi bir sanatçı olmak için eğitimden nefret edecektir, çünkü bütün zamanlarını kod satırlarında yeniden kodlamak için harcıyorlar.

Bunu kendine yapma. Araçları hazırla ve bir oyun yapmak için daha çok zamanın olacak.


3
Vay, başka bir fantastik cevap! Çok teşekkürler. Değerleri hızlı bir şekilde değiştirebilme becerisine kesinlikle katılıyorum - ve aynı zamanda böcek avcılığına. Bir veya iki küçük şeyi unutmak çabucak bir kabusa dönüşüyor ve aynı kod satırlarını sonsuzca, ittifaklar, isimler ve gövde / silah değerleri arasındaki ufak değişikliklerle tekrarlamak için gereken her şeyi kesmek için ne gerekiyorsa yapmak istiyorum.
Singular1ty

Seth, yeni ayrıcalık seviyene hoş geldin. Kapat ve tekrar oylarını iyi kullan!
MichaelHouse

Minnettarım. Onları kullanmak için kısa bir süre bekleyeceğim. Silinen oy kullanan hesaplardan bir miktar dalgalanma alıyorum.
Seth Battin

10

Bu iyi bir soru ve verebileceğim en iyi cevap, daha zor / zaman alan yoldan gitmenin iyi bir fikir olduğu zaman, sadece deneyimin size gerçekten söyleyebileceği. Eğer biri size söylerse, HER ZAMAN 'uygun' şekilde yapmalısınız, o zaman onlar sadece yanlıştır.

Zaten bir tradoff olduğunu anladın. Bir yandan, kodlama çok caziptir çünkü hızlı ve kolay bir şekilde ilerlemek kolaydır, ancak uzun vadede özellik ekleme ve hata ayıklama kabusa dönüşecektir. Öte yandan, harika, esnek, genişletilebilir bir sistem yazmak büyük bir ilk yatırım gerektirir, ancak hayatı uzun vadede çok daha kolay hale getirir.

Amaç bir şeyin bitmesini sağlamak ve büyük bir sistem yapmak için tıkanırsanız, hedef daha da azalacak ve motivasyonunu kaybedeceksiniz. Sabit kodlama işlemi bazı durumlarda iyidir, ancak bunu yapmanın etkilerini anlamalısınız. Sabit kodlamanın kötü bir fikir olmasının bazı nedenleri:

  • Projenizin küçük olduğunu düşünebilirsiniz, ancak daha fazla özellik eklemeye karar verirken büyüyebilir. Sabit kodlamayı başlatırsanız, sürdürmek için gereken enerjinin (yeni şeyler ile onu güncellemek ve kaçınılmaz böcekleri onararak düzeltmek için) ilk kazançlardan ağır basmaya başlayacağı bir zaman gelecek.

  • Sabit kodlama özelliği, geçerli projeye özgü tanım gereğidir. Bir sonraki proje için tekrar sıfırdan başlamalısınız, muhtemelen tekrar kodlama yapmalısınız (çünkü rahat edeceğiniz şey budur). Zamanı iyi bir yükleme sistemine dahil etmiş olsaydınız, gelecekteki tüm projeler için bu işi ve baş ağrısını atlayabilirsiniz.

  • Şu anda yalnız çalışıyor olabilirsiniz, ancak bir başkasını projeye dahil etmek istediğinizde bir zaman gelebilir. İğrenç paroşial sisteminizi açıklamak ve bunun için belgeler yazmak için zaman ayıracak mısınız?

  • Sabit kodlama genellikle belirli sihirli sayıların ne anlama geldiğini veya karmaşık sınıf bağımlılıklarını bilmek zorunda olmayı içerir. Artık her şeyi aklınızda tutabilirsiniz, ancak bir süre için koddan uzak olana kadar bekleyin. Kapsamlı yorumlarla bile, kötü tasarlanmış bir yapı geri dönmek cehennemdir.

Sadece en küçük detaylarda kod yazman konusunda özgür hissetmeniz gerektiğini söyleyebilirim. Üzerinde çalıştığınız elemanın en ufak bir fikrine bile sahipseniz, başka biri tarafından kullanılmakta, daha da büyüyünce veya başka bir projede kullanılıyorsa, şimdi doğru yapmak için zaman ayırın.

Öte yandan, deliler gibi prototip yapıyorum ve kodlamada bazı şeyler hızlı ve kolaydır ve sizi denemeye konsantre olmaktan kurtarır. Bu, çalışma tarzınıza göre değişir.


Cevap için teşekkürler. Zaten sistemimin elimden çıktığını tespit ediyorum. Java'daki şeyleri genişlettiğim için, sınıflarımda genellikle yaklaşık on ila on beş kurucu argüman var ve her zaman hangi sırayla girdiklerini unutuyorum. 'Hızlı ve kirli' şeyleri yapmaya alışkınım çünkü dikkat sürem çok kısa, ama Bir keresinde bir projeyi gerçekten bitirmek istiyorum. Artı, daha sonra işler için istatistiklerde ince ayar yapılması gerektiğini hissedersem, binlerce satır kodlanmış nesneler arasında trolle sıkışmak istemem ...
Singular1ty

@ Singular1ty Bu durumda, şu anda ne yaptığınızı durdurun. Deliler gibi canlanmaya başlamanın zamanı geldi. Herhangi bir yeni içeriği unutun ve mevcut genel yapının iyileştirilmesine odaklanın. Bir oyun şirketinde çalışıyorum ve her zaman nefes alıp vermeye çalışıyorum. Ama elbette, sağır kulaklara düşüyor ve biz de her zaman deliler gibi çıldırıyor, böcek / kesilmiş istilacı bataklıklar arasında dolaşıyoruz. Ho hum
DaleyPaley

8

Bahsettiğiniz şey veriye dayalı programlama .

Küçük projeler için, geliştirebileceğiniz çoğu daha önemli özellik olduğundan, bu zaman yatırımına değmeyebilir.

Bununla birlikte, veri odaklı programlama yapmak ÇOK kolay olabilir. Bu konuda ciddiyseniz, muhtemelen XML, JSON veya YAML kullanmalısınız, ancak düz metin dosyaları da kullanabilirsiniz.

Veriye Dayalı Programlama

Artıları

  1. Tasarımcıların, program bilgisi olmadan oyun verilerine erişmesine ve bunları değiştirmesine izin verir.
  2. Yeniden derlemeye gerek kalmadan oyunda değişiklikler yapabilirsiniz . Bu şekilde çok daha hızlı bir oyun geliştirebileceğiniz için, bu küçümsenmemelidir. İyi oyunlar birçok tekrardan sonra gelir.

Eksileri

  1. Uygulanması zaman ve çaba gerektirir.
  2. Programın karmaşıklığını artırabilir.

Bunlar şu anda düşünebildiğim bazı artılar ve eksiler; daha fazlasını düşünüyorsanız bana bildirin!
Nick Caplinger,

1
Düzenlemenizi başlığım için onayladım.
Singular1ty
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.