我正在努力解决一个基本概念,但你能看看我的问题吗?
我的代码在哪里: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棒添加一些机会。有时速度很快,有时速度较慢。
提前致谢,
答案 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
,因为它应该只输入一个:)