我试图用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,因为该值不再可用。

在代码中,当您收到投篮机会时,您要检查是否轮到他们了,而不是轮到他们了。那是倒退。在这里,您要检查是否轮到他们并轮到他们了。然后,您想在发送镜头的位置添加一些代码,以仅在轮到您时才允许执行此操作,这样一来就不再是您了。

07-26 04:38