Graine
Génération procédurale de créatures et apprentissage par réseaux de neurones.
Creature.hpp
Go to the documentation of this file.
1 #ifndef CREATURE
2 #define CREATURE
3 
4 #include <iostream>
5 #include <string>
6 #include <vector>
7 #include <map>
8 #include <algorithm>
9 #include <cmath>
10 #include "../map/Map.hpp"
11 #include "../map/Position.hpp"
12 #include "../neuronNetwork/NeuronNetwork.hpp"
15 #include "../map/case/material/FoodMaterial.hpp"
16 #include "FeelingBar.hpp"
17 #include "../exception/BadNumberOfInputException.hpp"
18 #include "../exception/BadNumberOfOutputException.hpp"
19 
20 #define BRAIN_INPUT 2
21 #define BRAIN_OUTPUT 3
22 #define BRAIN_HIDDEN_LAYER 1
23 #define BRAIN_NEURON_PER_LAYER 6
24 
25 #define SPEED_MULT 1
26 
27 class Creature{
28 
29  private:
30  int id;
31  Map& map;
32  Position position;
33  double rotation;
34  NeuronNetwork brain;
35  std::map<InputId, InputFeature*> inputFeatures;
36  std::map<OutputId, OutputFeature*> outputFeatures;
37  std::map<FeelingBarId, FeelingBar*> feelingBars;
38 
39  Position objective;
40 
41  public:
42  Creature(int id, Map& map, Position position);
43  Creature(int id, Map& map, Position position, NeuronNetwork brain);
44  Creature(int id, Map& map, Position position, Position& objective);
45  Creature(int id, Map& map, Position position, NeuronNetwork brain, Position& objective);
46  Creature(Creature& copy);
47  void think();
48  void eat();
49  void doActions();
50  void move(int speed);
51  void move(double forceLeft, double forceRight);
52  void turnLeft();
53  void turnRight();
54 
55  void addInputFeature(InputId, InputFeature* input);
57  void clearFeatures();
58 
59  void addFeelingBar(FeelingBarId id, FeelingBar* bar);
60  double getFeelingValue(FeelingBarId id) const;
61 
62  Position& getPosition();
63  void setPosition(Position position);
64  double getRotation() const;
65  double& getRotationRef();
66  void setRotation(double rotation);
67  int getId() const;
69  Position& getObjective();
70  void setObjective(Position& objective);
71  void setObjective(double x, double y);
72 
73  static bool comparePosition(const Creature* c1, const Creature* c2);
74  static bool compareHunger(const Creature* c1, const Creature* c2);
75 };
76 
77 #endif
Definition: Creature.hpp:27
void turnLeft()
Definition: Creature.cpp:100
void turnRight()
Definition: Creature.cpp:107
FeelingBarId
Definition: FeelingBar.hpp:4
int getId() const
Definition: Creature.cpp:157
void setObjective(Position &objective)
Definition: Creature.cpp:181
Position & getPosition()
Definition: Creature.cpp:137
void doActions()
Definition: Creature.cpp:73
void move(int speed)
Definition: Creature.cpp:77
void addOutputFeature(OutputId, OutputFeature *output)
Definition: Creature.cpp:118
void addInputFeature(InputId, InputFeature *input)
Definition: Creature.cpp:114
void think()
Definition: Creature.cpp:38
void setPosition(Position position)
Definition: Creature.cpp:141
double getFeelingValue(FeelingBarId id) const
Definition: Creature.cpp:131
void addFeelingBar(FeelingBarId id, FeelingBar *bar)
Definition: Creature.cpp:127
static bool comparePosition(const Creature *c1, const Creature *c2)
Definition: Creature.cpp:165
void setRotation(double rotation)
Definition: Creature.cpp:149
Definition: NeuronNetwork.hpp:11
Definition: FeelingBar.hpp:6
double getRotation() const
Definition: Creature.cpp:145
InputId
Definition: InputFeature.hpp:9
Position & getObjective()
Definition: Creature.cpp:177
OutputId
Definition: OutputFeature.hpp:9
void clearFeatures()
Definition: Creature.cpp:122
static bool compareHunger(const Creature *c1, const Creature *c2)
Definition: Creature.cpp:172
Definition: InputFeature.hpp:11
Creature(int id, Map &map, Position position)
Definition: Creature.cpp:14
double & getRotationRef()
Definition: Creature.cpp:153
NeuronNetwork & getBrain()
Definition: Creature.cpp:161
void eat()
Definition: Creature.cpp:67
Definition: OutputFeature.hpp:11