所以我的 AI 乒乓球拍有问题。现在,人工智能非常简单和愚蠢。它所做的只是以连续的速度上下移动。我并不想完善这个项目,因为它真的只是为了向我介绍 LWJGL,所以我永远不会为这个系统创建一个直观的 AI。但是,我遇到了桨的 AI 问题。比赛开始时,桨从中间开始,一直向上,直到碰到天花板。它撞到天花板然后停止而不是下降,直到它可以重复运动。我想知道为什么桨只是停止而不是继续并跟随它的意思是桨。
启动类:(此类用于启动显示和渲染,包括桨。)
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import com.evanklein.pong.entitity.CPUPlayer;
import com.evanklein.pong.entitity.Player;
import com.evanklein.pong.entitity.Ball;
public class Startup {
// set up display
public void start() {
try {
Display.setDisplayMode(new DisplayMode(600, 400));
Display.setTitle("Pong");
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
System.exit(0);
}
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 600, 400, 0, 1, -1);
while (!Display.isCloseRequested()) {
// render OpenGL here
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
// render player
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2d(player.startX, player.startY);
GL11.glVertex2d(player.startX + 20, player.startY);
GL11.glVertex2d(player.startX + 20, player.startY + 70);
GL11.glVertex2d(player.startX, player.startY + 70);
GL11.glEnd();
// player controls
if (Keyboard.isKeyDown(Keyboard.KEY_UP)) {
player.moveUp();
}
if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
player.moveDown();
}
// render AI
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2d(ai.startX, ai.startY);
GL11.glVertex2d(ai.startX + 20, ai.startY);
GL11.glVertex2d(ai.startX + 20, ai.startY + 70);
GL11.glVertex2d(ai.startX, ai.startY + 70);
GL11.glEnd();
// set ai
ai.move();
// render Ball
GL11.glBegin(GL11.GL_LINE_LOOP);
GL11.glEnd();
Display.update();
Display.sync(60);
}
Display.destroy();
}
// Let's start this beyotch up!
Player player = new Player();
CPUPlayer ai = new CPUPlayer();
Ball ball = new Ball();
public static void main(String[] args) {
new Startup().start();
}
}
CPUPlayer 类:
public class CPUPlayer {
public int startX = 550; // starting positions (x, y), always locked
public int startY = 150;
private int moveSpeed = 2;
public int score = 0; // init
public void move() {
startY -= moveSpeed;
if (startY <= -10) {
startY += moveSpeed; // switch directions
} else if (startY >= 338) {
startY -= moveSpeed;
}
}
}
我的问题只是桨拒绝切换方向,而是粘在显示屏的顶部。为什么会发生这种情况,我能做些什么来解决它?如果您有任何其他问题或需要任何其他具体细节,请随时告诉我。