Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <math.h>
- using std::ostream;
- using std::string;
- class Player {
- public:
- Player( const string& n ){
- name = n;
- }
- virtual ~Player();
- virtual const string& getType() const = 0;
- virtual Move play( const State& s ) = 0;
- friend ostream& operator << ( ostream& out, const Player& player ){
- out << player.getType() << " player " << player.name;
- return out;
- }
- protected:
- string name;
- };
- Player::~Player(){
- name.clear();
- }
- class GreedyPlayer : public Player {
- public:
- GreedyPlayer( const string& n ) : Player(n){
- type = "Greedy";
- }
- virtual const string& getType() const override{
- return type;
- }
- virtual Move play ( const State& s ) override {
- int max = 0;
- int candidate = 0;
- for( int i = 0; i < s.getHeaps( ); i++){
- if( s.getCoins(i) > max ){
- max = s.getCoins(i);
- candidate = i;
- }
- }
- Move m( candidate, s.getCoins(candidate), 0, 0 );
- return m;
- }
- private:
- string type;
- };
- class SpartanPlayer : public Player {
- public:
- SpartanPlayer( const string& n ) : Player(n){
- type = "Spartan";
- }
- virtual const string& getType() const override {
- return type;
- }
- virtual Move play ( const State& s ) override{
- int max = 0;
- int candidate = 0;
- for( int i = 0; i < s.getHeaps(); i++){
- if( s.getCoins(i) > max ){
- max = s.getCoins(i);
- candidate = i;
- }
- }
- Move m( candidate, 1, 0, 0 );
- return m;
- }
- private:
- string type;
- };
- class SneakyPlayer : public Player {
- public:
- SneakyPlayer( const string& n ) : Player(n){
- type = "Sneaky";
- }
- virtual const string& getType() const override{
- return type;
- }
- virtual Move play ( const State& s ) override{
- int min = 999999;
- int candidate = 0;
- for( int i = 0; i < s.getHeaps(); i++){
- if( s.getCoins(i) < min && s.getCoins(i) != 0 ){
- min = s.getCoins(i);;
- candidate = i;
- }
- }
- Move m( candidate, s.getCoins(candidate), 0, 0 );
- return m;
- }
- private:
- string type;
- };
- class RighteousPlayer : public Player {
- public:
- RighteousPlayer( const string& n ) : Player(n){
- type = "Righteous";
- }
- virtual const string& getType() const override {
- return type;
- }
- virtual Move play ( const State& s ) override{
- int max = 0;
- int min = 999999;
- int candidateMax = 0;
- int candidateMin = 0;
- for( int i = 0; i < s.getHeaps(); i++){
- if( s.getCoins(i) > max ){
- max = s.getCoins(i);
- candidateMax = i;
- }
- if( s.getCoins(i) < min ){
- min=s.getCoins(i);
- candidateMin = i;
- }
- }
- Move m( candidateMax, ceil(s.getCoins(candidateMax)/2.0) , candidateMin, ceil(s.getCoins(candidateMax)/2.0) - 1 );
- return m;
- }
- private:
- string type;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement