Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.47 KB | None | 0 0
  1. #include <iostream>  
  2. #include <string>  
  3. #include <math.h>  
  4. using std::ostream;  
  5. using std::string;  
  6.  
  7. class Player {  
  8. public:  
  9.     Player( const string& n ){  
  10.         name = n;  
  11.     }  
  12.     virtual ~Player();  
  13.  
  14.     virtual const string& getType() const = 0;  
  15.     virtual Move play( const State& s ) = 0;  
  16.  
  17.     friend ostream& operator << ( ostream& out, const Player& player ){  
  18.         out << player.getType() << " player " << player.name;  
  19.         return out;  
  20.     }  
  21. protected:  
  22.     string name;  
  23. };  
  24.  
  25. Player::~Player(){  
  26.     name.clear();  
  27. }  
  28.  
  29. class GreedyPlayer : public Player {  
  30. public:  
  31.     GreedyPlayer( const string& n ) : Player(n){  
  32.         type = "Greedy";  
  33.     }  
  34.     virtual const string& getType() const override{  
  35.         return type;  
  36.     }  
  37.     virtual Move play ( const State& s ) override {  
  38.         int max = 0;  
  39.         int candidate = 0;  
  40.         for( int i = 0; i < s.getHeaps( ); i++){  
  41.             if( s.getCoins(i) > max ){  
  42.                 max = s.getCoins(i);  
  43.                 candidate = i;  
  44.             }  
  45.         }  
  46.         Move m( candidate, s.getCoins(candidate), 0, 0 );  
  47.         return m;  
  48.     }  
  49. private:  
  50.     string type;  
  51. };  
  52.  
  53. class SpartanPlayer : public Player {  
  54. public:  
  55.     SpartanPlayer( const string& n ) : Player(n){  
  56.         type = "Spartan";  
  57.     }  
  58.     virtual const string& getType() const override {  
  59.         return type;  
  60.     }  
  61.     virtual Move play ( const State& s ) override{  
  62.         int max = 0;  
  63.         int candidate = 0;  
  64.         for( int i = 0; i < s.getHeaps(); i++){  
  65.             if( s.getCoins(i) > max ){  
  66.                 max = s.getCoins(i);  
  67.                 candidate = i;  
  68.             }  
  69.         }  
  70.         Move m( candidate, 1, 0, 0 );  
  71.         return m;  
  72.     }  
  73. private:  
  74.     string type;  
  75. };  
  76.  
  77. class SneakyPlayer : public Player {  
  78. public:  
  79.     SneakyPlayer( const string& n ) : Player(n){  
  80.         type = "Sneaky";  
  81.     }  
  82.     virtual const string& getType() const override{  
  83.         return type;  
  84.     }  
  85.     virtual Move play ( const State& s ) override{  
  86.         int min = 999999;  
  87.         int candidate = 0;  
  88.         for( int i = 0; i < s.getHeaps(); i++){  
  89.             if( s.getCoins(i) < min && s.getCoins(i) != 0 ){  
  90.                 min = s.getCoins(i);;  
  91.                 candidate = i;  
  92.             }  
  93.         }  
  94.         Move m( candidate, s.getCoins(candidate), 0, 0 );  
  95.         return m;  
  96.     }  
  97. private:  
  98.     string type;  
  99. };  
  100.  
  101. class RighteousPlayer : public Player {  
  102. public:  
  103.     RighteousPlayer( const string& n ) : Player(n){  
  104.         type = "Righteous";  
  105.     }  
  106.     virtual const string& getType() const override {  
  107.         return type;  
  108.     }  
  109.     virtual Move play ( const State& s ) override{  
  110.         int max = 0;  
  111.         int min = 999999;  
  112.         int candidateMax = 0;  
  113.         int candidateMin = 0;  
  114.         for( int i = 0; i < s.getHeaps(); i++){  
  115.             if( s.getCoins(i) > max ){  
  116.                 max = s.getCoins(i);  
  117.                 candidateMax = i;  
  118.             }  
  119.             if( s.getCoins(i) < min ){  
  120.                 min=s.getCoins(i);  
  121.                 candidateMin = i;  
  122.             }  
  123.         }  
  124.         Move m( candidateMax, ceil(s.getCoins(candidateMax)/2.0) , candidateMin, ceil(s.getCoins(candidateMax)/2.0) - 1 );  
  125.         return m;  
  126.     }  
  127. private:  
  128.     string type;  
  129. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement