gpt4 book ai didi

java - 在 Java LWJGL/OpenGL 中发布移动 AI 乒乓 Racket

转载 作者:行者123 更新时间:2023-11-29 07:07:53 26 4
gpt4 key购买 nike

所以我的 AI 乒乓 Racket 有问题。现在,人工智能非常简单和愚蠢。它所做的只是以连续的速度上下移动。我没有完善这个项目的愿望,因为它真的只是向我介绍 LWJGL,所以我永远不会为这个系统创建一个直观的 AI。但是,我对桨的 AI 有疑问。游戏开始时, Racket 从中间开始,笔直向上,直到碰到天花板。它撞到天花板然后停止而不是下降,直到它可以重复运动。我想知道为什么桨只是停止而不是继续并按照它的本意是桨。

启动类:(该类用于启动显示和渲染,包括桨。)

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();
}
}

CPU播放器类:

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;
}
}

}

我的问题很简单,桨拒绝切换方向,而是粘在显示屏的顶部。为什么会发生这种情况,我该如何解决?如果您有任何其他问题或需要任何其他具体细节,请随时告诉我。

最佳答案

问题在于,当它到达顶部时,您只是告诉它向下移动一次。在那之后,它仍然试图向上移动而不是不止一次向下移动。要解决此问题,您需要有一个“方向”变量来告诉它应该向上还是向下移动,并在到达顶部/底部时更改变量。

例如:

public class CPUPlayer {

public int startX = 550; // starting positions (x, y), always locked
public int startY = 150;

private int moveSpeed = 2;
private boolean movingUp = true;
public int score = 0; // init

public void move() {
if(movingUp) {
startY -= moveSpeed;
if (startY <= -10)
movingUp = false; // switch directions
} else { // Should be moving down
startY += moveSpeed;
if (startY >= 338)
movingUp = true; // switch directions
}
}

}

关于java - 在 Java LWJGL/OpenGL 中发布移动 AI 乒乓 Racket ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com