diff options
Diffstat (limited to '2015-spacebot/include')
-rw-r--r-- | 2015-spacebot/include/alien.h | 11 | ||||
-rw-r--r-- | 2015-spacebot/include/brain/bias_node.h | 12 | ||||
-rw-r--r-- | 2015-spacebot/include/brain/neural_link.h | 17 | ||||
-rw-r--r-- | 2015-spacebot/include/brain/neural_network.h | 41 | ||||
-rw-r--r-- | 2015-spacebot/include/brain/neural_node.h | 18 | ||||
-rw-r--r-- | 2015-spacebot/include/brain/neuron.h | 22 | ||||
-rw-r--r-- | 2015-spacebot/include/brain/sensor.h | 10 | ||||
-rw-r--r-- | 2015-spacebot/include/building.h | 12 | ||||
-rw-r--r-- | 2015-spacebot/include/enemy_bullet.h | 12 | ||||
-rw-r--r-- | 2015-spacebot/include/game_entity.h | 17 | ||||
-rw-r--r-- | 2015-spacebot/include/game_state.h | 44 | ||||
-rw-r--r-- | 2015-spacebot/include/move.h | 12 | ||||
-rw-r--r-- | 2015-spacebot/include/move_string_mapper.h | 14 | ||||
-rw-r--r-- | 2015-spacebot/include/player_missile.h | 11 | ||||
-rw-r--r-- | 2015-spacebot/include/shield.h | 12 | ||||
-rw-r--r-- | 2015-spacebot/include/spacebot.h | 18 | ||||
-rw-r--r-- | 2015-spacebot/include/spaceship.h | 12 |
17 files changed, 295 insertions, 0 deletions
diff --git a/2015-spacebot/include/alien.h b/2015-spacebot/include/alien.h new file mode 100644 index 0000000..5dda726 --- /dev/null +++ b/2015-spacebot/include/alien.h @@ -0,0 +1,11 @@ +#pragma once + +#include "game_entity.h" + +class Alien : public GameEntity +{ +public: + Alien(int x, int y); + const static char MAP_CHAR = 'x'; +private: +}; diff --git a/2015-spacebot/include/brain/bias_node.h b/2015-spacebot/include/brain/bias_node.h new file mode 100644 index 0000000..77c5884 --- /dev/null +++ b/2015-spacebot/include/brain/bias_node.h @@ -0,0 +1,12 @@ +#pragma once + +#include "brain/neural_node.h" + +class BiasNode: public NeuralNode +{ +public: +BiasNode() : NeuralNode("b0") + { + _activation = 1; + } +}; diff --git a/2015-spacebot/include/brain/neural_link.h b/2015-spacebot/include/brain/neural_link.h new file mode 100644 index 0000000..14f58b9 --- /dev/null +++ b/2015-spacebot/include/brain/neural_link.h @@ -0,0 +1,17 @@ +#pragma once + +#include "neural_node.h" + +class NeuralLink +{ +public: + NeuralLink(NeuralNode* input, double weight); + double weightedActivation() const; + + double weight() const { return _weight; } + std::string inputIdentifier() const { return _input->identifier(); } + +private: + NeuralNode* _input; + double _weight; +}; diff --git a/2015-spacebot/include/brain/neural_network.h b/2015-spacebot/include/brain/neural_network.h new file mode 100644 index 0000000..7fcf5f4 --- /dev/null +++ b/2015-spacebot/include/brain/neural_network.h @@ -0,0 +1,41 @@ +#pragma once + +#include <memory> +#include <istream> +#include <vector> +#include <map> +#include <string> + +#include "brain/neural_node.h" +#include "brain/sensor.h" +#include "brain/bias_node.h" +#include "brain/neuron.h" + +class NeuralNetwork +{ +public: + NeuralNetwork(std::istream &&networkConfigFile, unsigned int numberOfSensors, unsigned int numberOfOutputs); + NeuralNetwork(std::istream &&networkConfigFile, std::vector<bool> sensorInitialValues, unsigned int numberOfOutputs); + + void setInput(unsigned int inputIndex, double activation); + unsigned int findMaxOutputIndex() const; + + unsigned int numberOfSensors() const { return _sensors.size(); } + unsigned int numberOfOutputs() const { return _outputs.size(); } + unsigned int numberOfNeurons() const { return _neurons.size(); } + + bool linkExists(std::string srcIdentifier, std::string destIdentifier, double weight) const; + +private: + std::vector<std::shared_ptr<Sensor>> _sensors; + std::shared_ptr<BiasNode> _biasNode; + std::vector<std::shared_ptr<Neuron>> _neurons; + std::vector<std::shared_ptr<Neuron>> _outputs; + + void parseFile(std::istream &&file); + + void addLink(std::shared_ptr<NeuralNode> source, std::shared_ptr<Neuron> destination, double weight); + std::shared_ptr<Sensor> findOrAddSensor(unsigned int id); + std::shared_ptr<Neuron> findOrAddNeuron(unsigned int id); +}; + diff --git a/2015-spacebot/include/brain/neural_node.h b/2015-spacebot/include/brain/neural_node.h new file mode 100644 index 0000000..2684146 --- /dev/null +++ b/2015-spacebot/include/brain/neural_node.h @@ -0,0 +1,18 @@ +#pragma once + +#include <string> + +class NeuralNode +{ +public: + double activation() const { return _activation; } + std::string identifier() const { return _identifier; } + +NeuralNode(std::string identifier): _identifier(identifier) {} + +protected: + double _activation; + +private: + std::string _identifier; +}; diff --git a/2015-spacebot/include/brain/neuron.h b/2015-spacebot/include/brain/neuron.h new file mode 100644 index 0000000..ca26c73 --- /dev/null +++ b/2015-spacebot/include/brain/neuron.h @@ -0,0 +1,22 @@ +#pragma once + +#include <memory> +#include <vector> + +#include "neural_node.h" +#include "neural_link.h" + +class Neuron : public NeuralNode +{ +public: + void addInput(NeuralLink&& link); + bool calculateActivation(); + +Neuron(int index) : NeuralNode('n'+std::to_string(index)){}; + + bool hasInputWithWeight(std::string srcIdentifier, double weight) const; + +private: + std::vector<NeuralLink> _inputLinks; + double sigmoid(double input) const; +}; diff --git a/2015-spacebot/include/brain/sensor.h b/2015-spacebot/include/brain/sensor.h new file mode 100644 index 0000000..10f62a7 --- /dev/null +++ b/2015-spacebot/include/brain/sensor.h @@ -0,0 +1,10 @@ +#pragma once + +#include "brain/neural_node.h" + +class Sensor: public NeuralNode +{ +public: +Sensor(int index) :NeuralNode('s'+std::to_string(index)){} + void setActivation(double activation) { _activation = activation; } +}; diff --git a/2015-spacebot/include/building.h b/2015-spacebot/include/building.h new file mode 100644 index 0000000..76d78fd --- /dev/null +++ b/2015-spacebot/include/building.h @@ -0,0 +1,12 @@ +#pragma once + +#include "game_entity.h" + +class Building : public GameEntity +{ +public: + Building(int x, int y); + const static char MISSILE_CONTROLLER_CHAR = 'M'; + const static char ALIEN_FACTORY_CHAR = 'X'; +}; + diff --git a/2015-spacebot/include/enemy_bullet.h b/2015-spacebot/include/enemy_bullet.h new file mode 100644 index 0000000..ff3b001 --- /dev/null +++ b/2015-spacebot/include/enemy_bullet.h @@ -0,0 +1,12 @@ +#pragma once + +#include "game_entity.h" + +class EnemyBullet: public GameEntity +{ +public: + EnemyBullet(int x, int y); + const static char ALIEN_MAP_CHAR = '|'; + const static char ENEMY_MISSILE_MAP_CHAR = 'i'; +private: +}; diff --git a/2015-spacebot/include/game_entity.h b/2015-spacebot/include/game_entity.h new file mode 100644 index 0000000..09e0bcc --- /dev/null +++ b/2015-spacebot/include/game_entity.h @@ -0,0 +1,17 @@ +#pragma once + +#include <string> + +class GameEntity +{ +public: + GameEntity(int x, int y); + int x() const {return _x;} + int y() const {return _y;} + + std::string coords() const; +private: + int _x; + int _y; +}; + diff --git a/2015-spacebot/include/game_state.h b/2015-spacebot/include/game_state.h new file mode 100644 index 0000000..c129d28 --- /dev/null +++ b/2015-spacebot/include/game_state.h @@ -0,0 +1,44 @@ +#pragma once + +#include "alien.h" +#include "enemy_bullet.h" +#include "player_missile.h" +#include "shield.h" +#include "spaceship.h" +#include "building.h" +#include <vector> +#include <string> +#include <istream> +#include <memory> + +class GameState +{ +public: + GameState(std::istream &&mapFile); + void logState() const; + + const std::vector<Alien>& aliens() const { return _aliens; } + const std::vector<EnemyBullet>& bullets() const { return _bullets; } + const std::vector<PlayerMissile>& missiles() const { return _missiles; } + const std::vector<Shield>& shields() const { return _shields; } + const std::vector<Building>& missileControllers() const { return _missileControllers; } + const std::vector<Building>& alienFactories() const { return _alienFactories; } + + const std::unique_ptr<Spaceship>& playerSpaceship() const { return _playerSpaceship; } + const std::unique_ptr<Spaceship>& enemySpaceship() const { return _enemySpaceship; } + + std::vector<bool> toBitArray() const; + +private: + std::vector<Alien> _aliens; + std::vector<EnemyBullet> _bullets; + std::vector<PlayerMissile> _missiles; + std::vector<Shield> _shields; + std::vector<Building> _missileControllers; + std::vector<Building> _alienFactories; + + std::unique_ptr<Spaceship> _playerSpaceship; + std::unique_ptr<Spaceship> _enemySpaceship; + + int addEntity(int x, int y, char type); +}; diff --git a/2015-spacebot/include/move.h b/2015-spacebot/include/move.h new file mode 100644 index 0000000..489aeb9 --- /dev/null +++ b/2015-spacebot/include/move.h @@ -0,0 +1,12 @@ +#pragma once + +enum class Move: int +{ + NOTHING = 0, + MOVE_LEFT = 1, + MOVE_RIGHT = 2, + SHOOT = 3, + BUILD_MISSILE_CONTROLLER = 4, + BUILD_ALIEN_FACTORY = 5, + BUILD_SHIELD = 6 +}; diff --git a/2015-spacebot/include/move_string_mapper.h b/2015-spacebot/include/move_string_mapper.h new file mode 100644 index 0000000..46144c7 --- /dev/null +++ b/2015-spacebot/include/move_string_mapper.h @@ -0,0 +1,14 @@ +#pragma once + +#include <string> +#include <map> +#include "move.h" + +class MoveStringMapper +{ +public: + MoveStringMapper(); + std::string toString(const Move &move); +private: + std::map<Move, const char*> moveMap; +}; diff --git a/2015-spacebot/include/player_missile.h b/2015-spacebot/include/player_missile.h new file mode 100644 index 0000000..c504a79 --- /dev/null +++ b/2015-spacebot/include/player_missile.h @@ -0,0 +1,11 @@ +#pragma once + +#include "game_entity.h" + +class PlayerMissile: public GameEntity +{ +public: + PlayerMissile(int x, int y); + const static char MAP_CHAR = '!'; +private: +}; diff --git a/2015-spacebot/include/shield.h b/2015-spacebot/include/shield.h new file mode 100644 index 0000000..be65be3 --- /dev/null +++ b/2015-spacebot/include/shield.h @@ -0,0 +1,12 @@ +#pragma once + +#include "game_entity.h" + +class Shield: public GameEntity +{ +public: + Shield(int x, int y); + const static char MAP_CHAR = '-'; +private: +}; + diff --git a/2015-spacebot/include/spacebot.h b/2015-spacebot/include/spacebot.h new file mode 100644 index 0000000..9f7f83e --- /dev/null +++ b/2015-spacebot/include/spacebot.h @@ -0,0 +1,18 @@ +#pragma once + +#include <string> +#include "move.h" +#include "game_state.h" + +class Spacebot { +public: + Spacebot(std::string outputPath, std::string brainFilename); + void writeNextMove(); +private: + std::string _outputFilename; + std::string _brainFilename; + GameState _gameState; + + void writeMove(const Move& move); + Move chooseMove(); +}; diff --git a/2015-spacebot/include/spaceship.h b/2015-spacebot/include/spaceship.h new file mode 100644 index 0000000..bd26b64 --- /dev/null +++ b/2015-spacebot/include/spaceship.h @@ -0,0 +1,12 @@ +#pragma once + +#include "game_entity.h" + +class Spaceship: public GameEntity +{ +public: + Spaceship(int x, int y); + const static char ENEMY_MAP_CHAR = 'V'; + const static char PLAYER_MAP_CHAR = 'A'; +private: +}; |