多线程网络回合制游戏

时间:2016-10-26 14:03:47

标签: java multithreading networking multiplayer

我正在用Java开发多人游戏,必须联网和回合制,并为连接到服务器的每个客户端(2到4之间)启动一个新线程。基本上,每个线程在轮到他之后必须调用throwthedice()函数,之后游戏板将以新位置更新。我坚持如何将这个线程与wait()和notify()同步(如果有超过2个线程,让我们说4,每个线程如何知道他必须只通知线程以下而不是其他人?)。另外,还有其他更简单的方法可以正确地同步线程,还是我真的需要同步线程呢?

2 个答案:

答案 0 :(得分:0)

如果你有一个回合制游戏,那么最简单的实现可能就是在一个线程中处理所有游戏逻辑。 客户端线程仅将接收到的操作放入线程安全队列中,该队列由主游戏线程读取。 (这是生产者/消费者模式的一个实例。)

如果您想将逻辑分发给线程,那么您将需要针对不同玩家的不同锁定对象(即Semaphore)。 如果玩家1转弯,则线程1将释放玩家2的锁定,从而通知线程2.

答案 1 :(得分:0)

对于基于回合的游戏,我不明白为什么你必须同步这些线程...如果你正在实现一个客户端 - 服务器应用程序来做这个基于回合的游戏(这是一个好主意)当服务器将信息发送给所有客户端时,如果客户端线程是同步的,那么它们并不重要,只是它们接收到更新。换句话说,没有理由为基于回合的游戏同步线程,因为没有"瞬时"行动进行(即玩家在同一时间像一个使命召唤游戏一起移动)。