2015-08-08 63 views
-1

我有兩個類;球員類和比賽類。我希望玩家能夠使用其所有成員功能;攜帶,捕獲等,但其成員函數需要了解匹配類數據成員;董事會,對手,挑戰者,而不公開這些數據成員。無法訪問類之間的數據成員

如果你找不到一個好的解決方案或者對我所問的問題感到困惑,我仍然會對班級組織的建議感興趣。

mancala.h

#ifndef MANCALA_H 
#define MANCALA_H 

#include <string> 
#include <random> 

namespace mancala{ 

    class player{ 
     public: 
      void carry(int pit); 
      void capture(const int& pit); 
      bool madeStore(const int& pit)const; 
      bool madeCapture(const int& pit)const; 
      bool madeValidMove(const int& pit)const; 
      bool madeSideClear()const; 
      bool operator==(const player& p)const; 
     private: 
      std::string tag; 
    }; 

    class match{ 
     public: 
      match(const int& match_ID = 0) : board{4,4,4,4,4,4,0,4,4,4,4,4,4,0}{ 
       if(match_ID){ 
        ; 
       } 
       else{ 
        this->turn = randPlayer(); 
        this->status = "make move"; 
       } 
      }; 
      void begin(); 
      void end(); 
      void save(); 
      bool update(); 
     private: 
      player challenger, opponent, turn; 
      static const int seeds = 48; 
      static const int pits = 14; 
      std::string status; 
      int board[pits]; 
      void nextTurn(); 
      player randPlayer(); 
    }; 
} 

#endif//MANCALA_H 

來自實例:mancala.cpp

void player::carry(int pit) 
{ 
    if(this->madeValidMove(pit) == false){ 
     status = "invalid move"; 
    } 
    else{ 

     int hand = board[pit]; 

     board[pit] = 0; 

     for(hand; hand != 0; hand--){ 

      if(pit == 13){ 
       pit = 0; 
      } 
      else{ 
       pit++; 
      } 
      //Skips opponent store 
      if(pit == 13 && turn == challenger){ 
       pit = 0; 
      }//Skips challenger store 
      else if(pit == 6 && turn == opponent){ 
       pit++; 
      } 
      //If placing last seed check where it is being placed 
      if(hand == 1){ 
       //Store 
       if(this->madeStore(pit)){ 
        board[pit]++; 
        status = "free move"; 
       }//Capture 
       else if(this->madeCapture(pit)){ 
        this->capture(pit); 
        nextTurn(); 
       }//Normal 
       else{ 
        board[pit]++; 
        nextTurn(); 
       } 
      }//Placing seed 
      else{ 
       board[pit]++; 
      } 
     } 

     if(this->madeSideClear()){ 
      end(); 
     } 
    } 

    save(); 
} 

回答