Java / LWJGL Pong AI问题

时间:2013-10-28 19:26:11

标签: java if-statement artificial-intelligence lwjgl

我正在努力解决一个基本概念,但你能看看我的问题吗?

我的代码在哪里:ai移动玩家蝙蝠,HEIGHT =显示器的总高度,batHeight是乒乓球拍/蝙蝠​​的大小:

public void ai(int bally, int HEIGHT, int batHeight) {
    if (bally < this.y + ySize / 2) {
        if (this.y <= 0) {
            System.out.println("Upper Bound");
           y = 0;
        } else {
            y -= 2;
        }
    }
    if (bally > this.y + ySize / 2) {
        if (this.y >= HEIGHT - batHeight) {
            System.out.println("Lower Bounds");
            y = HEIGHT - batHeight;
        } else {
            y += 2;
        }
    }
}

上述内容完全符合我的要求。 Pong Bat向上移动,当它击中屏幕顶部时,它会打印控制台线,并停止Bat。屏幕底部恰好相同。它打印控制台,并停止蝙蝠。它每次都没有问题。

现在,如果我稍微修改一下代码:

public void ai(int bally, int HEIGHT, int batHeight) {
    if (bally < this.y + ySize / 2) {
        if (this.y <= 0) {
            System.out.println("Upper Bound");
            y = 0;
        } else {
            if(rand.nextInt(2)+1 == 1){
                y -= 2;
            }else{
                y -=3;
            }
        }
    }
    if (bally > this.y + ySize / 2) {
        if (this.y >= HEIGHT - batHeight) {
            System.out.println("Lower Bounds");
            y = HEIGHT - batHeight;
        } else {
            y += 2;
        }
    }
}

它迭代一次,停在顶部,然后它自己失去了,忘记了界限,蝙蝠离开了屏幕。我有控制台打印Bat y位置,它没有问题跟踪,准确显示其y-co-ord,但在第一次迭代后,它变为负y并且大于屏幕高度。

我确实有一个理论,你不能在IF语句中嵌入一个IF,所以我尝试移动它以便它读取:

if(this.y != 0){
    if(rand.nextInt(2) + 1 == 1){ 
        //move the paddle at speed 1
    } else {
        //move paddle at speed 2
    }
}else{
    //do not move the paddle
}

但这没有任何区别。

代码背后的想法是为AI棒添加一些机会。有时速度很快,有时速度较慢。

提前致谢,

1 个答案:

答案 0 :(得分:0)

您远程的代码如下所示:

for a given time:
if the ball is below the paddle {
    if the paddle is below the screen, put it back
    else move it down 2 or 3 units
}
if the ball is above the paddle {
    if the paddle is above the screen, put it back
    else move it up 2 units
}

想象一下球在​​y = 1并且球拍处于y = 2的情况。第一if声明将被触发(1 <2),球拍不在外面(2&gt; 0),所以它向下移动2或3个单位。让我们说3,为了论证的缘故。现在,paddle在y = -1,球仍在y = 1.现在,第二个大if的条件为真!所以我们输入它:桨不在上面,我们将它向上移动两个单位。现在,桨位于y = 1 ......

很明显它不应该进入第二个循环。所以,在它前面粘贴一个else,因为它应该只输入一个:)