QNA > C > Come Creare Un File Di Salvataggio Per Un Gioco Scritto In Python

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:

  1. BEGIN_PACKET 
  2. PLAYER_2_READY 
  3. [2, 8, 1, 10, 13, 0, 7, 4, 12, 6, 15, 5, 14, 16, 11, 3, 9] 
  4. [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
  5. #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 
  6. #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 
  7. #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 
  8. [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] 
  9. È 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 
  10. hostcox6p0 
  11. cox6p5 
  12. NO_MESSAGE 
  13. 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.

Di Britta

Da che parte è il nord su Google Maps? :: Come imparare a sviluppare un gioco come PUBG (PlayerUnknown's Battlegrounds)
Link utili