oyun durumunu (profilleri) kaydetmek için en çok kullanılan yöntem veya algoritma nedir, şifreleme nasıl yapılır metin dosyaları ve ilgili şeyler veritabanları.
Sezar IV'ün mySQL kullandığını gördüm.
herhangi bir öneri.
oyun durumunu (profilleri) kaydetmek için en çok kullanılan yöntem veya algoritma nedir, şifreleme nasıl yapılır metin dosyaları ve ilgili şeyler veritabanları.
Sezar IV'ün mySQL kullandığını gördüm.
herhangi bir öneri.
Yanıtlar:
Çoğunlukla özel (ikili) bir formatta yapıldığından eminim, sadece bir dosyaya kullandığınız oyun durumu yapısından her değişkeni yazıyor veya bu dosyayı yapının bir örneğine geri okuyor. Örneğin C ++ 'da bir nesneye bayt dizisi gibi davranabilir ve sadece bir dosyaya fwrite () ya da dosyadan fread () oluşturabilir ve nesne formuna geri döndürebilirsiniz.
Java veya başka bir dil kullanıyorsanız , görevi gerçekten kolaylaştırmak için serileştirmeyi kullanmayı seçebilirsiniz . Java açıklaması bu cevabın altındadır; diğer diller (C ++ 'dan daha yüksek düzey) mutlaka kendi serileştirme kitaplıklarına veya yerleşik işlevlere sahiptir; Serileştirme rutini ne kadar verimsiz olursa olsun, günümüzde sabit disk alanı ucuzdur, özellikle de oyun durumu çok büyük olmamalı ve kendi serileştirme rutinlerinizi yazmanızı ve korumanızı engeller .
Kesinlikle gerekir değil (sadece ilk cümlesini okumak MySQL kullanmayı Bu derlemede ). Herhangi bir nedenle gerçekten ilişkisel bir veritabanına ihtiyacınız varsa , SQLite kullanın ; hafif bir veritabanı sistemidir ve tek bir veritabanı dosyasında bulunur. Ancak çoğu oyun için ilişkisel veritabanları gitmenin yolu değildir ve bunları kullanmaya çalışan şirketler genellikle gerçek bir ilişkisel veritabanı yerine anahtar / değer arama tablosu olarak kullanılır.
Yerel disk dosyalarının her türlü şifrelenmesi sadece gizlidir ; herhangi bir hacker programınızın şifresini çözdükten hemen sonra verileri koklar. Şahsen ben bu tür şeylere, özellikle de tek oyunculu oyunlara karşıyım. Benim görüşüme göre, oyun sahiplerinin (ödeme yapan müşteriler, aklınızda olsun) isterse oyuna hack etmelerine izin verilmelidir. Bazı durumlarda daha büyük bir topluluk hissi yaratabilir ve oyununuz için size daha fazla müşteri çekecek "modlar" geliştirilebilir. Akla gelen en yeni örnek , yakın zamanda piyasaya sürülen Minecraft'ta Portal modudur. İnternet üzerindeki oyuncu haber sitelerinde yayınlandı ve Minecraft'ın satışlarını artırdığını iddia edebilirsiniz.
Herhangi bir nedenden dolayı benim gibi oyun geliştirme için Java'yı kullanmak için yeterince çılgınsanız, Java'da seri hale getirmenin hızlı bir açıklaması:
Bir sınıfta oyun durumu tüm verileri tutun uygulayarak sınıf seri hale getirilebilir yapmak
Serializable
, kullanmaktransient
size (geçici nesneler tefrika değildir) sınıfa özel örneklenmiş değişkenler karıştırın eğer anahtar kelime ve sadece kullanımObjectOutputStream
dosyaya yazma veObjectInputStream
dosyadan okuma . Bu kadar.
[field: NonSerialized]
C ++ 'da kendi kodunuzu yazıyorsanız, ikili dosyaları kullanabilirsiniz . İkili dosyalar, gizleme yoluyla size bir şifreleme biçimi sağlar. Ancak tüm internette belgelendiği gibi, bu çok zayıf bir güvenlik şeklidir.
VEYA, insan tarafından okunabilir bir çözüm istiyorsanız RapidXML gibi bir şey kullanabilirsiniz .
Bir çeşit çerçeve kullanıyorsanız, dosya destek işlevlerine bakın. HTH
Gördüğüm çoğu oyun ikili dosyaları okumak / yazmak için sadece elle yazılmış kodu kullanır. Genellikle, disk üzerinde format, bir nesnenin bellek düzeninin tam bir kopyası olacaktır, bu nedenle yükleme sadece:
Hızlı, ancak bakımı, platforma özgü ve esnek olmayan bir angarya.
Son zamanlarda, birkaç oyunun SQLite kullandığını gördüm. Konuştuğum insanlar hoşuna gidiyor gibi görünüyor.
Serileştirme diğer bazı cevaplarda belirtilmiştir ve bunun makul bir çözüm olduğunu kabul ediyorum. Başarısız olmasının bir yolu sürüm oluşturmadır.
Oyununuzu serbest bıraktığınızı ve insanların oynadığını ve bazı kaydetme oyunları oluşturduğunu varsayalım. Daha sonra bir yamada bir hatayı düzeltmek veya bazı özellikler eklemek istersiniz. Basit bir ikili serileştirme yöntemi kullanırsanız ve sınıflarınıza bir üye eklerseniz serileştirmeniz, müşteriler düzeltme ekinizi yüklediğinde eski kaydetme oyunlarıyla uyumlu olmayabilir.
Bu nedenle, hangi yaklaşımı kullanırsanız kullanın, oyunu ilk kez bırakmadan önce bu sorunu düşündüğünüzden emin olun! Müşteriler bir yama uyguladıktan sonra baştan başlamak zorunda kalmazlarsa mutlu olmazlar.
Bundan kaçınmanın bir yolu, her temel veri türünün, oyunun her sürümü için hangi verilerin kaydedileceğini ve yükleneceğini bilecek kadar akıllı olan Kaydet (sürüm) ve Yükle (sürüm) yöntemlerini uygulamasını sağlamaktır. Bu şekilde, kaydetme oyunlarınızın geriye dönük uyumluluğunu destekleyebilir ve bir kullanıcı, oyunun çalıştığından daha yeni bir sürümünden bir kaydetme oyunu yüklemeye çalışırsa zarif bir şekilde başarısız olabilirsiniz.
Seviyelerinizi saklamak için kullandığınız formatın aynısını kullanabiliyorsanız, bu bir bonus demektir.
Örneğin, Peggle gibi bir oyunun ilk masa düzeni, top sayısı, mevcut skoru (ilk masa için 0) vb. Olabilir. Sonra kaydedilmiş bir oyun tamamen aynı formatı kullanabilir.
Aynı biçimi kullanırsanız, oyunu kaydet ve seviye yükü işinizi kolaylaştıracak kodu paylaşabilir!
Gerçekten büyük harita dosyaları olan bir oyun için, kaydetme oyunu referans olarak harita dosyasını içerebilir. Başlangıç seviyesindeki dosyalar da aynı şeyi yapabilir, bu da, bazı nedenlerden ötürü hikayenin karakteri aynı yere geri dönmesi durumunda, bu haritaya geri dönmeyi de kolaylaştırır, ancak bazı NPC'lerin ölmesi ve hepsinin yanında ölü bedenler olması bitmiş.