我正在用 java 设计一个简单的国际象棋游戏,并想向其中添加网络(客户端和服务器模型)
。一个玩家在服务器端,另一个在客户端。现在我有一个 server.java client.java 和 game.java。
game.java 包含在服务器端和客户端(每个玩家都有一个游戏实例)。我的问题是我不知道何时在两侧之间发送数据。我将侦听器添加到游戏类,但服务器客户端似乎无法在游戏类中获取点击事件。一种方法是我使用忙等待来不断检查是否有更新。但是有没有办法在不使用忙等待的情况下检查更新?
我正在用 java 设计一个简单的国际象棋游戏,并想向其中添加网络(客户端和服务器模型)
。一个玩家在服务器端,另一个在客户端。现在我有一个 server.java client.java 和 game.java。
game.java 包含在服务器端和客户端(每个玩家都有一个游戏实例)。我的问题是我不知道何时在两侧之间发送数据。我将侦听器添加到游戏类,但服务器客户端似乎无法在游戏类中获取点击事件。一种方法是我使用忙等待来不断检查是否有更新。但是有没有办法在不使用忙等待的情况下检查更新?
设计这个游戏的标准方法是让你的客户端类的两个实例(每个玩家一个)与协调游戏的中央服务器通信。每个客户端在内存中都有自己的棋盘表示,但由服务器确保移动从一个客户端中继到另一个客户端,所选移动有效,保持得分,确定游戏何时结束等。基本上,服务器是控制器/协调器/裁判。
基本上,您需要设置某种“令牌”来指示哪个玩家可以移动。拥有令牌的玩家是唯一可以进行有效移动并将该数据连同令牌一起发送回其他玩家的玩家。然后第一个玩家将被置于“等待”状态......
没有令牌的玩家将等待其他玩家的响应。这可以通过简单地从套接字的输入流中读取来轻松建立。
当主动玩家移动时,该移动(以及令牌)被发送给等待玩家。活动播放器然后进入等待状态,读取那里的套接字的输入流。刚刚激活的玩家将收到更新通知,并被允许采取行动。它周围...
我会从您的“网络引擎”获得一个回调机制,该机制会通知“游戏引擎”网络事件,例如“收到移动”、“网络故障”等。
我将在“网络引擎”中有一个简单的方法,允许我将移动数据发送回其他玩家。如果编码正确,“网络引擎”可以阻止来自“游戏引擎”的请求,直到玩家轮流移动。同样,您也可以通过检查来确定玩家的当前状态。
只是一些随机的想法:P
这篇文章有关于如何编写服务器和客户端并接受多个请求的示例代码。