Katı Yazılım Tasarım vs Bitti?


17

Yaptığımız oyunları tamamlamak için elimizde neredeyse yeterli zaman olmadığından, sağlam yazılım mimarisi ile bunların tamamlanması için iyi bir ilerleme kaydederek nasıl iyi bir denge kurabilirsiniz?

Kişisel görevim: Bugün ve aynı zamanda uzun vadeli düşünmede etkili olmaya ne dersiniz? Ayrıca, bunu yaparken, son 5 yıldır kullandığınız aynı tekrarlayan kalıplara başvurmak yerine yolda yeni şeyler öğrenmek de isteyebilirsiniz?

Yanıtlar:


20

Ne kadar az deneyiminiz varsa, ön tasarımla daha fazla zaman harcarsınız. İyi tasarımlar yapmak, bunu yaparak ve sonra nasıl ortaya çıktığını görmek / değerlendirmek suretiyle öğreneceğiniz bir şeydir. Bazı kararların geniş kapsamlı ancak belirsiz sonuçları vardır. Bazı oyunlardan sonra muhtemelen ilk tasarımı oldukça sağlam hale getirebileceksiniz ve bu aşamaya biraz daha zaman harcamak ödeyecek.

Sloganım: ilk etapta işleri halledin, ancak hangi bileşenlerin diğerlerinden daha kritik olduğunu tespit etmek ve zaman sınırınız içinde bunları oldukça iyi tasarlamak için sağduyunuzu kullanın. Örneğin, AI oyununuz için kritik öneme sahipse, daha sonra kolayca genişletebileceğiniz / değiştirebileceğinizden emin olun. Veya her oyunda kullanacağınız bir bileşen yazacaksanız, yeniden kullanılabilirlik için tasarlayın. Zamanınızı takip edin ve tasarım konusunda çıldırmayın. Bir tasarım son tarihi belirleyin ve bundan sonra, son teslim tarihinizi almak için her şeyi hacklemeye başlayın. Ancak, daha sonra hangi noktaların yeniden düzenlenmesi / yeniden tasarlanması gerektiğine dikkat edin ve bir sonraki oyuna başlamadan önce bu şeyleri iyileştirmek için bir süre sonra hesaplayın, böylece sizi ısırmayacaklar!

İyi bir tavsiye: iki seçenek arasında seçim yapmanız gerekiyorsa, ayrıntılar üzerinde uzun süre kalmayın. Çoğu zaman, "iyi" veya "kötü" yoktur. Bazı durumlarda, A daha iyi olacak, bazılarında B olacak ve genel olarak, ikisi arasındaki fark her zaman zamana değmeyebilir.

Yazılım veya oyun tasarlarken kazanılacak çok fazla deneyim var, bu yüzden zamanınızı biraz araştırmaya harcadığınızdan emin olun (örneğin tasarım üzerine bir kitap okumak, başkalarının deneyimini okumak, tasarımlarınızla diğer programcılarla konuşmak, vb ... ).


7
+1, iyi tavsiye. Kötü şöhretli Analiz Felci'ne yakalanmanıza izin vermeyin çünkü bu sizi hiçbir yere götürmez. Yeniden düzenleme geçmiş kusurları düzeltmek için güçlü bir araçtır, bu yüzden hata yapmaktan korkmayın.
Michael Klement

1
Ahh. Analiz Felç . En büyük düşmanım! Analysis Paralysis'in Son Patron olarak hizmet verdiği bir oyun inşa etmeliyim . En iyisi önce oyun mimarisini tasarlayarak başlıyorum ... Noooo! Şaka bir yana: Harika cevap ve iyi yorum!
bummzack

12

İnsanlar geleceği tahmin etmekte korkunç. Bu, özellikle gereksinimlerin günlük olarak değişebileceği oyunlar için geçerlidir.

Adında bir ilke var YAGNI temelde kadar bir şey uygulamaması gerektiğini söylüyor hangi, namı diğer "You Gonna O ihtiyacınız değil misin", biliyorum bunu ihtiyacımız olacak.

İnsanların ihtiyaç duyacaklarını düşündükleri özellikler hiçbir zaman kullanılmayacak olduğundan, pek çok sistemin aslında hiçbirini kullanmayan mimari sağlamlıkla boğulduğunu gördüm.

Kişisel felsefem, çalışabilecek en basit şeyi yapmak . Bununla birlikte, Başlarken ve Birlikte Bok Hacking arasında bir fark var. Bir amaçla kod yazmak, her şeyi herkese açık hale getirmek, her şeyi yapan blob sınıflarına sahip olmak veya "kötü" kodu gösteren düzinelerce başka şeyden herhangi biri gibi "kod kokusu" üreten şeyler yapmak anlamına gelmemelidir.


8

Bu bugün benim zihnimde doğru olarak değerlendirilir:

  • İdeoloji Üzerine Pragmatizm
  • (1) Çalıştırın (2) sonra düzeltin - 2. adımı unutursanız oyun biter
  • Bırak onu!
  • Çok fazla ön tasarım zaman kaybı olacak
  • TDD ve Clean Code daha basit, daha kararlı yazılım tasarımlarına yol açar

Bir oyun ortamında test odaklı geliştirme yapmayı detaylandırabilir misiniz? Bazı temel mantığın yanı sıra, bu tür şeyler için çok uygun olabilecek yüksek etkileşimli programlar bulamadım. Ayrıca,
dezavantaj

2
@Ranieri Grafik donanımı ve kullanıcı girişi ile arayüz oluşturan parçalar arasında bir çizgi çizerseniz, test basittir.
Jonathan Fischoff

@Ranier Teşekkürler, bağlantı düzeltildi. Etkileşimli simülasyonlar veya istemci-sunucu oyunları için önce testler yapmanın zor olabileceğini kabul ediyorum. Birim testlerinize ek olarak, muhtemelen belirli aralıklarla çalışan bazı üst düzey işlevsellik testlerine ve muhtemelen oynatma oturumlarına sahip olmak isteyebilirsiniz. Her durumda, ilk önce testleri düşünmek birçok senaryoda işe yarayacaktır. Gamedev.stackexchange.com/questions/1905/…
jmp97

5

Yazılım hızlı prototiplemenin arkadaşıyım. Özellikle oyun geliştirme sırasında. Hızlı öğrenme, test etme ve bir şeyler kullanma için iyidir. Donanım programlamaya yakın veya karmaşık algoritmalar benim için en iyi yöntemdir.

Theory();
RapidPrototype();
bool bOk = false;
while(!bOk)
{
 Testing();
 LotOfFixing();
 PlayingWith(); 
 bOk= AnalysingResults();
}
FinalFastAndNiceDataStructuresAndCode();

Rapid Prototype sürümümün uygun prototip kabuğuna sahip olması gerekir:

  • Direktifleri yapılandırmak ve değişkenleri veya verileri ayarlamak için maksimum kullanıcı dostu giriş arayüzü.
  • Kararlı istisnalar ve hataların ele alınması.
  • Hata ayıklama işlevi gibi çevrimiçi, ancak gerek duyduğunuz düzeyde.
  • Sonuçları tüm olası ve gerekli yollarla göstermek veya yakalamak için maksimum kolay çıkış arayüzü.

Avantajları:

  • RapidPrototype kabuğunu tüm gelişim sırasında geliştirebilirsiniz.
  • Kodunuzu birçok şekilde görebilir ve ayarlayabilirsiniz.
  • Sadece çözmeniz gereken teori ve problemlere odaklanabilirsiniz.
  • Projenin yeni bölümlerini hızlı bir şekilde geliştirebilir ve geri kalan son şeylerle deneyebilirsiniz.
  • İçerik doldurmada daha hızlı kullanmak ve daha sonra sonlandırmak için yeni şeyler sunabilirsiniz. (Özellikle korumalı alanda)
  • Pahalıları veya çözümleri başkalarına kolayca tanımlayabilir ve gösterebilirsiniz. İnternet üzerinden.
  • İşlevsel ve şeffaf prototip, nihai kod için en iyi bilgi kaynağıdır (herkes yapabilir).

Eğer iyi yaparsanız, sonunda ürününüzün gerçek hata ayıklama / öğrenme sürümünü olabilir.
Projemizde kullanıyoruz ve bundan memnunuz.


1
Döneme bağlı bir zaman veya başka bir tür kaynak öneririm, ancak bundan sonra (0) 'dan çıkıp başka bir prototip deneyin.

@Joe Wreschnig - Zaman planları AnalysingResults () içine dahil edilebilir, ancak RapidPrototype'i bir süre kullanabilir ve daha sonra bitirebilir veya planlara koyabilirsiniz. Daha sonra sonsuza kadar takılıp kaldım :). RapidPrototype'de işlevselliği de simüle edebilirsiniz. Pek çok açıdan prety faydalıdır.
samboush

1

Çevik yazılım geliştirmeye bir göz atın . Gümüş bir kurşun olmasa da, her ikisini de yapmayı amaçlamaktadır (tamamlayın ve sağlam bir yazılım tasarımına sahip olun).


2
"Bunu yap ve sağlam bir yazılım tasarımcısı" olduğunu iddia etmeyen herhangi bir geliştirme metodolojisi olduğunu düşünmüyorum.

@Joe Bence birçok "ağır siklet" metodoloji katı yazılım yerine CYA'yı tercih ediyor. Gerçekten de, çevik olmayan deneyimlerimin çoğu "doğru olması gerekmiyor, şu anda olması gerekiyor" olma eğilimindeyken, "çevik", şu anda olması gerektiğini, ancak devam ettikçe doğru şeyler yapabilir. "
dash-tom-bang

Çevik gelişimin kodun sağlam olup olmadığı üzerinde çok az etkisi olduğunu iddia ediyorum. Çevikliğin özü, tüm geliştirme zamanınızı sadece önemli olan şeylere harcamaktır. Kod kalitesi (veya teknik borç eksikliği) nadiren teslimattaki başarının bir ölçümü olduğundan, kod teslimat sırasında hala karışıklık olabilir.
Magnus Wolffelt
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.