Opi sisällyttämään pelien tallennus- ja latausominaisuus saumattoman pelikokemuksen saavuttamiseksi.
Nykyaikaisessa pelikehityksessä kyky tallentaa ja ladata pelin edistymistä on keskeinen ominaisuus, joka parantaa käyttökokemusta ja sitoutumista. PyGame, suosittu kirjasto 2D-pelien luomiseen Pythonissa, tarjoaa tarvittavat työkalut tallennus- ja latausominaisuuden toteuttamiseen vaivattomasti.
Yksinkertaisen pelin luominen
Ennen kuin aloitat, varmista, että sinulla on pip asennettuna laitteellesi. Kun olet asentanut pip, suorita alla oleva komento asentaaksesi pygame moduuli:
pip asennus pygame
Havainnollistaaksesi tallennus- ja latausjärjestelmän toteutusta PyGamessa, aloita luomalla yksinkertainen peli.
Tässä artikkelissa käytetty koodi on saatavilla tässä GitHub-arkisto ja sen käyttö on ilmaista MIT-lisenssin alaisena.
Tässä pelissä pelaajalla on mahdollisuus liikkua vasemmalle ja oikealle. Tässä on esimerkkikoodinpätkä, joka havainnollistaa pelin perusrakennetta:
tuonti pygame
# Alusta Pygame
pygame.init()# Aseta peli-ikkuna
window_width = 800
ikkunan_korkeus = 600
ikkuna = pygame.display.set_mode((ikkunan_leveys, ikkunan_korkeus))
pygame.display.set_caption("Tallenna ja lataa järjestelmä opetusohjelma")# Pelin muuttujat
pelaaja_x = 400
pelaaja_y = 500
player_speed = 5# Pelisilmukka
juoksu = Totta
sillä aikaa käynnissä:
varten tapahtuma sisään pygame.event.get():
jos event.type == pygame. LOPETTAA:
juoksu = Vääräavaimet = pygame.key.get_pressed()
jos avaimet[pygame. K_LEFT]:
pelaaja_x - = pelaajan_nopeus
jos avaimet[pygame. K_RIGHT]:
player_x += player_speed# Tyhjennä näyttö
window.fill((0, 0, 0))# Piirrä soitin
pygame.draw.rect (ikkuna, (255, 255, 255), (pelaaja_x, pelaaja_y, 50, 50))# Päivitä näyttö
pygame.display.flip()
# Lopeta peli
pygame.quit()
Pelin tilan ja tietojen pysyvyyden hallinta
Ennen kuin otat käyttöön tallennus- ja lataustoiminnon, sinun on luotava tapa hallita pelin tilaa ja säilyttää tiedot. Yksi yleinen lähestymistapa on käytä Python-sanakirjaa tallentaaksesi asiaankuuluvat pelitiedot. Tässä on esimerkki siitä, kuinka voit muokata edellistä koodia sisältämään pelin tilanhallinnan:
# Pelin muuttujat
pelin_tila = {
'player_x': 400,
'player_y': 500
}# Pelisilmukka
juoksu = Totta
sillä aikaa käynnissä:
# ...avaimet = pygame.key.get_pressed()
jos avaimet[pygame. K_LEFT]:
pelin_tila['player_x'] -= pelaajan_nopeus
jos avaimet[pygame. K_RIGHT]:
pelin_tila['player_x'] += pelaajan_nopeus# ...
pygame.display.flip()
Tallenna ja lataa -toiminnon käyttöönotto
Voit tallentaa ja ladata pelin edistymistä hyödyntämällä Pythonin sisäänrakennettua suolakurkku moduuli, jonka avulla Python-objekteja voidaan serialisoida ja deserialisoida. Luo uusi tiedosto nimeltä save-game.py ja lisää koodi alla olevilla päivityksillä:
pelin_tila = {
'player_x': player_x,
'player_y': pelaaja_y
}# Tallenna pelin tila
defsave_game_state(pelin_tila, tiedoston_nimi):
yrittää:
kanssa avaa (tiedoston_nimi, 'wb') kuten tiedosto:
pickle.dump (pelin_tila, tiedosto)
Tulosta("Pelitilan tallennus onnistui!")
paitsi IOError:
Tulosta("Virhe: Pelin tilaa ei voi tallentaa.")# Lataa pelin tila
defload_game_state(Tiedoston nimi):
yrittää:
kanssa avaa (tiedoston_nimi, "rb") kuten tiedosto:
game_state = pickle.load (tiedosto)
Tulosta("Pelitilan lataus onnistui!")
palata pelin tila
paitsi (IOError, suolakurkku. UnpicklingError):
Tulosta("Virhe: Pelin tilaa ei voi ladata.")# Pelisilmukka
juoksu = Totta
sillä aikaa käynnissä:# ...
avaimet = pygame.key.get_pressed()
jos avaimet[pygame. K_LEFT]:
pelaaja_x - = pelaajan_nopeus
pelin_tila['player_x'] = pelaaja_x
jos avaimet[pygame. K_RIGHT]:
player_x += player_speed
pelin_tila['player_x'] = pelaaja_xjos avaimet[pygame. K_s]:
save_game_state (game_state, "save_game.pickle")
jos avaimet[pygame. K_l]:
pelin_tila = load_game_state("save_game.pickle")
pelaaja_x = pelin_tila['player_x']
# ...
# ...
Alla on tulos:
Käyttöliittymän suunnittelu tallennuspaikoille
Tallennus- ja latausliittymän tarjoamiseksi voit näyttää tallennuspaikat, joiden avulla pelaaja voi valita, minkä paikan tallentaa tai ladata. Tässä esimerkissä vaihtoehdot näkyvät konsolissa, mutta voit käyttää niitä Pythonin GUI-kehykset käyttäjäystävällisemmän käyttöliittymän luomiseksi.
Luo save_slots luettelo, joka edustaa käytettävissä olevia tallennuspaikkoja. Lisää myös a valittu_paikka muuttuja, jonka avulla voit seurata pelaajan valitsemaa paikkaa.
Näytä käytettävissä olevat tallennuspaikat, kun pelaaja painaa tallennuspainiketta (K_s). Pelaaja voi valita paikan painamalla vastaavaa numeronäppäintä (K_1, K_2, tai K_3). Jos paikka valitaan, pelin tila tallennetaan valitun paikan mukaan nimettyyn tiedostoon.
Vastaavasti, kun soitin painaa latauspainiketta (K_l), näytä tallennuspaikat. Pelaaja voi valita paikan painamalla näppäimiä K_a, K_b, tai K_c ladataksesi pelitilan. Vaihtoehtoisesti voit käytä kosketustuloja näppäimistötulojen sijaan paikan valintaa varten. Jos paikka valitaan, pelitila ladataan vastaavasta tiedostosta.
Luo uusi tiedosto nimeltä interface.py ja lisää koodi alla olevilla päivityksillä:
# Pelin muuttujat
save_slots = ["Slot 1", "Slot 2", "Slot 3"]
valittu_paikka = Ei mitään# Pelisilmukka
juoksu = Totta
sillä aikaa käynnissä:
varten tapahtuma sisään pygame.event.get():
jos event.type == pygame. LOPETTAA:
juoksu = Vääräjos event.type == pygame. KEYDOWN:
jos event.key == pygame. K_s:
# Näytä tallennuspaikat
valittu_paikka = Ei mitään
varten minä, paikka sisään luetella (save_slots):
Tulosta(f"Tallenna paikka {i+1}: {aukko}")
Tulosta("Valitse paikka tallentaaksesi pelin.")jos event.key == pygame. K_l:
Tulosta("Valitse paikka: - a - Paikka 1, b - Paikka 3, c - Paikka 3")
# Näytä tallennuspaikat
valittu_paikka = Ei mitään
varten minä, paikka sisään luetella (save_slots):
Tulosta(f"Tallenna paikka {i+1}: {aukko}")
Tulosta("Valitse paikka ladataksesi peli.")jos tapahtuma.avain sisään [pygame. K_1, pygame. K_2, pygame. K_3]:
# Tallenna tai lataa peli valitun paikan perusteella
slot_index = event.key - pygame. K_1
valittu_paikka = save_slots[slot_index]
save_game_state (game_state, f"{selected_slot}.suolakurkku")
Tulosta(f"Peli tallennettu {selected_slot}!")jos tapahtuma.avain sisään [pygame. K_a, pygame. K_b, pygame. K_c]:
slot_index = event.key - pygame. K_a
valittu_paikka = save_slots[slot_index]
pelin_tila = load_game_state(f"{selected_slot}.suolakurkku")
pelaaja_x = pelin_tila['player_x']
Tulosta(f"Peli ladattu osoitteesta {selected_slot}!")
# ...pygame.display.flip()
# ...
Alla on tulos:
Korvausasetusten käsittely
Jos haluat tarjota vaihtoehtoja olemassa olevien tallennusten korvaamiseen, voit ottaa käyttöön varoitusviestin, joka pyytää soitinta vahvistamaan ennen tallennustiedoston korvaamista. Luo uusi tiedosto nimeltä overwriting-save.py ja muokkaa koodia alla olevilla päivityksillä:
# Tallenna pelin tila
defsave_game_state(pelin_tila, tiedoston_nimi):
jos os.path.exists (tiedoston_nimi):
# Pyydä vahvistusta olemassa olevan tallennustiedoston korvaamiseksi
overwrite = input("Tallennustiedosto on jo olemassa. Haluatko korvata? (y/n): ")
jos overwrite.lower() != 'y':
Tulosta("Tallennus peruutettu.")
palatayrittää:
kanssa avaa (tiedoston_nimi, 'wb') kuten tiedosto:
pickle.dump (pelin_tila, tiedosto)
Tulosta("Pelitilan tallennus onnistui!")
paitsi IOError:
Tulosta("Virhe: Pelin tilaa ei voi tallentaa.")# ...
# Lataa pelin tila
defload_game_state(Tiedoston nimi):
josei os.path.exists (tiedoston_nimi):
Tulosta("Virhe: Tallennustiedostoa ei ole olemassa.")
palataEi mitäänyrittää:
kanssa avaa (tiedoston_nimi, "rb") kuten tiedosto:
game_state = pickle.load (tiedosto)
Tulosta("Pelitilan lataus onnistui!")
palata pelin tila
paitsi (IOError, suolakurkku. UnpicklingError):
Tulosta("Virhe: Pelin tilaa ei voi ladata.")
palataEi mitään
# ...
Yllä olevassa koodissa tarkistat ennen pelitilan tallentamista, onko tallennustiedosto jo olemassa os.path.exists(). Jos näin käy, pyydät soitinta vahvistamaan olemassa olevan tallennustiedoston korvaamisen. Jos soitin ei halua kirjoittaa päälle, tallennustoiminto peruuntuu.
Vastaavasti ennen pelitilan lataamista tarkistat, onko tallennustiedosto olemassa käyttämällä os.path.exists(). Jos näin ei tapahdu, ilmoitat siitä pelaajalle virheilmoituksella.
Tallenna ja lataa -järjestelmän parhaat käytännöt
Kun otat käyttöön tallennus- ja latausjärjestelmää PyGamessa tai missä tahansa pelin kehitysprojektissa, ota huomioon seuraavat parhaat käytännöt:
- Käytä hyvin määriteltyä tietorakennetta kuvaamaan pelin tilaa ja sarjoi se serialisointikirjastolla, kuten suolakurkku. Tämän avulla voit tallentaa ja ladata koko pelitilan helposti.
- Luo oma hakemisto tai kansio tallennettujen tiedostojen tallentamista varten. Tämä auttaa järjestämään tallennetut tiedostot ja estää pelin päähakemiston sotkeutumisen.
- Ota käyttöön virheiden käsittely ja anna informatiivisia virheilmoituksia vianmäärityksen ja vianmäärityksen avuksi. Tämä auttaa pelaajia ymmärtämään tallennuksen ja lataamisen aikana mahdollisesti ilmeneviä ongelmia.
- Harkitse useiden tallennuspaikkojen käyttöönottoa, jotta pelaajat voivat tallentaa useita pelejä. Tämä antaa pelaajille joustavuuden tutkia erilaisia polkuja tai toistaa tiettyjä pelin osia ilman, että heidän edistymisensä ylikirjoitetaan.
Tee peleistä kiinnostavampia Tallenna ja lataa -järjestelmän avulla
Tallenna ja lataa -ominaisuuden lisääminen voi parantaa huomattavasti pelin sitoutumista ja nautintoa. Sen avulla pelaajat voivat tallentaa edistymisensä ja palata peliin milloin heille sopii. Lisäksi se avaa mahdollisuuksia luoda monimutkaisia pelimaailmoja, joissa pelaajien valinnoilla ja toimilla on pysyviä seurauksia.
Ottamalla käyttöön tallennus- ja latausjärjestelmän voit antaa pelaajillesi mukaansatempaavamman ja tyydyttävämmän pelikokemuksen.