Bagaimana saya membuat sistem kata sandi untuk game pemain tunggal seperti yang digunakan di game konsol yang lebih lama?
Misalnya, Mega Man X menyimpan pekerjaan dengan memberi Anda serangkaian angka yang dapat Anda masukkan nanti untuk memuat penyimpanan Anda.
Jawaban:
Pertama, uraikan status permainan Anda (atau lebih tepatnya, aspek status yang ingin Anda simpan). Dalam kasus gim gaya Mega Man, Anda dapat melacak bos level akhir mana yang telah Anda bunuh, jumlah powerup seperti tangki energi yang Anda miliki, dan sebagainya.
Kemas semua data itu ke dalam bidang bit, yaitu, tetapkan jumlah bit yang sesuai untuk setiap nilai:
Contoh kami memiliki total 8 bit, yang berarti satu karakter dapat mewakili kata sandi. Dalam praktiknya, gim Anda cenderung memiliki lebih banyak status dan karenanya membutuhkan lebih banyak bit total dan lebih banyak karakter. Seperti disebutkan dalam komentar di sini dan di tempat lain dalam pertanyaan ini, pendekatan ini berfungsi untuk game "retro" atau game lain di mana ukuran kondisi game yang ditangkap masuk akal. Di luar titik tertentu, Anda mungkin menemukan bahwa kompleksitas kata sandi yang diperlukan untuk menyandikan negara Anda terlalu besar.
Untuk mengurangi kemungkinan pengamatan kasual memecahkan kata sandi, Anda dapat mengubah tata letak bit sehingga Anda memperkenalkan bit dummy (yang tidak memiliki efek pada kondisi permainan tetapi yang membuat kata sandi terlihat berbeda ketika Anda menafsirkan semua bit sebagai karakter) atau menjalankan itu melalui beberapa operasi hash-seperti reversibel untuk mengacak bit di sekitar sehingga semua bit " kotak X dibunuh " tidak tepat di sebelah satu sama lain, membuat kata sandi sekuensial yang sesuai terlihat sangat berbeda, atau memperkenalkan nilai checksum.
Jika Anda menggali, ada sedikit informasi tentang sistem yang digunakan untuk beberapa permainan kata sandi yang lebih populer di luar sana:
Anda dapat membaca tentang itu untuk inspirasi tambahan.
sumber
Game-game itu hanya menyelamatkan negara yang saya percayai. Kata sandi hanya merujuk pada level yang akan dimuat. Cukup gunakan kamus untuk hal seperti ini.
Jika sedikit lebih rumit seperti memiliki senjata atau penguat tertentu, Anda dapat mengenkripsi status ke kode hash pendek (tapi cukup panjang).
Tapi saya sangat menyarankan Anda untuk tidak menggunakan ini. Kata sandi akan menyebar dengan cepat di Internet dan segera semua orang telah memenangkan permainan Anda.
sumber
Yah, pada dasarnya Anda bisa melakukannya dengan cara ini:
Atasan terbunuh = 7
Jumlah koin = 36
Owns Sword = 0 (Tidak)
Owns Heart = 1 (Ya)
Level Saat Ini = 6
Dunia Saat Ini = 9
Kesehatan = 100
Kode = 7V36R0A1T6O9A100
Pada dasarnya setiap huruf memisahkan Jenis
sumber
Sementara solusi seperti sistem karakter-ke-negara Josh Petrie memiliki manfaat (ukuran simpan kecil, bekerja pada semua salinan permainan), mereka menggabungkan desain game dan sistem keadaan untuk secara intrinsik ke sistem kata sandi. Setiap perubahan pada kata sandi atau status atau desain dan seluruh sistem berantakan.
Solusi yang jauh lebih sederhana adalah membangun sistem penyimpanan Anda seperti biasa, dan cukup menambahkan sistem kata sandi di atasnya. Ini bisa sesederhana menyimpan kata sandi di save (mungkin dua kali lipat sebagai nama file) dan memvalidasinya saat dimuat, atau serumit menggunakan salah satu dari banyak perpustakaan enkripsi di sekitarnya (yang cukup sepele).
Tampaknya ada beberapa kebingungan di sekitar jawaban ini.
1) Operator hanya meminta kata sandi yang memungkinkan mereka memuat save ... tidak ada persyaratan bahwa kata sandi harus disimpan.
2) Banyak game saat ini memiliki persyaratan penyimpanan yang signifikan, kami baru saja membangun sistem save / load cepat secara internal yang menghasilkan file 10MB ... untuk game kuis! Sistem penyimpanan Josh Petrie , sementara valid sangat terbatas - segera setelah sistem toko menjadi non-sepele, kata sandi harus sangat panjang untuk bertahan semua data terkait.
Misalnya, apa yang terjadi jika ada 30 bos? 20 medali? Apakah kita setengah jalan menuju prestasi? Di level apa dia? Berapa banyak bit yang kita sisihkan untuk kesehatan, kehidupan, koin, xp? Bagaimana jika snapshot bukan dari keadaan di antara level ... tetapi setengah jalan melalui level - posisi pemain, musuh, proyektil, medan yang hancur / berubah tiba-tiba menambah banyak kondisi yang perlu disimpan.
Untuk perspektif, dengan asumsi alfabet 30 karakter dan kata sandi sepuluh huruf, kami memiliki informasi untuk menyimpan sekitar 50 bit. Ini tidak biasa untuk melihat penggunaan game / mesin hingga 320 bit hanya untuk menyimpan posisi, rotasi, dan penskalaan objek tunggal. Tentu, Anda dapat melakukan segala macam trik pengoptimalan untuk melakukan lebih banyak dengan lebih sedikit ... tetapi pada akhirnya Anda menggunakan waktu yang didedikasikan untuk membuat permainan menjadi menyenangkan - salah satu optimasi terburuk yang dapat Anda lakukan.
sumber