Java 2D回合制游戏编程:每个玩家可以处理2次鼠标点击

时间:2010-03-13 14:05:08

标签: java swing

假设我正在使用Java的Swing开发一个类似国际象棋的程序。我添加了一个MouseListener来处理用户输入。要进行移动,用户必须单击有效的部分,然后单击有效的位置。在转弯时跟踪2次鼠标点击的最佳方法是什么?我正在考虑使用某种变量来记录转弯的第一次点击或第二次点击。

2 个答案:

答案 0 :(得分:5)

你必须区分两种游戏状态,使用一个变量就可以了。你也可以按照NomeN评论的建议来思考,并通过交换它们来使用两个不同的听众。

你的情况很简单但总的来说,你用来处理这些事情的形式主义是一种有限状态机,它描述了游戏的状态以及如何从一个传递到另一个。< / p>

在这种情况下,您可以使用以下某些州:

  • 玩家1转
  • 玩家2转
  • 主屏幕
  • 暂停屏幕
  • 选项屏幕

并决定如何以及何时从州传递到另一个州,例如

  • 在player1移动后你转到了player2转
  • 在播放器2移动后返回播放器1转
  • 游戏开始时你进入主屏幕
  • 如果您开始新游戏,那么您将转到player1转
  • 如果你在游戏中按下暂停键,你会从转到暂停屏幕,当你关闭时你会回到暂停前的转弯

这只是为了给你一个想法,例如你的MouseListener可以关心状态:

enum State { TURN_P1, TURN_P2, MAIN, PAUSE, ... }
public State gameState
...

public void mouseClicked(MouseEvent e)
{
  if (gameState == TURN_P1)
  {
    ...

    if (move_is_legal and so on)
      gameState = TURN_P2;
  }
  else if (gameState == TURN_P2)
  {
    ...

    if (move_is_legal and so on)
      gameState = TURN_P1;
  }
}

答案 1 :(得分:2)

哎呀,我的回答太快了。是的,一个编码点击位置的结构,查找介入的运动事件,然后记录第二次点击。应该有一个启动状态,一个接受状态,它应该记录一个中止状态(可能是按ESC)。