00001 00005 #ifndef _BIOTA__H_ 00006 #define _BIOTA__H_ 00007 00008 #include <stdio.h> 00009 #include <QDomNode> 00010 00011 #include "definicoes.h" 00012 #include "vetor.h" 00013 00014 /******************************************************************************/ 00015 00020 struct GenesSegmento 00021 { 00022 float arco; 00023 int comprimento; 00024 int massa; 00025 float angulo; 00026 unsigned int cor[3]; 00027 float fa, fb; 00028 }; 00029 00030 /******************************************************************************/ 00031 00036 struct GenesBiota 00037 { 00038 struct GenesSegmento *segmentos; 00039 unsigned int cor_cabeca[3]; 00040 int massa_cabeca; 00041 int limiar_reproducao; 00042 float distribuicao_energia; 00043 float angulo_reproducao; 00044 float angulo_colisao; 00045 }; 00046 00047 /******************************************************************************/ 00048 00053 struct EstadoBiota 00054 { 00055 float *posicaoSegmentos; 00056 Vetor<float> posicao; 00057 Vetor<float> velocidade; 00058 float velocidade_angular; 00059 float angulo; 00060 float energia; 00061 unsigned int idade; 00062 unsigned int geracao; 00063 unsigned int filhos; 00064 }; 00065 00066 /******************************************************************************/ 00067 00072 class Biota 00073 { 00074 00075 public: 00076 unsigned int lineage; 00077 00079 struct GenesBiota genes; 00080 00082 struct EstadoBiota estado; 00083 00084 unsigned int numero_segmentos; 00085 00087 void *mundo; 00088 00089 //public: 00090 00091 /* Construtores */ 00092 Biota(); 00093 Biota(void*); 00094 Biota(const Biota&); 00095 Biota(void*, Vetor<float>, FILE*); 00096 00097 /* Metodos */ 00098 enum ResultadoAtualizacao atualizar(void*); 00099 void mutacao(); 00100 bool selecionar(Vetor<float>); 00101 void salvar(FILE*, bool saveState=false, int ident=0); 00102 void abrir(FILE*); 00103 void abrir(QDomNode xmlNode); 00104 void posicionar(Vetor<float>); 00105 void acelerar(Vetor<float>); 00106 void destroy(); 00107 void refletir(); 00108 00109 /* Amigos */ 00110 friend class Mundo; 00111 }; 00112 00113 /******************************************************************************/ 00114 00115 #endif /* #ifndef _BIOTA__H_ */