Pelajari cara menggabungkan fitur simpan dan muat progres game untuk pengalaman bermain game yang mulus.

Dalam pengembangan game modern, kemampuan untuk menyimpan dan memuat progres game adalah fitur penting yang meningkatkan pengalaman dan keterlibatan pengguna. PyGame, perpustakaan populer untuk membuat game 2D dengan Python, menyediakan alat yang diperlukan untuk mengimplementasikan fitur simpan dan muat dengan mudah.

Membuat Game Sederhana

Sebelum memulai, pastikan Anda sudah pip diinstal pada perangkat Anda. Setelah menginstal pip, jalankan perintah di bawah ini untuk menginstal pygame modul:

pip instal pygame

Untuk mengilustrasikan penerapan sistem simpan dan muat di PyGame, mulailah dengan membuat game sederhana.

Kode yang digunakan dalam artikel ini tersedia di sini repositori GitHub dan gratis untuk Anda gunakan di bawah lisensi MIT.

Dalam permainan ini, pemain akan memiliki kemampuan untuk bergerak ke kiri dan ke kanan. Berikut adalah cuplikan kode contoh yang menunjukkan struktur dasar game:

instagram viewer
impor pygame

# Inisialisasi Pygame
pygame.init()

# Siapkan jendela permainan
lebar_jendela = 800
jendela_tinggi = 600
jendela = pygame.display.set_mode((lebar_jendela, tinggi_jendela))
pygame.display.set_caption("Tutorial Simpan dan Muat Sistem")

# Variabel permainan
pemain_x = 400
pemain_y = 500
kecepatan_pemain = 5

# Putaran permainan
berlari = BENAR
ketika berlari:
untuk peristiwa di dalam pygame.event.get():
jika event.type == pygame. BERHENTI:
berlari = PALSU

kunci = pygame.key.get_pressed()
jika kunci[pygame. K_LEFT]:
player_x -= kecepatan_pemain
jika kunci[pygame. K_KANAN]:
player_x += kecepatan_pemain

# Bersihkan layar
jendela.isi((0, 0, 0))

# Gambar pemainnya
pygame.draw.rect (jendela, (255, 255, 255), (pemain_x, pemain_y, 50, 50))

# Perbarui tampilan
pygame.display.flip()

# Keluar dari permainan
pygame.berhenti()

Mengelola Status Game dan Persistensi Data

Sebelum menerapkan fungsi simpan dan muat, Anda perlu menetapkan cara untuk mengelola status game dan menyimpan data. Salah satu pendekatan yang umum adalah untuk menggunakan kamus Python untuk menyimpan data game yang relevan. Berikut adalah contoh bagaimana Anda dapat memodifikasi kode sebelumnya untuk menyertakan manajemen status game:

# Variabel permainan
status_permainan = {
'pemain_x': 400,
'pemain_y': 500
}

# Putaran permainan
berlari = BENAR
ketika berlari:
# ...

kunci = pygame.key.get_pressed()
jika kunci[pygame. K_LEFT]:
status_permainan['pemain_x'] -= kecepatan_pemain
jika kunci[pygame. K_KANAN]:
status_permainan['pemain_x'] += kecepatan_pemain

# ...

pygame.display.flip()

Menerapkan Fungsi Simpan dan Muat

Untuk mengaktifkan menyimpan dan memuat progres game, Anda dapat memanfaatkan built-in Python acar module, yang memungkinkan kita untuk membuat serial dan deserialize objek Python. Buat file baru bernama save-game.py dan tambahkan kode dengan pembaruan di bawah ini:

status_permainan = {
'pemain_x': pemain_x,
'pemain_y': pemain_y
}

# Simpan status game
defsave_game_state(status_permainan, nama_berkas):
mencoba:
dengan buka (nama_berkas, 'wb') sebagai mengajukan:
pickle.dump (game_state, file)
mencetak("Kondisi game berhasil disimpan!")
kecuali Kesalahan IOE:
mencetak("Kesalahan: Tidak dapat menyimpan status permainan.")

# Muat status permainan
defload_game_state(nama file):
mencoba:
dengan buka (nama_berkas, 'rb') sebagai mengajukan:
game_state = pickle.load (file)
mencetak("Kondisi game berhasil dimuat!")
kembali game_state
kecuali (IOError, acar. UnpicklingError):
mencetak("Kesalahan: Tidak dapat memuat status permainan.")

# Putaran permainan
berlari = BENAR
ketika berlari:

# ...

kunci = pygame.key.get_pressed()
jika kunci[pygame. K_LEFT]:
player_x -= kecepatan_pemain
status_permainan['pemain_x'] = pemain_x
jika kunci[pygame. K_KANAN]:
player_x += kecepatan_pemain
status_permainan['pemain_x'] = pemain_x

jika kunci[pygame. K_s]:
save_game_state (status_game, 'save_game.pickle')
jika kunci[pygame. K_l]:
game_state = memuat_game_state('save_game.pickle')
player_x = status_permainan['pemain_x']

# ...

# ...

Di bawah ini adalah outputnya:

Merancang Antarmuka Pengguna untuk Menyimpan Slot

Untuk menyediakan antarmuka simpan dan muat, Anda dapat menampilkan slot penyimpanan yang memungkinkan pemain memilih slot mana yang akan disimpan atau dimuat. Untuk contoh ini, opsi ditampilkan di konsol, tetapi Anda dapat menggunakannya Kerangka kerja GUI Python untuk membuat antarmuka yang lebih ramah pengguna.

Membuat simpan_slot daftar yang mewakili slot penyimpanan yang tersedia. Juga, tambahkan a slot_terpilih variabel untuk melacak slot yang dipilih oleh pemain.

Menampilkan slot penyimpanan yang tersedia saat pemain menekan tombol simpan (K_s). Pemain dapat memilih slot dengan menekan tombol angka yang sesuai (K_1, K_2, atau K_3). Jika sebuah slot dipilih, status permainan disimpan ke file yang diberi nama setelah slot yang dipilih.

Begitu pula saat pemain menekan tombol load (K_l), menampilkan slot penyimpanan. Pemain dapat memilih slot dengan menekan tombol K_a, K_b, atau K_c untuk memuat status permainan. Alternatifnya, Anda bisa menggunakan input sentuh alih-alih input keyboard untuk pemilihan slot. Jika sebuah slot dipilih, status game dimuat dari file yang sesuai.

Buat file baru bernama antarmuka.py dan tambahkan kode dengan pembaruan di bawah ini:

# Variabel permainan
simpan_slot = ['Slot 1', 'Slot 2', 'Slot 3']
slot_terpilih = Tidak ada

# Putaran permainan
berlari = BENAR
ketika berlari:
untuk peristiwa di dalam pygame.event.get():
jika event.type == pygame. BERHENTI:
berlari = PALSU

jika event.type == pygame. TURUNKAN:
jika event.key == pygame. K_s:
# Tampilkan slot penyimpanan
slot_terpilih = Tidak ada
untuk saya, celah di dalam menghitung (save_slots):
mencetak(f"Simpan Slot {i+1}: {slot}")
mencetak("Pilih slot untuk menyimpan permainan.")

jika event.key == pygame. K_l:
mencetak("Pilih Slot:- a - Slot 1, b - Slot 3, c - Slot 3")
# Tampilkan slot penyimpanan
slot_terpilih = Tidak ada
untuk saya, celah di dalam menghitung (save_slots):
mencetak(f"Simpan Slot {i+1}: {slot}")
mencetak("Pilih slot untuk memuat game.")

jika acara.kunci di dalam [pygame. K_1, pygame. K_2, pygame. K_3]:
# Simpan atau muat game berdasarkan slot yang dipilih
slot_index = event.key - pygame. K_1
slot_terpilih = simpan_slot[indeks_slot]

save_game_state (status_game, F"{slot_terpilih}.acar")
mencetak(f"Permainan disimpan di {slot_terpilih}!")

jika acara.kunci di dalam [pygame. K_a, pygame. K_b, pygame. K_c]:

slot_index = event.key - pygame. K_a
slot_terpilih = simpan_slot[indeks_slot]
game_state = memuat_game_state(F"{slot_terpilih}.acar")
player_x = status_permainan['pemain_x']
mencetak(f"Game dimuat dari {slot_terpilih}!")
# ...

pygame.display.flip()

# ...

Di bawah ini adalah outputnya:

Tidak diperlukan atribusi: Tangkapan layar oleh Imran

Menangani Opsi Timpa

Untuk memberikan opsi menimpa penyimpanan yang sudah ada, Anda dapat menerapkan pesan peringatan yang meminta konfirmasi pemain sebelum menimpa file penyimpanan. Buat file baru bernama menimpa-save.py dan modifikasi kode dengan pembaruan di bawah ini:

# Simpan status game
defsave_game_state(status_permainan, nama_berkas):
jika os.path.exists (nama_berkas):
# Minta konfirmasi untuk menimpa file penyimpanan yang ada
timpa = masukan("Simpan file sudah ada. Apakah Anda ingin menimpa? (y/t): ")
jika timpa.lebih rendah() != 'y':
mencetak("Simpan dibatalkan.")
kembali

mencoba:
dengan buka (nama_berkas, 'wb') sebagai mengajukan:
pickle.dump (game_state, file)
mencetak("Kondisi game berhasil disimpan!")
kecuali Kesalahan IOE:
mencetak("Kesalahan: Tidak dapat menyimpan status permainan.")

# ...

# Muat status permainan
defload_game_state(nama file):
jikabukan os.path.exists (nama_berkas):
mencetak("Kesalahan: Simpan file tidak ada.")
kembaliTidak ada

mencoba:
dengan buka (nama_berkas, 'rb') sebagai mengajukan:
game_state = pickle.load (file)
mencetak("Kondisi game berhasil dimuat!")
kembali game_state
kecuali (IOError, acar. UnpicklingError):
mencetak("Kesalahan: Tidak dapat memuat status permainan.")
kembaliTidak ada

# ...

Pada kode di atas, sebelum menyimpan status game, Anda memeriksa apakah file penyimpanan sudah ada menggunakan os.path.exists(). Jika ya, Anda meminta konfirmasi dari pemain untuk menimpa file penyimpanan yang ada. Jika pemain memilih untuk tidak menimpa, operasi penyimpanan dibatalkan.

Demikian pula, sebelum memuat status game, Anda memeriksa apakah file penyimpanan ada menggunakan os.path.exists(). Jika tidak, Anda memberi tahu pemain dengan pesan kesalahan.

Praktik Terbaik untuk Sistem Simpan dan Muat

Saat menerapkan sistem simpan dan muat di PyGame atau proyek pengembangan game apa pun, pertimbangkan praktik terbaik berikut:

  • Gunakan struktur data yang terdefinisi dengan baik untuk merepresentasikan status game dan membuat cerita bersambung menggunakan pustaka serialisasi seperti acar. Ini memungkinkan Anda untuk menyimpan dan memuat seluruh status game dengan mudah.
  • Buat direktori atau folder khusus untuk menyimpan file yang disimpan. Ini membantu mengatur file yang disimpan dan mencegah kekacauan direktori game utama.
  • Terapkan penanganan kesalahan dan berikan pesan kesalahan yang informatif untuk membantu proses debug dan pemecahan masalah. Ini membantu pemain memahami masalah apa pun yang mungkin timbul selama operasi simpan dan muat.
  • Pertimbangkan untuk menerapkan beberapa slot penyimpanan untuk memungkinkan pemain memiliki banyak penyimpanan game. Ini memberi pemain fleksibilitas untuk menjelajahi jalur yang berbeda atau memutar ulang bagian tertentu dari permainan tanpa menimpa kemajuan mereka.

Jadikan Game Lebih Menarik Dengan Sistem Simpan dan Muat

Penambahan fitur simpan dan muat dapat sangat meningkatkan keterlibatan dan kenikmatan permainan. Ini memungkinkan pemain untuk menyimpan progres mereka dan kembali ke permainan dengan nyaman. Selain itu, ini membuka kemungkinan untuk menciptakan dunia game yang kompleks, di mana pilihan dan tindakan pemain memiliki konsekuensi yang bertahan lama.

Dengan menerapkan sistem simpan dan muat, Anda dapat memberdayakan pemain untuk mendapatkan pengalaman bermain game yang lebih imersif dan memuaskan.