Oyun geliştirmenin diğer yazılım geliştirmeden farkı nedir? [kapalı]


18

Sağlam bir genel amaçlı yazılım geliştiricisi için, oyun geliştirme konusunda temelde veya sadece derece farklarında özellikle farklı olan nedir?

Tic-tac-toe, Tetris ve kaba kuvvetli sudoku çözücü (UI ile) gibi oyuncak oyunları yaptım ve şimdi orta ölçekli bir projeye başlıyorum (tek bir geliştirici olmak için orta büyüklükte Bu özel projeyle bulduğum bir şey, endişelerin ayrılmasının çok daha zor olması, çünkü her şey devleti etkiliyor ve her nesne diğer nesnelerle sayısız yolla etkileşime girebiliyor.

Şimdiye kadar kodu tatmin edici bir şekilde temiz tutmayı başardım ama önemsiz olmayan oyunlarda temiz kod tutmanın günlük işimden çok daha zor olduğunu düşünüyorum.

Üzerinde çalıştığım oyun sıra tabanlı ve grafikler oldukça basit olacak (web tabanlı, çoğunlukla DOM manipülasyonu yoluyla), bu yüzden gerçek zamanlı ve 3d çalışma benim için gerçekten geçerli değil, ama yine de ilginç olanlar ile ilgili cevaplarla ilgileniyorlar. Çoğunlukla genel oyun mantığıyla ilgileniyor.

PS Bunu etiketlemek için çekinmeyin, hangi etiketlerin geçerli olduğundan emin değilim.

Yanıtlar:


23

Büyük bir fark var. Bence, gerçekten önemli olan tek fark bu.

Neden farklı olduğuna dair teknik detayları gözden geçirebiliriz, elbette. 3D motorlar, parçacık fiziği, birçok farklı şey devreye giriyor.

Ancak birçok farklı yazılım biçiminde dizeler bulunur. Modelleme yazılımı aynı şeyleri yapmak zorundadır. Her önemli yazılım parçasının kullanması gereken bazı özel kütüphaneleri vardır.

Peki OYUNLARI farklı kılan nedir?

İşte: Yazılım bir iş ihtiyacını karşılamak için tasarlanmıştır. Bir envanter sistemi ister misin? Ne tür öğeleri işleyeceğinizi tanımlayabilirsiniz. Üretim programlamanız için ne istediğinizi tanımlayabilirsiniz. Bunların hepsini yapabilirsiniz. Veya bankacılık yazılımı istiyorsanız, onunla ne yapmak istediğinizi tanımlayabilirsiniz.

Oyunlarla işinizin ihtiyacı "eğlencelidir". "Eğlence" için teknik şartname yazmayı deneyin.

Bir geliştirici olarak benim düşünceme göre, oyunları normal yazılımdan farklı kılan şey budur. "Harika! Bu yazılım artık müşterinin isteklerine göre tam özellikli!" Diyemezsiniz. çünkü tek yapmak istedikleri eğlenmek.

Bununla birlikte, eğlenceli bir şey için 3d grafiklere ve abartılı fiziğe ihtiyacınız yok. İnsanlar neden hala Tetris oynuyor? Fiziği, "bloğu aşağı taşı", "bloğun sınırların dışına çıkmasına izin verme" ve "bir şeye çarptığında bloğu durdur" dan oluşur ve yıllar boyunca, bazıları diğerlerinden daha meraklı grafiklere sahip olan çok sayıda sürüm vardır, ancak alt satırda - eğlenceli !!

Harika bir oyun geliştiricisi olmak istiyorsanız, normal bir yazılım geliştiricisi olarak öğrendiklerinizi atmayın. Hala çok faydalı şeyler. @Sion, normal bir yazılımda olduğu gibi bileşenlerinizi ayırmak konusunda haklıdır. Ancak oyununuza ekleyebileceğiniz en önemli özellik eğlenceli. Eğlenceli eğlence eğlenceli eğlence eğlence. Bu nedenle oyun geliştirme var, oyununuzu başarılı kılmak için ihtiyacınız olan şey bu. Ve bu güven bana bana güven bu oynamak için eğlenceli, yapmak için en az 10x eğlenceli !!

Oyun geliştirme ile iyi şanslar !! : D


2
Eğer "eğlenceyi" yararlı "ile değiştirirseniz, bir ürün tasarımı ile aynı problemle karşılaşırsınız (bir müşteri için yazılım yazmanın aksine). Sanırım derece arasında bir fark var. İnsanlar bazen neyin yararlı olacağı konusunda yanılıyor, genellikle bir şeyi kendilerine neyin "eğlenceli" kıldığı konusunda clueless. (+1 olsa da)
Davy8

1
Yetişkin film endüstrisi ve 60'lı yıllarda "hardcore" olarak sınıflandırılan şey hakkında meşhur bir yüksek mahkeme kararı vardı. Adalet "Asla [tanımlamakta başarılı olamadım ama gördüğümde biliyorum” dedi. Bence aynı şey eğlence için de söylenebilir. Demek istediğim, oyunlarla ilgili sevdiğim şeyleri not edebilirim, ancak kendimi sık sık bir oyun oynarken ve kendime "Bu eğlenceli yapan nedir?" (Açıkçası bilmek istiyorum, bu yüzden oyunlarımdan birinde yeniden oluşturabilirim !!) İnsanlar neyin eğlenceli olduğunu bilmiyorlar, ama ne zaman bulduğunu kesinlikle biliyorlar!
corsiKa

bu gönderiyi gerçekten beğendim. Çok doğrusun. Oyun geliştirmeyi gerçekten çok seviyorum ama sıradan insanlara “eğlenceli” nin ne olduğunu görmek gerçekten içimde değil. Bu sadece benim ve benim gibi diğer bazı loblar gibi oyunlar yapmak etkisi oldu :)
Phil

1
@Phil ve bu iyi. Sizin için neyin eğlenceli olduğunu biliyorsanız, bu dünyada sadece birkaç yüz karakter arketipleri olduğunu hatırlamanız gerekir. İş yerinize bakın ve iş arkadaşlarınızın kişiliklerini lise veya koleje gittiğiniz kişilerle eşleştirin. Bunların çoğunun eşleştirilebileceğini göreceksiniz. Eğer bir şey sizin için eğlenceli ise, muhtemelen sandığınızdan daha fazla insan için eğlenceli olacaktır. Hile onları oyun hakkında bilgi almak için böylece zevk!
corsiKa

Bu şimdiye kadar gördüğüm en iyi cevap. Yazılım iş niş fikirleri ve benzeri için tonlarca makale vardır, ancak oyun geliştirme hakkında çok fazla değil. Hmmmm.
johnny

21

Öncelikle bir oyun geliştiricisiyim, geleneksel bir yazılım geliştiriciyim, ancak bence birkaç önemli fark var.

Açıkçası bunlar birkaç genellemedir ve kapsamlı değildir:
Daha büyük takımlar. Daha çeşitli arka planlar (sanatçılar, programcılar, yapımcılar, her biri ile daha da fazla varyasyon vardır). Daha uzun geliştirme döngüleri. Daha yüksek performans standartları. Daha büyük ölçekli projeler. Daha büyük ve daha pahalı arıza riski. Daha stresli bir ortam.

Nesne etkileşimlerine ve mimarinizi ortaya koymaya gelince, sistemleri hala düzgün bir şekilde ayırabilirsiniz. Oyun nesneleriniz ve davranışlarınız açıkça birbirine ve bu sistemlere bağımlı olacaktır. Oyunun doğası budur (pun amaçlı), tüm bu sistemleri tek bir uyumlu birimde birleştirir ve bunda yanlış bir şey yoktur. Öyle görünebilir çünkü hepsinin ölçeği alışık olduğunuzdan daha büyük.

Bazı kolayca tanımlanabilen ve ayrılan sistemler?

  • Çarpışma algılama
  • Çarpışma Tepkisi
  • Fizik
  • Animasyon
  • Grafikler (2D ve 3D)
  • Yapay zeka
  • Kullanıcı Girişi
  • Dosya Girişi / Çıkışı

Her ne kadar oyunum için bunlara iyi bakmama rağmen +1 iyi bir cevap için (sırayla ve kiremit tabanlı olmak zorunda değilim, bu yüzden gerçek çarpışmalar, fizik yok, grafikler spritelardan oluşuyor ve daha fazla JQuery atıyor 2 oyuncu bu yüzden henüz AI yok, kullanıcı girişi çoğunlukla RESTful bir şekilde ele alınır ve bu da ağ oluşturma yönünü de kapsar) Dosya IO ile ne demek istediğinizi tam olarak bilmiyorum. oyunlarda ne tür ES gerekir?
Davy8

4
Bu yazının çoğuna katılıyorum ve benden +1 alıyor, ancak "daha büyük ve daha pahalı başarısızlık riski" hattını sorgulamak istiyorum. Bir banka veya büyük bir üretim firması veya çok yüksek trafikli bir web sitesinde çalışıyorsanız, başarısızlığınız, başarısızlığın bir sonucu olarak dakikada yüzbinlerce kesintiye kadar ölçülebilir. Bir saat içinde, bazı oyun geliştirici mağazalarından aylarca süren tam bordrodan (kayıp satışlarda, kayıp müşteriler vb.) Daha fazlasını kaybedebilirsiniz. Büyük olamaz demiyorum, sadece geleneksel yazılımdan daha büyük olduğuna ikna olmadığımı söylüyorum.
corsiKa

@glowcoder Ne dediğini biliyorum ama Sion'un anlatmaya çalıştığı noktayı da anlıyorum, oyunlarda genellikle ya tüm proje bir başarı ya da bir başarısızlıktır ve genellikle cevabında bahsettiğin bir faktördür. : eğlenceli mi? Hatalar için düzeltmeler yapabilirsiniz, ancak eğlenceli bir eksikliği düzeltemezsiniz.
Davy8

3
Genelleme olarak bile "büyük takımların" doğru olduğuna ikna olmadım. Elbette, AAA oyunlarının büyük takımları var - ancak karmaşıklığa eşdeğer oyun dışı yazılım ürünleri de. Çok sayıda oyun iki veya üç kişilik kişiler veya takımlar tarafından üretilir.
Peter Taylor

@ Davy8 oh bir oyunun sadece ticari başarısı ne kadar eğlenceli olduğu ile orantılıysa. :)
tenpn

2

Oyun programlamanın diğer uygulama alanlarından farklı olduğunu düşünmüyorum, çünkü endişelerin doğru ayrılmasını seçmek zor. Yeteneklerinizi farklı türde bir uygulama alanına götürdüğünüzde, geçişin umduğunuz kadar pürüzsüz olmadığını göreceksiniz, çünkü her zaman farklılıklar vardır. Veritabanı uygulamanızda işe yarayan, gömülü uygulamanızda çok iyi çalışmayan birçok desen / deyime sahiptir; bu, birçok desen / deyime sahip gerçek zamanlı sistemde çok iyi çalışmayan birçok desen / deyime sahiptir. oyun programlamasında çalışmaz. Ancak, oyun programcıları oyun programlama alanlarından ayrıldıklarında aynı problemlere sahiptirler. Hepsi sadece alışık olduğunuz şeyle ilgili.

Bununla birlikte, oyun programlamanın birçok insan için daha zor göründüğünü söyledi, çünkü çoğu programcının gerçek işlerinde (düşük seviyeli grafikler ve sesler) ve birçok uygulamasından daha fazla uygulamalı matematikle uğraşmak zorunda olmadığı bilgisayar parçalarıyla çalışmanızı gerektirir. insanlar endişelerin ayrılması nedeniyle değil, rahattırlar. Endişelerin ayrılması için doğru seçimi belirlemede her zaman zorluklar olsa da, yaşadığınız endişelerin ayrılmasının zorluğu sadece yeni bir problem alanına geçmektedir. Birkaç uygulama oluşturduktan sonra başka bir şey gibi olacak, neyi sevdiğinizi öğrenecek ve neyi kullanmadığınızı kullanamayacaksınız.


0

ve bu özel projede bulduğum bir şey, endişelerin ayrılmasının çok daha zor olması, çünkü her şey devleti etkiliyor ve her nesne diğer nesnelerle sayısız yolla etkileşime girebiliyor.

Sanırım burada bir cevabınız var, birçok etkileşim var. XNA (C #) ile birkaç oyun yaptım, şimdi dediğin gibi orta boyutlu bir oyun yapıyorum, bir strateji simülasyon oyunu, neredeyse 2 aydır üzerinde çalışıyorum ve yardımsız olarak tek başıma yapıyorum, bu yüzden ben kodumu basit tutmalıyım. Sanırım büyük bir fark, işlevsellik için bazı sınıfları anlamak ve çizim yapmak için diğer sınıfları anlamak ve tasarlamaktır, bu programınızı daha temiz hale getirir. Tabii ki, bir oyun yapıyorsanız, görüntüler (2d veya 3d) ve müzik (veya sesler) gibi daha fazla kaynağa ihtiyacınız var. Yani farklılıklar var, bence daha zor, ama çok komik.


0

Oyun Programlamanın daha eğlenceli olduğunu düşünüyorum. Oyununuzu sürekli olarak test edebilirsiniz, farklı fizik uygularsınız, bu da farklı davranışlarla sonuçlanır.

Deneyimlerime göre, oyun programlama aslında yazılım geliştirmeye kıyasla çok daha eğlenceli. Yazılım geliştirmede uymanız gereken bazı iş kurallarınız var, biraz sıkıcı oluyor. Bir yazılım oluşturuyorsunuz, eğlenceli değil. Yazılım kullanmak harika, yararlı, kullanışlı, ama eğlenceli değil.

Oyunlar eğlencelidir. Belki de sadece ben, ama oyun geliştirme ne olursa olsun oyun geliştirme geleneksel yazılım geliştirmekten çok daha ilgi çekici ve heyecan verici buluyorum.

PS: Yazılım geliştirme, HTML5, Asp.Net, C #, vb için en son araçları kullanıyorum. Hala DirectX, UDK, XNA, Unity kodlamak için daha eğlenceli buluyorum.

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.