00001 00005 #ifndef _MUNDO__H_ 00006 #define _MUNDO__H_ 00007 00008 #include "vetor.h" 00009 #include "biota.h" 00010 00011 /******************************************************************************/ 00012 00017 struct NohGrao 00018 { 00019 Vetor<float> posicao; 00020 struct NohGrao *proximo; 00021 }; 00022 00027 struct NohParede 00028 { 00029 Vetor<float> inicio; 00030 Vetor<float> fim; 00031 struct NohParede *proximo; 00032 }; 00033 00040 class Mundo 00041 { 00042 protected: 00043 00044 /* Lista de biotas */ 00045 struct NohBiota 00046 { 00047 Biota biota; 00048 struct NohBiota *proximo; 00049 } 00050 nohCabecaBiotas; 00051 00052 /* Noh do biota selecionado */ 00053 struct NohBiota *selecionado; 00054 /* Noh do grao selecionado */ 00055 struct NohGrao *grao_selecionado; 00056 00057 struct NohParede nohCabecaParedes; 00058 00059 /* Fila de graos */ 00060 struct NohGrao nohCabecaGraos, *finalGraos; 00061 00062 /* Operacoes com graos */ 00063 /* remove um grao */ 00064 bool removerGrao(); 00065 00066 public: 00067 00068 /* Estatisticas */ 00069 struct 00070 { 00071 /* Contagem de biota e graos */ 00072 unsigned int numero_biotas; 00073 unsigned int numero_graos; 00074 unsigned long int ciclos; 00075 unsigned long int mortes; 00076 unsigned long int nascimentos; 00077 } 00078 estatisticas; 00079 00080 /* Propriedades globais */ 00081 struct 00082 { 00083 unsigned int teto_energetico; 00084 unsigned int energia_grao; 00085 unsigned int probabilidade_mutacao; 00086 unsigned int intensidade_mutacao; 00087 unsigned int tamanho_x, tamanho_y; 00088 } 00089 propriedades; 00090 00091 /* Construtores */ 00092 Mundo(); 00093 Mundo(unsigned int); 00094 Mundo(unsigned int, unsigned int); 00095 Mundo(unsigned int, unsigned int, unsigned int); 00096 00097 /* Destructor */ 00098 void destroy(); 00099 00100 /* Insere um biota no mundo */ 00101 void inserirBiota(Biota); 00102 /* Atualiza todos os biotas e graos do mundo */ 00103 void atualizar(); 00104 00105 /* Operacoes com biotas */ 00106 bool selecionarBiota(Vetor<float>); 00107 void descelecionarBiota(); 00108 00109 /* Operacoes com graos */ 00110 void inserirGrao(Vetor<float>); 00111 void posicionarGrao(Vetor<float>); 00112 bool selecionarGrao(Vetor<float>); 00113 void descelecionarGrao(); 00114 void removerGraoSelecionado(); 00115 bool graoSelecionado(); 00116 00117 /* abrir e salvar mundo */ 00118 void salvarMundo(FILE *); 00119 void abrirMundo(FILE *); 00120 00121 inline Biota getBiotaSelecionado() 00122 { 00123 if (selecionado) 00124 return selecionado->biota; 00125 else 00126 return Biota(); 00127 } 00128 00129 /* Classes amigas */ 00130 friend class Biota; 00131 00132 /* Funcoes amigas */ 00133 void desenhar_mundo(Mundo*); 00134 }; 00135 00136 /******************************************************************************/ 00137 00138 #endif /* #ifndef _MUNDO__H_ */