123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- Copyright (C) 2011 Weber Yann, Schuck Clement
-
- This file is part of Tansive.
-
- Tansive is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Tansive is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Tansive. If not, see <http://www.gnu.org/licenses/>.
- */
- #ifndef _GENOME_H
- #define _GENOME_H
-
- #include<stdlib.h>
- #include<stdio.h>
- #include"config.h"
-
- /*
- genome.h :
- Define struct, constantes and function for creature's genome management.
- */
-
- //what does the creature eat
- #define GNOME_VEGAN 1
- #define GNOME_CARNI 2
-
- //Various genome caracteristic's limit
- #define GNOME_MIN_WEIGHT 0
- #define GNOME_MAX_WEIGHT 100
- #define GNOME_MAX_STRENGHT 100
- #define GNOME_MIN_LIFE 10
- #define GNOME_MAX_LIFE 100
- #define GNOME_MIN_SPEED 2
- #define GNOME_MAX_SPEED 6
- #define GNOME_MAX_ENERGY 100
- #define GNOME_MAX_AGGRESSION 100
- #define GNOME_MAX_PERCEP 10
- #define GNOME_MAX_LIFETIME 500
- #define GNOME_MIN_LIFETIME 100
- #define GNOME_MIN_NBCHILD 1
- #define GNOME_MAX_NBCHILD 5
- #define GNOME_MIN_REPROFREQ 10
- #define GNOME_MAX_REPROFREQ 100
-
- //Memorie limits
- #define GNOME_MAX_MEM_SIZE 100
-
- #define GNOME_MEMORYCAP_FOOD 1
- #define GNOME_MEMORYCAP_DANGER 2
- #define GNOME_MEMORYCAP_TARGET 4
-
- #define GNOME_MEMORY_ELTTYPE_FOOD 1
- #define GNOME_MEMORY_ELTTYPE_DANGER 2
- #define GNOME_MEMORY_ELTTYPE_TARGET 3
-
- #define GNOME_MEMORYTYPE_RAND 1
- #define GNOME_MEMORYTYPE_BOUCLE 2
- #define GNOME_MEMORYTYPE_INT 3
-
- //Mutation constants
- #define GNOME_MUTATION_CHANCE 500
- #define GNOME_MUTATION_MIN 3
- #define GNOME_MUTATION_MAX 10
- #define GNOME_MUTATION_GNOM_MODIF 10
-
- //Name limits
- #define GNOME_MAX_NAMESIZE 10
- #define GNOME_MIN_NAMESIZE 3
-
- //Store one element of memorie
- typedef struct _t_mem_element
- {
- char type;//take value in GNOME_MEMORYTYPE_*
- int x;
- int y;
- }t_mem_element;
-
- //Represent the memory of the creature
- typedef struct _t_memory
- {
- t_mem_element* mem;
- }t_memory;
-
- /*
- This structure defined the caracteristics of a creature
- */
- typedef struct _t_genome
- {
- int weight; //take value in [0..GNOME_MAX_WEIGHT]
- int strenght; //take value in [0..GNOME_MAX_STRENGHT]
- int life; //take value in [0..GNOME_MAX_LIFE]
- int speed; //take value in [0..GNOME_MAX_SPEED]
- int energy; //take value in [0..GNOME_MAX_ENERGY]
- int aggression; //take value in [0..GNOME_MAX_AGGRESSION]
- int perception; //take value in [0..GNOME_MAX_PERCEPT]
- int lifetime; //take value in [GNOME_MIN_LIFETIME..GNOME_MAX_LIFETIME]
- int nbchild; //take value in [GNOME_MIN_NBCHILD..GNOME_MAX_NBCHILD]
- int reprofreq; //take value in [GNOME_MIN_REPROFREQ..GNOME_MAX_REPROFREQ]
-
- char mem_capabilities;
- char mem_type;
- char mem_size;
-
- char food; //take value in GNOME_VEGAN or GNOME_CARNI
-
- char* name;
- //Stats about the genome
- unsigned long nb_creat;
- unsigned long nb_nat_dead;
- unsigned long nb_star_dead;
- unsigned long nb_figt_dead;
- unsigned long nb_eat_dead;
-
- }t_genome;
-
- //Store a node of a genome tree
- typedef struct _t_tree_genome
- {
- struct _t_tree_genome* parent;
- struct _t_tree_genome** child;
- unsigned long nb_child;
- t_genome gnome;
- }t_tree_genome;
-
- //Generate a random genome
- t_genome rand_genome();
-
- //Return a genome with mutations
- t_genome mutation(t_genome orig);
-
- //Add a child to a node
- t_tree_genome* add_child_treegnome(t_tree_genome* t, t_tree_genome* child);
-
- //Initialize a node with a genome
- t_tree_genome* create_new_gnometree_node(t_genome gnome);
-
- //Print the genome tree on stdout
- void disp_genome_tree_info(t_tree_genome* t, char eq_zero);
-
- //Write the genome tree in graphviz's format on file
- void write_graphviz_genome_tree(FILE* file, t_tree_genome* t);
-
- //Return a random char, vowel or consonant
- char rand_char(char type);
-
- //return a random name
- char* rand_name();
-
- //return !(rand()%proba)
- char calc_proba(int proba);
-
- #endif
|