我目前正在使用c ++进行类似国际象棋的游戏,并且想知道是否有任何模式或良好的编程方式来检查类之间的消息。
在我的问题中,我有两个类,一个boardSquare-和一个GameBoard类(BoardSquareManager)。 boardsquare具有的功能是,当您单击一个正方形时,布尔值将设置为true,这意味着已单击boardSquare。目前在GameBoard-class中我有一系列BoardSquares,为了检查是否已经点击了一个boardsquare,我会检查每个BoardSquare每个tick,看看是否有人点击过,看起来像这样。
void AGameBoard::CheckMessages()
{
for (int i = 0; i < 64; i++)
{
if (BoardSquareArray[i]->GetWasClicked())
{
iClickedTile = BoardSquareArray[i]->GetSquareNum();
BoardSquareArray[i]->DeactivateClick();
bTileWasClicked = true;
}
}
}
在我看来,没有必要一直查看整个阵列,所以如果点击了一块瓷砖我可以得到信息,你知道更好的方法吗?
我感谢所有答案!
答案 0 :(得分:2)
考虑过观察者模式?来自E. Gamma的经典设计模式书包含许多来自实现GUI应用程序的模式。其他可能有趣的模式是Command(想要撤消移动吗?),装饰器,命令链,复合,策略,模板方法。我肯定会建议您阅读这本书。
答案 1 :(得分:1)
现在我已经开始创建一个有队列的静态类。我使用这个类从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;
Boardsquare的新代码:
messagePasser::SendMsgToBoard(iSquareNum);
游戏板新代码:
if (!MessagePasser::IsEmpty())
{
if (IsTileOccupied)
{
//Do stuff...
}
else
//Do Other Stuff...
MessagePasser::SquareMsgRecieved();
}
答案 2 :(得分:0)
制作一些std :: vector或std :: stack,然后点击点击了tile的坐标点击事件。你也可以制作一些onClick方法,它使指针执行AGameBoard并向其发送有关点击图块的消息。
在互联网上搜索有关事件处理的内容。