我试图用Java制作战舰游戏,并使用套接字编程。
我可以聊天,并且消息即将发送到JTextArea。但是问题是我需要拍摄,当用户拍摄后,用户将无法再次拍摄。用户必须等待其他用户进行拍摄。
我现在拥有的代码每个用户只能拍摄一张,我需要将yourTurn = true放置在哪里?
这是我在客户端代码上得到的:
public void run()
{
try
{
try
{
out = new PrintWriter(socket.getOutputStream(), true);
in = new Scanner(socket.getInputStream());
out.flush();
checkStream();
}
finally
{
socket.close();
}
}
catch (Exception e)
{
System.out.println(socket);
}
}
private void checkStream()
{
while(true)
{
recieve();
}
}
private void recieve()
{
if (in.hasNext())
{
String message = in.nextLine();
if (message.contains("S> "))
{
System.out.println("shoot " + message);
if (yourTurn)
{
yourTurn = false;
}
else
{
JOptionPane.showMessageDialog(null, "Det er ikke din tur endnu");
}
}
else
{
//Is a chat message
Gui.consoleTextArea.append(message + "\n");
}
}
}
public void Send(String msg)
{
out.println(Gui.name + " : " + msg);
out.flush();
Gui.textFieldSend.setText("");
}
有人可以提示我该怎么做吗?
最佳答案
您正在将turn变量向后设置。
收到消息时,您需要将此值设置为true
,因为现在轮到您了。发送消息时,您需要将此值设置为false
,因为该值不再可用。
在代码中,当您收到投篮机会时,您要检查是否轮到他们了,而不是轮到他们了。那是倒退。在这里,您要检查是否轮到他们并轮到他们了。然后,您想在发送镜头的位置添加一些代码,以仅在轮到您时才允许执行此操作,这样一来就不再是您了。