[英]Most efficient way to check for messages in array
我目前正在使用c ++進行類似於國際象棋的游戲,並且想知道是否存在任何模式或良好的編程方式來檢查類之間的消息。
在我的問題中,我有兩個類,一個boardSquare類和一個GameBoard類(BoardSquareManager)。 boardsquare具有的功能是,當您單擊一個正方形時,布爾值將設置為true,表示已單擊boardSquare。 目前在GameBoard類中,我有一系列的BoardSquares,為了檢查是否單擊了一個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;
}
}
}
我認為,不必一直瀏覽整個數組,這樣就可以獲取是否單擊了圖塊的信息,您知道這樣做的更好方法嗎?
我感謝所有答案!
考慮過觀察者模式嗎? E. Gamma的經典《 Design Patterns》一書包含許多來自實現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;
Boardsquare的新代碼:
messagePasser::SendMsgToBoard(iSquareNum);
游戲板新代碼:
if (!MessagePasser::IsEmpty())
{
if (IsTileOccupied)
{
//Do stuff...
}
else
//Do Other Stuff...
MessagePasser::SquareMsgRecieved();
}
進行一些std :: vector或std :: stack並將點擊事件與被單擊的圖塊坐標一起推送到此處。 您還可以創建一些onClick方法,該方法將指針用作AGameBoard並向其發送有關單擊的圖塊的消息。
在互聯網上搜索有關事件處理的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.