2016-11-27 56 views
-2

我有一個我正在使用的框架的代碼示例。爲了便於閱讀,我從不同的文件中分離出代碼塊。如何使用C++中的類將一個函數的隨機值傳遞給另一個函數?

Tile.h

class Tile 
{ 
public: 
    Tile(int row, int column); 
    ~Tile(); 

    void Draw(); 
    void Update(double delta); 

    void SetValue(int value); 
    int GetValue(); 

private: 
    //Member variables 
    Label* m_ValueLabel; 
    int m_Value = 0; 
    int m_Row; 
    int m_Column; 
    float duration = 0.0f; 
    float xScale = 0; 
    float yScale = 0; 
}; 

Tile.cpp

void Tile::SetValue(int value) 
{ 
    //Set the Tile's value 
    m_Value = value; 

    //if (m_Value != EMPTY_TILE) 
    { 
     //Update the Tile's Label 
     m_ValueLabel->SetText(to_string(m_Value)); 
    } 
    /*else 
    { 
     m_ValueLabel->SetText(""); 
    }*/ 
} 

Game.h

class Game 
{ 
public: 
    Game(); //Constructor 
    ~Game(); //Destructor 

    void Update(double delta); 
    void Draw(); 

    void HandleLeftMouseClick(float mouseX, float mouseY); 
    void HandleRightMouseClick(float mouseX, float mouseY); 
    void HandleKeyPress(Keyboard::Key key); 

    bool isBoardFull(); 
    int GetEmptyTileIndex(); 

    void SpawnTile(); 

    void RandomizeSeed(); 
    int RandomRange(int min, int max); 

private: 
    //Member variables should go here 
    Tile* m_Tiles[NUM_TILES]; 
    bool isTileFull[16] = {}; 
    int TileValueArray[5] = { 2,2,2,4,4 }; 
}; 

Game.cpp

void Game::SpawnTile() 
{ 
    RandomizeSeed(); 
    int meaningfulVariableName = GetEmptyTileIndex(); 
    if (meaningfulVariableName != -1) 
    { 
      int RandomNumber = RandomRange(0,4); 
      int TileValue = TileValueArray[RandomNumber]; 

    } 
    else if (meaningfulVariableName == -1) 
    { 
     //Does nothing 
    } 
} 

我需要做的是使得在Game.cpp中創建的TileValue可以傳遞給Tile.cpp中的SetValue函數,因爲創建的值對於SetValue中的m_Value是必需的。

大多數代碼可能被忽略,任何註釋掉的內容都不應該影響我目前需要的代碼的功能。這些文件之外的框架沒有什麼問題,因爲我以前曾經使用過它。

我知道有更簡單的方法來做到這一點,但這是我需要做到這一點。如果有人能夠幫助我,我會很感激,因爲我在網上找到的任何東西都沒有幫助。如果你認爲你可能需要更多的代碼來澄清某些事情,請不要猶豫,問。另外,如果它幫助我使用這個來創建一個2048克隆。

+0

不你'SpawnTile'函數返回一個'Tile'對象,你可以做一個'newTile->的SetValue(XX) '?它看起來不像它的名字所說的那樣做。 – usr2564301

+0

有幾條評論並沒有固定地連接到問題:'HandleLeftClick'和其他句柄應該返回'bool'或者smple enum來通知它們是否已經成功地處理了給定的輸入。 'RandomizeSeed'聽起來不像是應該從'Game'類外部可見的,所以建議移動到私有部分(或至少保護)。這也適用於'RandomRange()',它看起來像內部heler函數。同樣如上所述,你'SpawnTile'應該返回創建的'Tile'對象,或者指向'Tile'的指針,'void'在這種情況下是違反直覺的。 –

+1

那麼,你想要設置哪個tile **值? – immibis

回答

-1

你有一個函數Game::GetEmptyTileIndex它將返回一個索引。您可以使用該索引通過改變Game::SpawnTile功能,像這樣設置Game::m_Tiles

// Game.cpp 
void Game::SpawnTile() 
{ 
    RandomizeSeed(); 

    // Returns a tile index. 
    int meaningfulVariableName = GetEmptyTileIndex(); 

    if (meaningfulVariableName != -1) 
    { 
      int RandomNumber = RandomRange(0,4); 
      int TileValue = TileValueArray[RandomNumber]; 
      // Set the value for the tile at the required index. 
      m_Tiles[meaningfulVariableName]->SetValue(TileValue); 
    } 
    else if (meaningfulVariableName == -1) 
    { 
     //Does nothing 
    } 
} 
+0

我試過了,它給了我一個編譯器錯誤,說「左邊的'.SetValue'必須有類/結構/聯合」 –

+0

指針,請參閱編輯或聲明'Tile * m_Tiles [NUM_TILES]'而不是一個指針。 – user2205930

+1

Downvoted,因爲沒有解釋爲什麼他們應該這樣做。 – immibis

相關問題