2016-11-27 13 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が、SetValueのm_Valueに作成された値が必要であるため、Tile.cppのSetValue関数に渡すことができるようにすることです。

現在のコードの大部分は無視されている可能性があります。コメントアウトされたコードは、現時点でどのようにコードを機能させる必要がありますか。これらのファイル以外のフレームワークには何も問題はありません。前に何回か使用したからです。

私はこれを行う簡単な方法があることを知っていますが、これはどのように私はそれを行う必要があります。オンラインで見つかったものが役に立たなかったので、誰かが私にこれを手伝ってもらえると本当に感謝しています。あなたが何かを明確にするためにもっとコードを必要とするかもしれないと思うなら、躊躇しないでください。また、私が2048クローンを作成するために使用している場合に役立ちます。

+0

はあなた 'SpawnTile'機能を使用すると、' newTile->のSetValue(XX)を行うことができます上の 'Tile'オブジェクトを返しません'?その名前が言うことはしません。 – usr2564301

+0

「HandleLeftClick」と他のハンドルは、与えられた入力をうまく処理したかどうかを知るために、 'bool'またはsmple列挙型を返さなければなりません。 'RandomizeSeed'は' Game'クラスの外側から見えるようには聞こえないので、私的な部分(または少なくとも保護されている部分)への移動が推奨されます。これは、内部ヘラー関数のように見える 'RandomRange()'にも当てはまります。前述のように、 'SpawnTile'は作成された' Tile'オブジェクトを返すか、 'Tile'へのポインタを返します。この場合、' void'は直感的です。 –

+1

さて、どのタイル**の値を設定しますか? – 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

これを試してみましたが、 "leftの '.SetValue'がクラス/構造体/共用体を持たなければならないというコンパイラエラーが発生しました –

+0

ポインタを参照したり、編集を参照したり、ポインタなしで' Tile * m_Tiles [NUM_TILES] 。 – user2205930

+1

なぜこれを行うべきなのか説明がないので、下降表示されています。 – immibis