如何让actionPerformed正确循环?

时间:2013-04-29 19:52:34

标签: java awt actionlistener

所以我为我的课程编写了一个可怜的'Snake'克隆。我们(模糊地)指示我们应该如何构建程序,在测试我的代码后,我认为actionPerformed将无法正常工作。

这里有一些似乎没有正常工作的测试代码,我会尝试解释什么不起作用。

public static void main(String[] args) {

    Game Snake = new Game(20, 20);
    Canvas p = new Canvas(Snake, 20);
    Snake.setUpdatable(p);
    Snake.setFruit(new Fruit(10, 15));

    System.out.println(Snake.getSnake().getPieces());
    Snake.actionPerformed(null);
    System.out.println(Snake.getSnake().getPieces());
    Snake.actionPerformed(null);
    System.out.println(Snake.getSnake().getPieces());

   }

上面的代码应该用20x20画布创建一个新的蛇游戏,它由actionPerformed方法更新。

在蛇中,蛇从一个区块开始并长到三个,之后只有在蛇消耗水果后它才会生长。

这是actionPerformed方法

public void actionPerformed(ActionEvent ae) {

    if (!continue) {

        return;
    } else {

        this.Snake.move();

         if (this.Snake.collides(this.fruit) == true) {

                Snake.grow();
                this.setFruit(new Fruit(new Random().nextInt(width), new Random().nextInt(height)));
            }




            if (this.Snake.collidesWithItself() == true) {
                continue = false;
            }


            this.setDelay(500); //Timer
            this.updatable.update();//updates ui

    }

}

actionListener在Game类的构造函数的末尾添加为:

   addActionListener(this);

我为启动实际事件的Game类声明了我的变量。现在它完美地工作,直到我尝试从主方法再次回忆动作:

    System.out.println(Snake.getSnake().getPieces());
    Snake.actionPerformed(null);
    System.out.println(Snake.getSnake().getPieces());
    Snake.actionPerformed(null);
    System.out.println(Snake.getSnake().getPieces());
    Snake.actionPerformed(null);
    System.out.println(Snake.getSnake().getPieces());

它打印:(蛇的每个槽的X,Y坐标 - 蛇默认向南行进)

    [(10,10)] //CORRECT - before call
    [(10,10), (10,11)] //CORRECT - the Snake.actionPerformed(null) call
    [(10,10), (10,11)] //NOPE
    [(10,10), (10,11)] //NOPE

而不是:

    [(10,10)] 
    [(10,10), (10,11)]
    [(10,10), (10,11), (10,12)]
    [(10,11), (10,12), (10,13)]

为什么每当我尝试循环actionPerformed时它甚至不会改变蛇的碎片的坐标?我很抱歉,如果我的问题很荒谬,我是一个新手,我已经尝试了很多东西,但我无法理解这一点。

0 个答案:

没有答案