我已经学习了4个月的Java,并决定用javaFX制作一个简单的德州扑克游戏。客户端连接到服务器,服务器为每个客户端创建一个新线程(最多10个客户端)。
我的问题是同时处理多条消息。如果您查看下面的代码,您将理解:(这是客户端)
while (true){
messageIn = in.readUTF();
if (messageIn.equals("seat")){
String name = in.readUTF();
String seat = in.readUTF();
gameScreenController.addPlayerToSeat(name, seat);
}
else if (messageIn.equals("hand")){
String seat = in.readUTF();
int handCard1 = in.readInt();
int handCard2 = in.readInt();
gameScreenController.handCardToSeat(handCard1, handCard2, seat);
}
else if (messageIn.equals("flopp")){
int floppCard1 = in.readInt();
int floppCard2 = in.readInt();
int floppCard3 = in.readInt();
gameScreenController.flopp(floppCard1, floppCard2, floppCard3);
}
else if (messageIn.equals("turn")){
int turnCard = in.readInt();
gameScreenController.turn(turnCard);
}
else if (messageIn.equals("river")){
int riverCard = in.readInt();
gameScreenController.turn(riverCard);
}
}
正如您所看到的,如果您在收到软盘卡的同一时刻收到玩家名和玩家,则消息可能会发生冲突。
我的问题是如何避免这种情况?我需要什么或者我可以搜索什么来解决这个问题。 我会感激所有的提示或答案! :)
答案 0 :(得分:0)
在服务器上,播放器表示为线程,读取和写入由accept获得的数据套接字。 “表格”(或客户控制sw)负责将游戏事件引导到个人或所有玩家,传递要发送到相关线程的消息。
有些事件应该被阻止,直到当前的交易(或回合)到达终点,例如,坐在桌旁的新玩家。这可以通过设置每个玩家/线程的队列来实现,只要游戏达到轮回状态就可以读取。
在交易期间,状态机可以控制玩家可以接受的内容 - 尽管玩家应该根据协议进行编程:例如,当被问及做什么时,必须以游戏允许的任何动作做出回应。