Oppure

Loading
29/07/08 16:17
Thejuster
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?





private List<Tileset> m_tilesets;
		private TileSelect m_tileSelect;
		private TiledMap m_tileMap;



	public MapWriter(TileSelect tileSelect, TiledMap tileMap)
		{
			m_tileMap = tileMap;
			m_tileSelect = tileSelect;
			m_tilesets = new List<Tileset>();
		}


public void Save(string Path)
		{
			//Recupera l'each dai blocchi
			MemoryStream s_tilesets = WriteTilesets(m_tileSelect.Tilesets);
			MemoryStream s_tiles = WriteTiles();

			FileStream FS = new FileStream(Path, FileMode.Create);
			
			//scrittura data
			byte[] name = System.Text.ASCIIEncoding.ASCII.GetBytes("MapEditorFile");
			FS.Write(name, 0, name.Length);
			
			string[] s_version = Application.ProductVersion.Split('.');
			float f_version = 0;
			float.TryParse(s_version[0]+"."+s_version[1], out f_version);
			
			byte[] version = System.BitConverter.GetBytes(f_version);
			FS.Write(version, 0, 4);
			
			byte[] size = System.BitConverter.GetBytes(s_tilesets.Length);
			FS.Write(size, 0, 8);
			s_tilesets.WriteTo(FS);
			
			size = System.BitConverter.GetBytes(s_tiles.Length);
			FS.Write(size, 0, 8);
			s_tiles.WriteTo(FS);
			
			FS.Close();
		}





private MemoryStream WriteTiles()
		{
			MemoryStream s_tiles = new MemoryStream();
			Tile[,] allTiles = m_tileMap.Tiles;
			
			MemoryStream tempStream = new MemoryStream();
						
			int width = allTiles.GetLength(0);
			int height = allTiles.GetLength(1);
			
			//Scrive la larghezza e la lunghezza
			byte[] size = System.BitConverter.GetBytes(width);
			tempStream.Write(size, 0, 4);
			size = System.BitConverter.GetBytes(height);
			tempStream.Write(size, 0, 4);
			
			//Scrive il data per tile
			for(int x=0; x<width; x++) {
				for(int y=0; y<height; y++) {
					//Posizione X
					size = System.BitConverter.GetBytes(allTiles[x,y].X);
					tempStream.Write(size, 0, 4);
					//Posizione Y					size = System.BitConverter.GetBytes(allTiles[x,y].Y);
					tempStream.Write(size, 0, 4);
					//Solido
					size = System.BitConverter.GetBytes(allTiles[x,y].IsSolid);
					tempStream.Write(size, 0, 1);
					int index = -1;
					for(int i=0;i<m_tilesets.Count; i++) {
						if(allTiles[x,y].Init && m_tilesets[i] == allTiles[x,y].Tileset) {
							index = i;
							break;
						}
					}
					
					//Numero Tileset
					size = System.BitConverter.GetBytes(index);
					tempStream.Write(size, 0, 4);
				}
			}
			
			tempStream.WriteTo(s_tiles);
			
			return s_tiles;
		}
		
		private MemoryStream WriteTilesets(List<Tileset> tileset)
		{
			MemoryStream s_tilesets = new MemoryStream();
			MemoryStream tempStream = new MemoryStream();
			
			foreach(Tileset tSet in tileset)
			{
				m_tilesets.Add(tSet);
				
				MemoryStream image = new MemoryStream();
				
				//Dimensione tile
				byte[] size = System.BitConverter.GetBytes(tSet.TileSize);
				tempStream.Write(size, 0, 4);
				
				//nome
				byte[] name = System.Text.ASCIIEncoding.ASCII.GetBytes(tSet.ToString());
				size = System.BitConverter.GetBytes(name.Length);
				tempStream.Write(size, 0, 4);
				tempStream.Write(name, 0, name.Length);
				
				//Immagine
				tSet.Image.Save(image, System.Drawing.Imaging.ImageFormat.Bmp);
				size = System.BitConverter.GetBytes(image.Length);
				tempStream.Write(size, 0, 8);
				image.Position = 0;
				image.WriteTo(tempStream);			
			}
			
			tempStream.WriteTo(s_tilesets);
			
			return s_tilesets;
		}
	}




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? :/
mire.forumfree.it/ - Mire Engine
C# UI Designer
30/07/08 8:57
Il Totem
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!
aaa