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??