Come creare un file di salvataggio per un gioco scritto in Python
Il modo in cui l'ho fatto con il mio gioco (vedi Jack Fraser'risposta a Qual è il pezzo di codice più sorprendente che tu abbia mai visto in vita tua?
Ho trascritto il gamestate in una serie di array, che contenevano tutti i dati necessari per descrivere lo stato attuale del gioco, così come chi aveva appena fatto il suo turno - poi li ho semplicemente trasformati in stringhe, e salvati in un file di testo.
Il risultato era qualcosa che assomigliava notevolmente a questo:
- BEGIN_PACKET
- PLAYER_2_READY
- [2, 8, 1, 10, 13, 0, 7, 4, 12, 6, 15, 5, 14, 16, 11, 3, 9]
- [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- #8000, 300, 400, 0, 20, 0%x #850, 28, 28, 0, 0, 0%x #0, 0, 260, 0, 0, 1%x #1000, 500, 200, 0, 0, 0%x #2000, 300, 200, 0, 10, 0%x #300, 400, 500, 0, 0, 0%x #0, 174, 500, 0, 0, 1%x #100, 0, 380, 0, 10, 0%x #0, 0, 0, 0, 0, 0%x #820, 0, 0, 0, 0, 0%x #500, 500, 220, 0, 5, 0%x #2000, 200, 0, 0, 0, 0%x #3625, 750, 0, 0, 0, 1%x #1500, 200, 0, 0, 0, 0%x #600, 0, 0, 0, 10, 0%x #500, 500, 0, 0, 15, 0%x #0, 300, 750, 0, 10, 0%x #1860, 500, 750, 0, 0, 1%x #0, 200, 1500, 0, 75, 0%x #700, 100, 0, 0, 15, 0%x #405, 203, 500, 0, 0, 0%x #4000, 200, 0, 0, 0, 0%x #0, 0, 0, 0, 5, 0%x #1000, 800, 400, 20, 0, 0%x #1896, 500, 100, 0, 0, 1%x #333, 33, 567, 0, 10, 0%x #0, 0, 142, 0, 20, 1%x #1000, 1000, 100, 0, 5, 0%x #500, 20, 0, 0, 30, 0%x #1000, 100, 600, 0, 0, 0%x #0, 3, 111, 0, 6, 1%x #55, 1, 0, 7, 0, 1%x #700, 300, 0, 0, 0, 0%x #1320, 220, 220, 0, 0, 0%x #0, 271, 0, 0, 0, 0%x #2000, 0, 1000, 0, 0, 0%x #2000, 100, 0, 0, 5, 0%x #0, 100, 0, 0, 0 0%x #3138, 500, 100, 0, 0, 1%x #1000, 400, 0, 0, 4, 0%x #3000, 0, 400, 0, 10, 0%x #2000, 0, 100, 0, 0, 0%x #6000, 0, 0, 0, 0, 0, 0%x #4000, 1200, 0, 0, 10, 0%x #0, 0, 0, 0, 0, 0%x #1817, 182, 182, 0, 0, 0%x #0, 0, 680, 0, 20, 0%x #0, 0, 320, 0, 0, 0%x #900, 0, 0, 0, 0, 2%x #1203, 0, 0, 0, 1, 0%x #4000, 100, 0, 0, 10, 0%x #0, 552, 0, 0, 0, 0%x #0, 8, 300, 1400, 0, 0%x #2500, 1200, 200, 3000, 0, 0%x #1000, 1000, 300, 0, 0, 1%x #0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0%x #0, 0, 1, 0, 0, 0%x #0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0%x #100, 1240, 200, 0, 10, 4000%x #12000, 1500, 0, 0, 10, 3000%x #0, 10, 830, 0, 7, 0%x #11900, 260, 0, 0, 0, 0%x #0, 0, 0, 0, 0%x #0, 90, 670, 0, 3, 111000%x #0, 0, 361, 0, 0, 0%x #300, 200, 300, 0, 0, 0%x #2000, 0, 300, 0, 0, 1%x #0, 0, 0, 0, 0, 0%x #0, 0, 42, 0, 0, 0%x #0, 100, 0, 0, 10, 0%x
- #913, 98, 618, 477%x #796, 1015, 603, 72%x #834.28, 247.56000000000006, 70.06000000000006, 1004.6800000000001%x #969, 912, 666, 1165%x #781, 625, 520, 4%x #954, 69, 1150, 504%x #1415, 431, 180, 1794%x #557, 1101, 928, 29%x #1500, 800, 1500, 1000%x #971, 101, 63, 1263%x #247, 244, 42, 286%x #904, 911, 861, 471%x #1120, 691, 815, 185%x #529, 54, 995, 340%x #1073, 728, 182, 2067%x #343, 647, 617, 232%x #2000, 1800, 1550, 933%x
- #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0%x
- [0, 0, 14, 14, 14, 5, 5, 5, -1, 4, 5, 4, 4, 4, 4, 4, 4, 13, 13, 2, 2, 2, 13, 6, 6, 1, 1, 1, 7, 3, 3, 7, 7, 7, 7, 8, 8, 8, 8, 3, 12, 12, 12, 12, -1, 12, 12, 12, 12, 8, 12, 9, 9, 9, 11, -1, -1, 16, -1, -1, 15, 15, 15, 15, -1, 15, 11, 10, 10, -1, 11, 11]
- È stata avviata una nuova partita. I giocatori umani selezionati: Orda Dothraki e Gli Altri#n#n Casa Baratheon ha preso con successo Bitterbridge da Casa Tyrell#n Casa Baratheon ha invaso il territorio neutrale di Storms End#n Casa Stark ha preso con successo Last Hearth da Nights Watch#nNights Watch ha invaso il territorio neutrale di Skaagos#nRegno degli Schiavisti hanno invaso il territorio neutrale di New Ghis#nKingdom of Slavers hanno invaso il territorio neutrale di Ghiscar#nHouse Martell hanno preso con successo Lys da Union of Free Cities#nHouse Lannister hanno preso con successo Riverrun da House Tully#nUnion of Free Cities hanno invaso il territorio neutrale di The Sorrows#nUnione delle Città Libere ha invaso il territorio neutrale di Lower Rhoyneland#nCasa Targaryen ha preso con successo Volantis dall'Unione delle Città Libere#nCasa Greyjoy ha preso con successo Riverrun dalla Casa Lannister#nQarth ha preso con successo Mountains of Bone dall'Orda Dothraki#nDothraki Horde successfully took Mountains of Bone (Qarth) after a crushing victory#nDothraki Horde successfully took The Red Waste (Qarth) after a crushing victory#n
- hostcox6p0
- cox6p5
- NO_MESSAGE
- END_PACKET
This is actually the first data packet that was sent across the internet, la vigilia di Natale 2014 - quindi rappresenta un gioco per lo più vuoto (da cui la massa di zeri).
Allora avete bisogno di un'altra funzione che possa aprire, leggere e poi interpretare questi dati (dovete scrivere una buona funzione convertitore stringa2array!) - potete poi semplicemente caricare questi dati nella vostra funzione principale, e se l'avete progettata bene, vi permetterà di riprendere il gioco con i parametri ripristinati.
Per me, questo metodo aveva l'ulteriore vantaggio che, essendo solo testo puro, potevo automatizzare un sistema per scrivere un'e-mail contenente questi dati, e inviarla a se stesso - questo server di posta elettronica serviva poi come server di gioco, così potevo giocare attraverso internet (questo non è fattibile con un gioco in tempo reale, ma con un gioco a turni era perfetto).
Sono attualmente in procinto di riscrivere questo gioco da zero (ha ormai 2 anni, e non ero un buon programmatore quando l'ho scritto!) e mentre la nuova architettura usa un metodo leggermente più sofisticato, il principio generale rimane.
Articoli simili
- Come fare musica per una canzone di cui ho scritto il testo? Qual è la migliore app per aggiungere musica alla canzone che ho scritto
- Se compri un gioco digitale per PS4 dopo averlo avuto su disco, cosa succede ai tuoi dati di salvataggio?
- Quali sono i migliori script Python che hai scritto?
- Esiste una funzione di salvataggio per Disney Plus? Come posso trovare più facilmente i miei spettacoli?