Casa > C > Como Fazer Um Arquivo De Gravação Para Um Jogo Escrito Em Python

Como fazer um arquivo de gravação para um jogo escrito em Python

A forma como o fiz com o meu jogo (veja Jack Fraser'a resposta de Jack Fraser'qual é a peça de código mais surpreendente que você'já viu na sua vida?), foi essencialmente criar o meu próprio tipo de arquivo personalizado.

Transcribi o gamestate em uma série de arrays, que continha todos os dados necessários para descrever o estado atual do jogo, bem como quem tinha acabado de tomar sua vez - então simplesmente os transformou em strings, e os salvou em um arquivo de texto.

O resultado foi algo que se parecia notavelmente com isto:

  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, 0, 1%x #100, 0, 380, 0, 10, 0%x #0, 0, 0, 0, 0, 0%x #820, 0, 0, 0, 0, 0, 0%x #500, 500, 220, 0, 5, 0%x #2000, 200, 0, 0, 0, 0, 0%x #3625, 750, 0, 0, 0, 0, 1%x #1500, 200, 0, 0, 0, 0, 0%x #600, 0, 0, 0, 10, 0%x #500, 500, 0, 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, 0, 15, 0%x #405, 203, 500, 0, 0, 0, 0%x #4000, 200, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0, 5, 0%x #1000, 800, 400, 20, 0, 0%x #1896, 500, 100, 0, 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, 0, 30, 0%x #1000, 100, 600, 0, 0, 0, 0%x #0, 3, 111, 0, 6, 1%x #55, 1, 0, 7, 0, 1%x #700, 300, 0, 0, 0, 0, 0, 0%x #1320, 220, 220, 0, 0, 0%x #0, 271, 0, 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, 0, 0%x #3138, 500, 100, 0, 0, 0, 1%x #1000, 400, 0, 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, 0%x #4000, 1200, 0, 0, 10, 0%x #0, 0, 0, 0, 0, 0%x #1817, 182, 182, 0, 0, 0, 0%x #0, 0, 680, 0, 20, 0%x #0, 0, 320, 0, 0, 0, 0%x #900, 0, 0, 0, 0, 2%x #1203, 0, 0, 0, 0, 1, 0%x #4000, 100, 0, 0, 0, 10, 0%x #0, 552, 0, 0, 0, 0, 0%x #0, 8, 300, 1400, 0, 0%x #2500, 1200, 200, 3000, 0, 0%x #1000, 1000, 300, 0, 0, 0, 1%x #0, 0, 0, 0, 0, 0%x #0, 0, 0, 0, 0, 0%x #0, 0, 1, 0, 0, 0, 0%x #0, 0, 0, 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, 0, 10, 3000%x #0, 10, 830, 0, 7, 0%x #11900, 260, 0, 0, 0, 0, 0%x #0, 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, 0%x #2000, 0, 300, 0, 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, 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%x #0, 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, 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, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 0, 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, -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, 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, 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, 0%x #0, 0, 0, 0, 0, 0, 0, 0, 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 
  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. Um novo jogo foi iniciado. Os jogadores humanos selecionados: Dothraki Horde e The Others#n#nHouse Baratheon levaram Bitterbridge da House Tyrell#nHouse Baratheon invadiram com sucesso o território neutro de Storms End#nHouse Stark levaram Last Hearth from Nights Watch#nights Watch invadiram o território neutro de Skaagos#nKingdom of Slavers invadiram o território neutro do Novo Ghis#nKingdom de Slavers invadiram o território neutro de Ghiscar#nHouse Martell tomaram Lys da Union of Free Cities#nHouse Lannister tomaram Riverrun da House Tully#nUnion of Free Cities invadiram o território neutro de The Sorrows#nUnion of Free Cities invadiram o território neutro da Baixa Rhoyneland#nHouse Targaryen levaram com sucesso Volantis da Union of Free Cities#nHouse Greyjoy levaram com sucesso Riverrun da House Lannister#nQarth levaram com sucesso Mountains of Bone da Dothraki Horde#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, na véspera de Natal de 2014 - por isso representa um jogo maioritariamente vazio (daí a massa de zeros).

Você então precisa de outra função que possa abrir, ler e interpretar esses dados (você precisa escrever uma boa função conversor string2array!) - você pode então simplesmente carregar esses dados em sua função principal, e se você os projetou corretamente, isso permitirá que você retome o jogo com os parâmetros restaurados.

Para mim, este método tinha a vantagem adicional de que como era apenas texto puro, eu podia automatizar um sistema para escrever um email contendo estes dados, e enviá-los para si mesmo - este servidor de email então serviu como um servidor de jogo, para que eu pudesse jogar o jogo pela internet (isto não é viável com um jogo em tempo real, mas com um jogo baseado em turnos era perfeito).

Na verdade estou atualmente no processo de reescrever este jogo do zero (ele tem 2 anos de idade agora, e eu não era muito bom codificador quando o escrevi!) e enquanto a nova arquitetura usa um método um pouco mais sofisticado, o princípio geral permanece.

De Venetia Chaidy

Qual tem uma câmera melhor Galaxy M30 ou Redmi Note 7 ou Note 7 Pro? :: O Samsung Galaxy Note 7 vai valer alguma coisa nos próximos anos?