检查数组中消息的最有效方法 我正在研究C++中的象棋游戏,想知道是否有任何模式或好的编程方法来检查类间的消息。< /P>

检查数组中消息的最有效方法 我正在研究C++中的象棋游戏,想知道是否有任何模式或好的编程方法来检查类间的消息。< /P>,c++,arrays,c++11,C++,Arrays,C++11,在我的问题中,我有两个类,boardSquare和GameBoard类(BoardSquareManager)。boardsquare的功能是,当您单击一个正方形时,一个布尔值将被设置为true,这意味着boardsquare已被单击。目前在GameBoard类中,我有一个boardsquare数组,为了检查是否有一个boardsquare被点击,我检查了每个boardsquare,每个勾号,看看是否有人被点击,它是这样的 void AGameBoard::CheckMessages() {

在我的问题中,我有两个类,boardSquare和GameBoard类(BoardSquareManager)。boardsquare的功能是,当您单击一个正方形时,一个布尔值将被设置为true,这意味着boardsquare已被单击。目前在GameBoard类中,我有一个boardsquare数组,为了检查是否有一个boardsquare被点击,我检查了每个boardsquare,每个勾号,看看是否有人被点击,它是这样的

void AGameBoard::CheckMessages()
{
  for (int i = 0; i < 64; i++)
 {
    if (BoardSquareArray[i]->GetWasClicked())
    {

        iClickedTile = BoardSquareArray[i]->GetSquareNum();

        BoardSquareArray[i]->DeactivateClick();

        bTileWasClicked = true;
    }
 }
}
void AGameBoard::CheckMessages()
{
对于(int i=0;i<64;i++)
{
if(BoardSquareArray[i]->GetWasClicked())
{
iClickedTile=BoardSquareArray[i]->GetSquareNum();
BoardSquareArray[i]->取消激活单击();
bTileWasClicked=true;
}
}
}
在我看来,我觉得没有必要一直查看整个阵列,这样我就可以在单击或未单击磁贴时获取信息,你知道有什么更好的方法在上面执行此操作吗


我感谢所有的答案

制作一些std::vector或std::stack,并将单击的平铺坐标的单击事件推送到那里。您还可以创建一些onClick方法,该方法将指针置于面板上,并向其发送有关单击的平铺的消息


在internet上搜索有关事件处理的信息。

制作一些std::vector或std::stack,并将单击事件与单击的平铺的坐标一起推送到那里。您还可以创建一些onClick方法,该方法将指针置于面板上,并向其发送有关单击的平铺的消息


在互联网上搜索有关事件处理的信息。

是否考虑过观察者模式?E.Gamma的经典设计模式书包含了许多来自实现GUI应用程序的模式。其他可能有趣的模式有命令(是否要撤消移动?)、装饰器、命令链、组合、策略、模板方法。我绝对推荐你读这本书。

你考虑过观察者模式吗?E.Gamma的经典设计模式书包含了许多来自实现GUI应用程序的模式。其他可能有趣的模式有命令(是否要撤消移动?)、装饰器、命令链、组合、策略、模板方法。我绝对推荐阅读这本书。

现在我已经开始制作一个有队列的静态类。我使用这个类将消息从BoardSquare发送到Gameboard。(在长期目标中,创建一个静态类可能不是“最佳”解决方案,但由于这是一个原型,我认为它现在可能可行)

静态MessageClass的代码:

/*
* Public variables
*/

static void SendMsgToBoard(int& tile) { TileNumbers.push_back(tile); }

static int& RecieveMsgFromSquare() { return TileNumbers.front(); }

static void SquareMsgRecieved() { TileNumbers.pop_front(); }

static bool IsEmpty() { return TileNumbers.empty(); }


private:

/*
* Private Variables
*/

static std::deque<int> TileNumbers;
Gameboard的新代码:

if (!MessagePasser::IsEmpty())
{
    if (IsTileOccupied)
    {
        //Do stuff...
    }
    else
        //Do Other Stuff...

    MessagePasser::SquareMsgRecieved();
}

现在我已经创建了一个静态类,它有一个队列。我使用这个类将消息从BoardSquare发送到Gameboard。(在长期目标中,创建一个静态类可能不是“最佳”解决方案,但由于这是一个原型,我认为它现在可能可行)

静态MessageClass的代码:

/*
* Public variables
*/

static void SendMsgToBoard(int& tile) { TileNumbers.push_back(tile); }

static int& RecieveMsgFromSquare() { return TileNumbers.front(); }

static void SquareMsgRecieved() { TileNumbers.pop_front(); }

static bool IsEmpty() { return TileNumbers.empty(); }


private:

/*
* Private Variables
*/

static std::deque<int> TileNumbers;
Gameboard的新代码:

if (!MessagePasser::IsEmpty())
{
    if (IsTileOccupied)
    {
        //Do stuff...
    }
    else
        //Do Other Stuff...

    MessagePasser::SquareMsgRecieved();
}

您必须为GUI使用某种框架。这是怎么一回事?然后,您可以使用该框架提供的技术通知您的经理。添加一个堆栈或向量,在其中推送单击的方形坐标。在后处理时弹出它们,当它为空时,您就完成了。@LogicStuff我目前正在虚幻引擎4中构建它。@Jongware这实际上是一个非常聪明的解决方案,谢谢,我会尝试的!不客气:)因为我对STL不太熟悉,如果这足以让它工作,请随意添加您自己的解决方案作为答案。您必须使用一些GUI框架。这是怎么一回事?然后,您可以使用该框架提供的技术通知您的经理。添加一个堆栈或向量,在其中推送单击的方形坐标。在后处理时弹出它们,当它为空时,您就完成了。@LogicStuff我目前正在虚幻引擎4中构建它。@Jongware这实际上是一个非常聪明的解决方案,谢谢,我会尝试的!不客气:)因为我对STL不太熟悉,如果这足以让它工作,请随意添加您自己的解决方案作为答案。我读过一本类似的书,名为《游戏编程模式》,它也解释了很多模式,例如has Observer等,虽然我认为这些模式对于两个类之间的通信来说太复杂了。尽管我可能也会研究一些其他模式,谢谢你的建议!最后,我使用了一个简单的队列,我将单击的互动程序推到了上面!:)@Tim0n我忘了提到模型视图,不管是什么样的模式族。它更像是一种用于构建应用程序的模式,但对于交互式应用程序来说,它通常是一个很好的解决方案。我读过一本类似的书,叫做“游戏编程模式”,它也解释了很多模式,例如has Observer等,虽然我认为这些模式对于两个类之间的通信来说太复杂了。尽管我可能也会研究一些其他模式,谢谢你的建议!最后,我使用了一个简单的队列,我将单击的互动程序推到了上面!:)@Tim0n我忘了提到模型视图,不管是什么样的模式族。它更像是一种构造应用程序的模式,但对于交互式应用程序来说,它通常是一个很好的解决方案。是的,我创建了一个静态类,其中包含一个队列,我将单击的互动程序推到该队列上,它现在似乎可以工作,如果需要更复杂的话,我会看一看制作某种clickMethod。是的,我制作了一个静态类,其中有一个队列,我在队列上推了单击的互动程序,现在似乎可以工作了,如果需要更复杂的话,我会看一看制作某种clickMethod。制作一个静态类有什么意义?我经常这样做,但我从来没有抓住要点。从设计的角度