检查数组中消息的最有效方法
Most efficient way to check for messages in array
我目前正在用c++开发一款类似象棋的游戏,我想知道是否有任何模式或良好的编程方法可以检查类之间的消息。
在我的问题中,我有两个类,一个是boardSquare类,另一个是GameBoard类(BoardSquareManager)。boardsquare的功能是,当您单击一个正方形时,布尔值将设置为true,这意味着boardsquare已被单击。目前在GameBoard类中,我有一个boardsquare数组,为了检查是否有一个棋盘格被点击,我在每个勾选中都会查看每个棋盘格,看看是否有人被点击,看起来是这样的。
void AGameBoard::CheckMessages()
{
for (int i = 0; i < 64; i++)
{
if (BoardSquareArray[i]->GetWasClicked())
{
iClickedTile = BoardSquareArray[i]->GetSquareNum();
BoardSquareArray[i]->DeactivateClick();
bTileWasClicked = true;
}
}
}
在我看来,我觉得没有必要一直查看整个阵列,这样我就可以在瓷砖是否被点击时获得信息,你知道有什么更好的方法吗?
我感谢所有的答案!
是否考虑过Observer模式?E.Gamma的经典设计模式书中包含了许多来自于实现GUI应用程序的模式。其他可能感兴趣的模式有Command(是否要撤消移动?)、Decorator、Chain of Command、Composite、Strategy、Template Method。我绝对建议你读这本书。
现在我已经开始制作一个有队列的静态类。我使用这个类从BoardSquare向游戏板发送消息。(制作一个静态类可能不是长期目标中的"最佳"解决方案,但由于这是一个原型,我认为它现在可能可行)
静态消息类代码:
/*
* 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;
Boardsquare的新代码:
messagePasser::SendMsgToBoard(iSquareNum);
游戏板的新代码:
if (!MessagePasser::IsEmpty())
{
if (IsTileOccupied)
{
//Do stuff...
}
else
//Do Other Stuff...
MessagePasser::SquareMsgRecieved();
}
制作一些std::vector或std::stack,并用点击的瓦片的坐标推送点击事件。您还可以制作一些onClick方法,该方法将指针作为AGameBoard,并向其发送有关单击的瓦片的消息。
在互联网上搜索一些关于事件处理的内容。
- 在C++中初始化向量映射的最有效方法
- 将此布尔值传递给此函数的最有效方法是什么?
- 比较C++变量的最有效方法
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 存储变量的更有效方法是什么?
- 确保套装新鲜度的有效方法
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 在C++事务之间存储大量字符数据的有效方法
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 检查两个向量是否并行的最有效方法
- 从浮点数中删除小数部分但保留类型的有效方法
- 传递非泛型函数的最有效方法是什么?
- 按升序打印矢量的所有元素直到它为空而没有重复项的最有效方法是什么?
- 创建字符串数组的有效方法
- 返回一个引用C++中另一个类对象的对象的有效方法
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 从std::map值中获取密钥的有效方法