Como saben estoy con un simulador de batallas (bah, RPG en tiempo No real)
Manejo una cantidad mas o menos importante de datos
(structuras con mas structuras dentro...)
Struct Player[2]
	Struct Pilot
		String Name = "";
		Char Rank = "D";
		String PilotType ="Universal"
		Byte Level  = 1;
		Word Exp = 0;
		Word PP = 0;
		Byte SP = 0;
		Byte Will = 100;
		Word Syncro = 50;
		Struct ComandPilot
			Struct Offense
				Byte Attack = 0;
				Byte Melee = 0;
				Byte Shooting = 0;
			End //fin del struct de los comandos ofensivos
			Struct Defence
				Byte Defence = 0;
				Byte Evade = 0;
				Byte Shield = 0;
				Byte Barrier = 0;
				Byte KiriBarai = 0;
				Byte ShootDown = 0;
			End //fin del struct de los comando defensivos
			Struct Movement
				Byte Fordward = 0;
				Byte Backward = 0;
				Byte Assault = 0;
				Byte Retreat = 0;
			End //fin del struct de los movimientos
			Struct Special
				Byte Bushin = 0;
				Byte Jump = 0;
				Byte LockOn = 0;
				Byte Potential = 0;
				Byte Strengthen = 0;
			End //fin de los comando especiales del piloto
		End // Fin de los comandos del piloto
	End //final de la estructura Piloto
	Struct Mech
		String Name = "";
		Char Rank = "D";
		String MechType ="Universal"
		Byte MechMetaType = 0; // false para real ( 0 ) true para Super ( 1 )
		String Size = "SS";
		Byte PilotSeatMax = 1;
		Byte PilotSeat = 0;
		Byte APMax = 1;
		Byte AP = 0;
		Float TeamWeight = 1;
		Dword HPMax = 1;
		Dword HP = 0;
		Word ENMax = 1;
		Word EN = 0;
		Word ArmorMax = 1;
		Word Armor = 0;
		Word VP = 0;
		Byte SelectedWeapons = 1;
		Byte BuildShield = 0;  // false ( 0 ) true ( 1 )
		Byte Shield = 0;  // false ( 0 ) true ( 1 )
		Struct Terrain
			Byte Air = 0; // false ( 0 ) true ( 1 )
			Byte Ground = 0; // false  ( 0 ) true  ( 1 )
			Byte Water = 0; // false ( 0 ) true  ( 1 )
			Byte Space = 0; // false  ( 0 ) true ( 1 )
		End //fin del struct de los terrenos
		Struct BattleSuport
			Byte ShootDown = 0; // false ( 0 ) true ( 1 )
			Byte KiriBarai = 0; // false  ( 0 ) true  ( 1 )
			Byte BuildShield = 0; // false ( 0 ) true  ( 1 )
			Byte Shield = 0; // false ( 0 ) true ( 1 )			
			Byte Barrier = 0; // false  ( 0 ) true  ( 1 )
			Byte Field = 0; // false ( 0 ) true  ( 1 )
			Byte Repair = 0; // false  ( 0 ) true ( 1 )
			Byte Resupply = 0; // false ( 0 ) true ( 1 )
		End //fin del struct de los terrenos
	End // fin datos del Mech
	Struct ArmasMech [4]
		String Name = "";
		Char Rank = "D";
		String MechType ="Universal"
		Byte MechMetaType = 0; // false para Melee ( 0 ) true para Shooting ( 1 )
		String Class = "";
		Byte Distance = 1;
		Word PowerMax = 0;
		Word Power = 0;
		Byte AmmoMax = 0;
		Byte Ammo = 0;
		Byte EN = 0 ;
		Byte Will = 0;
		Risk =0;
		Byte AP = 1;
		Byte Build = 0; // false ( 0 ) true ( 1 )
		Byte Selected = 1; // false ( 0 ) true ( 1 )
		Struct Effects
			Byte Charge = 0; // false ( 0 ) true ( 1 )
			Byte Wait = 0; // false  ( 0 ) true  ( 1 )
			Byte Aproach = 0; // false ( 0 ) true  ( 1 )
			Byte Away = 0; // false ( 0 ) true ( 1 )			
			Byte ShootDown = 0; // false  ( 0 ) true  ( 1 )
			Byte KiriBarai = 0; // false ( 0 ) true  ( 1 )
			Byte Movility = 0; // false  ( 0 ) true ( 1 )
			Byte Paralyze = 0; // false ( 0 ) true ( 1 )
			Byte BarrierPierce = 0; // false ( 0 ) true ( 1 )
			Byte KiriBarai = 0; // false  ( 0 ) true  ( 1 )
			Byte LockOn = 0; // false ( 0 ) true  ( 1 )
			Byte Double = 0; // false ( 0 ) true ( 1 )			
			Byte All = 0; // false  ( 0 ) true  ( 1 )
			Word RivalENReduce = 0;
			Word RivalArmorReduce = 0;
			Word RivalPowerReduce = 0;
			Word UserENReduce = 0;
			Word UserArmorReduce = 0;
			Word UserPowerReduce = 0;
		End // fin de la estructura de los efectos del arma
	End //fin de las armas activas
	Struct Shield[2]
		String Name ="";
		Dword HPMax;
		Dword HP;
		Word ArmorMax = 0;
		Word Armor = 0;
		Word VP = 0;
	End //fin de la estructuda shield
	Struct Barrier
		String Name = "";
		Byte EN = 0;
		DuracionTurnoMax = 1;
		DuracionTurno = 0;
	End //fin de la estructura Barrier
	Struct Field
		String Name ="";
		AbsorcionDaño = 0;
		GastoEnRoudn = 0;
	End //fin de la estructura Field
End //final de la estructura jugador
Y eso que aun me faltan declarar datos XD
Mi pregunta es como y cuanto ocupan los datos en memoria (en las estructuras) y con que tipo de datos se obtiene la mejor performance en los calculos...
El tema de la cantidad de memoria que ocupan las variables constantes?
			
			
			
				para saber el tamaño que ocupa podes usar sizeof(Variable) o sizeof(tipo)
			
			
			
				Sí, eso es, haz un write de sizeof ( ) aplicado a la estructura que has definido y lo sabrás, si tienes 1024x1024 variables de ese tipo verás que la cantidad de Mb de RAM que te vas a comer es realmente grande :P
Me refiero a hacer:
write ( 0 , 0 , 0 , 0 , sizeof ( player ) );
			
			
			
				o un simple say
			
			
			
				Lo decia, por la cantidad de memoria que ocupan las variables segun el tipo de dato...
Y como lo hace con las estructuras...
Para saber la mejor forma de armar las estructuras de datos y que tipos de datos usar para mantener mas o menos balanceado la relacion MemoriaDatos Vs PerformanceCalculoGraficosEtc
De todas formas gracias...
			
			
			
				Te digo lo mismo que le dije a otra persona: si vas a usar variables booleanas, agrúpalas de 8 en 8 y te ahorrarás 7 bytes, luego haces
if ((dato_b & 1) == 1) //primer bit
if ((dato_b & 2) == 2) //segundo bit
if ((dato_b & 4) == 4) //tercer bit
if ((dato_b & 8) == 8) //cuarto bit
Y así, esta comprobación no ocupa más de dos ciclos (vamos, que es casi tan básica como una suma).
Por cierto, creo que ya lo he preguntado alguna vez y siempre se me olvida ¿cómo se representan valores binarios en el código, o hexadecimales? creo que alguna vez he usado la notación hxx (por ejemplo, h0F es 16).
			
			
			
				Quote from: Drumpi on January 16, 2010, 10:43:11 PM
Te digo lo mismo que le dije a otra persona: si vas a usar variables booleanas, agrúpalas de 8 en 8 y te ahorrarás 7 bytes, luego haces
if ((dato_b & 1) == 1) //primer bit
if ((dato_b & 2) == 2) //segundo bit
if ((dato_b & 4) == 4) //tercer bit
if ((dato_b & 8) == 8) //cuarto bit
Y así, esta comprobación no ocupa más de dos ciclos (vamos, que es casi tan básica como una suma).
Por cierto, creo que ya lo he preguntado alguna vez y siempre se me olvida ¿cómo se representan valores binarios en el código, o hexadecimales? creo que alguna vez he usado la notación hxx (por ejemplo, h0F es 16).
eso es interesante
n.n
Ahorraria Bastante memoria asi
gracias Drumpi...
por cierto F en hexa es 15 no 16 :P
jajjaja
16 seria h10 :P
0 + F = 15
1 + E = 15
2 + D = 15
3 + C = 15
4 + B = 15
5 + A = 15
6 + 9 = 15
7 + 8 = 15
			
 
			
			
				cuando se chequea 1 solo bit, no es necesario poner el == con poner & valor es suficiente... y cuando se usan mas de 1 bit, si no nos interesa saber cual de esos bits, tampoco es necesario el ==
por ejemplo
if ( dato_b & 1 ) ....
if ( dato_b & 3 ) .... /* caso 2 bits y no me interesa saber cual de los 2 */
			
			
			
				en bennu los hexa se representan con una h al final, y los binarios con una b...
ejemplos...
10h = 16 decimal
0fh = 15 decimal
04h = 4 decimal
0011b = 03h = 3 decimal
			
			
			
				Wiiii, ya me iba haciendo mucha falta saber el binario, la de veces que he trabajado con máscaras o potencias de 2 con la calculadora al lado.
Nada, nada, karma up, puede que sea por una tontería, pero seguro que hay otras cosas por las que te mereces el karma y no te lo habré dado antes ;D
			
			
			
				Quote from: Drumpi on January 18, 2010, 02:15:14 PM
Wiiii, ya me iba haciendo mucha falta saber el binario, la de veces que he trabajado con máscaras o potencias de 2 con la calculadora al lado.
Nada, nada, karma up, puede que sea por una tontería, pero seguro que hay otras cosas por las que te mereces el karma y no te lo habré dado antes ;D
El flamebird no tenia una utilidad de conversor entre hexa y binario??