-3
我非常需要一些指導。我需要編寫一個Connect 4的遊戲程序,其中將使用線程併發編程。我需要自己學習,並在一週內編寫這樣的程序。我不知道如何在這個時候實現併發部分,以及我應該尋找哪些資源...希望你能對此有所瞭解......C++遊戲,線程和併發編程
我非常需要一些指導。我需要編寫一個Connect 4的遊戲程序,其中將使用線程併發編程。我需要自己學習,並在一週內編寫這樣的程序。我不知道如何在這個時候實現併發部分,以及我應該尋找哪些資源...希望你能對此有所瞭解......C++遊戲,線程和併發編程
這個想法似乎是計算機播放器是一個由它自己構成的線程,主線程正在處理遊戲,即協調人類玩家和機器人玩家。
下面是一些(僞)代碼,可以幫助您入門。
std::mutex m;
std::queue<int> from_opponent;
std::queue<int> from_robot;
void robotplayer(bool& go_on)
{
bool wait_for_opponent = true;
while (go_on)
{
int opponents_move;
while (wait_for_opponent)
{
// Spend x milliseconds planning next move
// ...
// ...
m.lock();
if (!from_opponent.empty())
{
opponents_move = from_opponent.front();
from_opponent.pop();
wait_for_opponent = false;
}
m.unlock();
}
// ... calculate robots move
// ...
m.lock();
from_robot.push(row_number);
m.unlock();
wait_for_opponent = true;
}
}
int main()
{
bool go_on = true;
std::thread robot(robotplayer, go_on);
while(go_on)
{
// Wait for input from user (e.g. via cin)
// Send move to robot
m.lock();
from_opponent.push(row_number);
m.unlock();
// Update display
// Check for a winner (i.e. set go_on = false)
// Wait for input from robot
// Update display
// Check for a winner (i.e. set go_on = false)
}
robot.join();
}
非常感謝。你是我的英雄,你是唯一回答這個問題的人。 – MLAC
如果你在做連接4和你*需要*線程,我真的不知道你在做什麼。這樣的遊戲的計算要求應該基本上什麼都不是。查看事件循環模型。使用線程來處理這樣的事情是一個不好的先例,並且會導致你成倍增加複雜性而沒有真正的收益。 – tadman
我也不知道。這就是教授給我們的,我們被告知要靠自己學習。我甚至不知道要尋找哪些資源。 – MLAC
第一次使用像['std :: queue'](http://www.cplusplus.com/reference/queue/queue/)這樣的容器來推送需要注意的操作,並且有一個事件循環來處理這些。根據用戶交互或您的需求定義您自己的事件基類和子類。爲了更深入的介紹,[Game Engine Architecture](http://www.gameenginebook.com/)就是你想要的書。 – tadman