-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