2015-11-02 61 views
-3

我非常需要一些指导。我需要编写一个Connect 4的游戏程序,其中将使用线程并发编程。我需要自己学习,并在一周内编写这样的程序。我不知道如何在这个时候实现并发部分,以及我应该寻找哪些资源...希望你能对此有所了解......C++游戏,线程和并发编程

+1

如果你在做连接4和你*需要*线程,我真的不知道你在做什么。这样的游戏的计算要求应该基本上什么都不是。查看事件循环模型。使用线程来处理这样的事情是一个不好的先例,并且会导致你成倍增加复杂性而没有真正的收益。 – tadman

+0

我也不知道。这就是教授给我们的,我们被告知要靠自己学习。我甚至不知道要寻找哪些资源。 – MLAC

+0

第一次使用像['std :: queue'](http://www.cplusplus.com/reference/queue/queue/)这样的容器来推送需要注意的操作,并且有一个事件循环来处理这些。根据用户交互或您的需求定义您自己的事件基类和子类。为了更深入的介绍,[Game Engine Architecture](http://www.gameenginebook.com/)就是你想要的书。 – tadman

回答

1

这个想法似乎是计算机播放器是一个由它自己构成的线程,主线程正在处理游戏,即协调人类玩家和机器人玩家。

下面是一些(伪)代码,可以帮助您入门。

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(); 
} 
+0

非常感谢。你是我的英雄,你是唯一回答这个问题的人。 – MLAC