Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Questione complicata con ascii
Forum - C# / VB.NET - Questione complicata con ascii

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2331
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 18:17
Martedì, 29/07/2008
Ciao totem quello che sto per chiederti sembrerà abbastanza complicato ma non per te :D

allora un piccolo esempio,

Nell'editor di livelli che sto ultimando ho deciso di criptare il contenuto di una mappa in ascii.

l'editor e stato strutturato tramide le GDI
e alcune win api.

il problema sta che mi servirebbe riconvertire il valore allo stadio originale

sapresti consigliarmi o magari con un esempio se non chiedo troppo

come ripristinare il contenuto ascii di un file
e riconvertendolo allo stato naturale?




Codice sorgente - presumibilmente C++

  1. private List<Tileset> m_tilesets;
  2.                 private TileSelect m_tileSelect;
  3.                 private TiledMap m_tileMap;
  4.  
  5.  
  6.  
  7.         public MapWriter(TileSelect tileSelect, TiledMap tileMap)
  8.                 {
  9.                         m_tileMap = tileMap;
  10.                         m_tileSelect = tileSelect;
  11.                         m_tilesets = new List<Tileset>();
  12.                 }
  13.  
  14.  
  15. public void Save(string Path)
  16.                 {
  17.                         //Recupera l'each dai blocchi
  18.                         MemoryStream s_tilesets = WriteTilesets(m_tileSelect.Tilesets);
  19.                         MemoryStream s_tiles = WriteTiles();
  20.  
  21.                         FileStream FS = new FileStream(Path, FileMode.Create);
  22.                        
  23.                         //scrittura data
  24.                         byte[] name = System.Text.ASCIIEncoding.ASCII.GetBytes("MapEditorFile");
  25.                         FS.Write(name, 0, name.Length);
  26.                        
  27.                         string[] s_version = Application.ProductVersion.Split('.');
  28.                         float f_version = 0;
  29.                         float.TryParse(s_version[0]+"."+s_version[1], out f_version);
  30.                        
  31.                         byte[] version = System.BitConverter.GetBytes(f_version);
  32.                         FS.Write(version, 0, 4);
  33.                        
  34.                         byte[] size = System.BitConverter.GetBytes(s_tilesets.Length);
  35.                         FS.Write(size, 0, 8);
  36.                         s_tilesets.WriteTo(FS);
  37.                        
  38.                         size = System.BitConverter.GetBytes(s_tiles.Length);
  39.                         FS.Write(size, 0, 8);
  40.                         s_tiles.WriteTo(FS);
  41.                        
  42.                         FS.Close();
  43.                 }
  44.  
  45.  
  46.  
  47.  
  48.  
  49. private MemoryStream WriteTiles()
  50.                 {
  51.                         MemoryStream s_tiles = new MemoryStream();
  52.                         Tile[,] allTiles = m_tileMap.Tiles;
  53.                        
  54.                         MemoryStream tempStream = new MemoryStream();
  55.                                                
  56.                         int width = allTiles.GetLength(0);
  57.                         int height = allTiles.GetLength(1);
  58.                        
  59.                         //Scrive la larghezza e la lunghezza
  60.                         byte[] size = System.BitConverter.GetBytes(width);
  61.                         tempStream.Write(size, 0, 4);
  62.                         size = System.BitConverter.GetBytes(height);
  63.                         tempStream.Write(size, 0, 4);
  64.                        
  65.                         //Scrive il data per tile
  66.                         for(int x=0; x<width; x++) {
  67.                                 for(int y=0; y<height; y++) {
  68.                                         //Posizione X
  69.                                         size = System.BitConverter.GetBytes(allTiles[x,y].X);
  70.                                         tempStream.Write(size, 0, 4);
  71.                                         //Posizione Y                                   size = System.BitConverter.GetBytes(allTiles[x,y].Y);
  72.                                         tempStream.Write(size, 0, 4);
  73.                                         //Solido
  74.                                         size = System.BitConverter.GetBytes(allTiles[x,y].IsSolid);
  75.                                         tempStream.Write(size, 0, 1);
  76.                                         int index = -1;
  77.                                         for(int i=0;i<m_tilesets.Count; i++) {
  78.                                                 if(allTiles[x,y].Init && m_tilesets[i] == allTiles[x,y].Tileset) {
  79.                                                         index = i;
  80.                                                         break;
  81.                                                 }
  82.                                         }
  83.                                        
  84.                                         //Numero Tileset
  85.                                         size = System.BitConverter.GetBytes(index);
  86.                                         tempStream.Write(size, 0, 4);
  87.                                 }
  88.                         }
  89.                        
  90.                         tempStream.WriteTo(s_tiles);
  91.                        
  92.                         return s_tiles;
  93.                 }
  94.                
  95.                 private MemoryStream WriteTilesets(List<Tileset> tileset)
  96.                 {
  97.                         MemoryStream s_tilesets = new MemoryStream();
  98.                         MemoryStream tempStream = new MemoryStream();
  99.                        
  100.                         foreach(Tileset tSet in tileset)
  101.                         {
  102.                                 m_tilesets.Add(tSet);
  103.                                
  104.                                 MemoryStream image = new MemoryStream();
  105.                                
  106.                                 //Dimensione tile
  107.                                 byte[] size = System.BitConverter.GetBytes(tSet.TileSize);
  108.                                 tempStream.Write(size, 0, 4);
  109.                                
  110.                                 //nome
  111.                                 byte[] name = System.Text.ASCIIEncoding.ASCII.GetBytes(tSet.ToString());
  112.                                 size = System.BitConverter.GetBytes(name.Length);
  113.                                 tempStream.Write(size, 0, 4);
  114.                                 tempStream.Write(name, 0, name.Length);
  115.                                
  116.                                 //Immagine
  117.                                 tSet.Image.Save(image, System.Drawing.Imaging.ImageFormat.Bmp);
  118.                                 size = System.BitConverter.GetBytes(image.Length);
  119.                                 tempStream.Write(size, 0, 8);
  120.                                 image.Position = 0;
  121.                                 image.WriteTo(tempStream);                     
  122.                         }
  123.                        
  124.                         tempStream.WriteTo(s_tilesets);
  125.                        
  126.                         return s_tilesets;
  127.                 }
  128.         }




questo e il salvataggio che va a scrivere l'ascii nel file di testo rendendolo illegibile e immodificabile.

qualche consiglio su come recupere o meglio riconvertire il tutto? :/


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:57
Mercoledì, 30/07/2008
Questo codice mi sapventa sinceramente. Usa la serializzazione, ti pregooooo! E' più facile per te, sia nel salvataggio, sia nel caricamente, ed è più semplice per me, così non devo leggere tutto quel codice!

PM Quote