Oyun içeriğini depolamak için bir veritabanı kullanmalı mıyım? [kapalı]


16

SFML kullanarak C ++ ile yazılmış bir 2D oyun var. Oyunu bir öğe veya veritabanına bir satır / giriş / satır ekleyerek öğeler veya varlıklar gibi içeriklerin kolayca eklenebileceği şekilde genişletilebilir yapmak istiyorum.

Programa derlenmesi gerekmeyen bir şey arıyorum, ancak bunun yerine çalışma zamanında okunabilir ve yazılabilir. Ne zaman bir veritabanı kullanmak uygun olur?


1
Lütfen ihtiyaçlarınızı daha iyi açıklayın. Veritabanları oldukça hızlı, ancak çok karmaşıktır. Gerçekten hıza ihtiyacınız var mı? Neden sadece bir metin dosyası kullanmıyorsunuz? Bir kıyaslama yaptınız mı?
Anko

Kaç eşyaya sahip olacaksın? Bir milyondan fazla mı? Metin dosyaları üzerinde bir veritabanı kullanmayı düşündüğüm eşik hakkında.
Philipp

Ben bir veritabanı bunun için gereğinden fazla olduğunu söyleyebilirim, sadece bir tür tanım listesi kullanın. Belki sadece düz metin. XML veya JSON'u düşünün.
Hugo Zink

1
Ben de XML veya JSON öneririz. XML'i tercih ederim çünkü benim için insan olarak daha okunabilir, ancak JSON da iyi bir seçim.
Draco18s artık SE

Veri sistemleri veya oyunlarda nasıl uygulandıkları hakkında çok fazla bilgi sahibi olduğumu iddia etmeyeceğim, ancak Microsoft'un basit uygulamalarının çoğu (çok fazla sahip olmayan) için mikro veritabanı uygulamaları kullanma eğiliminde olduğunu söyleyeceğim. veri veya veritabanı dışı ihtiyaçlar, ancak "ilişkiler" vb. Kullanım kolaylığı göz önünde bulundurulduğu sürece mantıklı olabilir. (Kötü fikir: Veri doğruluğunu zorunlu kılan süper resmi bir XML ad alanı kullanma)
Katana314 14:15

Yanıtlar:


26

Bir veritabanını yalnızca veritabanına ihtiyacınız varsa kullanın. Yani:

  • Sık sık karmaşık sorgular gerçekleştirmeniz gerekiyorsa.
  • Karmaşık veri ilişkileriniz varsa.
  • Veri ise büyük ve olduğu muhtemeldir belleğe sığdırmak için değil.

Oyununuzun verileri bu koşullardan herhangi birini karşılıyorsa, bir veritabanı kullanmaktan faydalanabilirsiniz. Bunların çok yaygın olmadığını ve muhtemelen hiçbirini tatmin etmediğinizi unutmayın. Eğer yaparsanız, SQLite ya da çalışan bir sunucu gerektirmeyen ve sadece bir kütüphane olmak gibi benzer bir fikri olan bir şeyle giderdim .

Aksi takdirde, dosyaları kullanın ve başlangıçta verileri belleğe yükleyin. Oyunun değiştirilebilir olmasını istiyorsanız, bu verileri hem oyununuzun dizininden hem de modların dizinlerinden yükleyin ve çakışan bilgilerin nasıl birleştirilebileceğini tanımlayın.

Ayrıca eğer, unutmayın yapmak bir veritabanı kullanmak, bu hem sizin hem de Modlar geliştiriciler hala sadece zaman oyun yükleri başlangıç verileri okumak ve veritabanı oluşturmak için dosyaları kullanmak yarar olabilir. Bu veritabanının potansiyel boyutu çok büyük olmadığı sürece (yani birkaç düzineden fazla MiB), SQLite'de veritabanı yolu olarak belirleyerek mümkün olan bir:memory: bellek içi veritabanı kullanmak isteyebilirsiniz .


3
SQLiteİhtiyaçlarınız "karmaşık" veya "büyük" olmasa bile, son derece dikkate alırım . Aslında böyle küçük ve gömülü bir şeyle parmaklarınızın ucunda bir veritabanı bulundurmaktan çok faydalanabileceğiniz birçok neden var.
wjl

Ayrıca, mobil plataformlar bazı bilgileri saklamak için veritabanlarını kullanır. Android SQLite kullanıyor. Bu, mobil plataforms için yaptığınız çalışmaların çoğunun zaten yapıldığı anlamına gelir (veri işleme açısından). Ayrıca, SQLite kurmak ve SQLite verilerini düzenlemek çok kolaydır ( SQLite Studio veya benzeri programlarla ). SQLite kullanmaksa, en iyi seçenek V3 kullanmak olacaktır. Ama bunun dışında, spot!
Ismael Miguel

@wjl: Kabul edildiğinde, normalleştirme ve referans bütünlüğü kısıtlamalarının faydaları, daha küçük oyun veri setleri için bile buna değer. (Şimdi sadece uygun referans bütünlüğü kısıtlamaları yapmak için SQLite elde etmek böyle bir acı olmasaydı ...)
Mason Wheeler

Bu ilişkisel veritabanı kullanımına karşı bir argüman . Basit bir dizinlenmiş anahtar / değer deposu yine de faydalı olabilir.
Mark

1
@Mark Oyunda bir anahtar / değer deposu kullanacaksanız, hafızada bir hashmap veya benzeri bir şey de olabilir.
Darkhogg

5

Oyun geliştirme için MongoDB'yi gerçekten çok seviyorum, gerçekten iyi bir performansa sahip ve gerçekten esnek, kullanımı kolay ve json tabanlı.

NoSQL Arch olduğu için herhangi bir koleksiyonda ihtiyacınız olan herhangi bir alanı ekleyebilirsiniz, böylece oyunlar gibi herhangi bir "dinamik" çevreye gerçekten iyi uyuyor.

Bir göz at .

Bir çeşit MMO Turn tabanlı strateji oyunu geliştiriyorsanız, muhtemelen CouchDB hakkında okumalısınız , gerçekten iyi bir versiyonlama sistemine sahip bir NoSQL Veritabanı.


İyi bir cevap değil. Soru "hangi veritabanını kullanmalıyım" değil, "hiç bir veritabanını kullanmalıyım" idi.
uliwitness

1

CastleDB iyi bir seçenektir çünkü daha sonra bir veritabanını JSON dosyasına dönüştüren bir editördür. Düz metin dosyasının en iyisi olduğunu söyleyen birçok cevap gördüm, bu yüzden CastleDB muhtemelen her iki dünyanın da en iyisi.


Kötü bir cevap değil, ama soruyu özlüyor. Soru "hangi veritabanını kullanmalıyım" değil, "hiç bir veritabanını kullanmalıyım" idi.
uliwitness
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.