我有一個我正在使用的框架的代碼示例。爲了便於閱讀,我從不同的文件中分離出代碼塊。如何使用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克隆。
不你'SpawnTile'函數返回一個'Tile'對象,你可以做一個'newTile->的SetValue(XX) '?它看起來不像它的名字所說的那樣做。 – usr2564301
有幾條評論並沒有固定地連接到問題:'HandleLeftClick'和其他句柄應該返回'bool'或者smple enum來通知它們是否已經成功地處理了給定的輸入。 'RandomizeSeed'聽起來不像是應該從'Game'類外部可見的,所以建議移動到私有部分(或至少保護)。這也適用於'RandomRange()',它看起來像內部heler函數。同樣如上所述,你'SpawnTile'應該返回創建的'Tile'對象,或者指向'Tile'的指針,'void'在這種情況下是違反直覺的。 –
那麼,你想要設置哪個tile **值? – immibis