好吧,我刚刚完成了我的乒乓球比赛,但现在我想要一个AI让玩家对战。 我试过这样做,以便当NPC padel的位置超过球的Y值时,它移动到右侧区域试图阻挡球。 这是我的padel类的代码:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Padel implements KeyListener{
private Ball ball = new Ball();
private boolean LeftPlayerUp=false;
private boolean LeftPlayerDown=false;
private boolean RightPlayerUp=false;
private boolean RightPlayerDown=false;
public int RightLocation=200;
public int LeftLocation=200;
public void keyPressed(KeyEvent e){
int KeyPressed = e.getKeyCode();
if (KeyPressed== KeyEvent.VK_W){
LeftPlayerUp=true;
}
else if (KeyPressed==KeyEvent.VK_S){
LeftPlayerDown=true;
}
}
public void keyReleased(KeyEvent e){
int KeyReleased = e.getKeyCode();
if (KeyReleased== KeyEvent.VK_W){
LeftPlayerUp=false;
}
else if (KeyReleased==KeyEvent.VK_S){
LeftPlayerDown=false;
}
}
public void ShouldLeftMove(){
if(LeftPlayerUp==true){
if(LeftLocation==50){}
else{
LeftLocation-=2;
}
}
else if(LeftPlayerDown==true){
if(LeftLocation==Main.Height-190){}
else{
LeftLocation+=2;
}
}
}
public void ShouldRightMove(){
if(ball.BallLocationY>=RightLocation){
RightPlayerUp=false;
RightPlayerDown=true;
}else{
RightPlayerUp=true;
RightPlayerDown=false;
}
if(RightPlayerUp==true){
if(RightLocation==50){}
else{
RightLocation-=2;
}
}
else if(RightPlayerDown==true){
if(RightLocation==Main.Height-190){}
else{
RightLocation+=2;
}
}
}
//This just needs to be here :P
public void keyTyped(KeyEvent e) {}
}
使用这段代码,padel在右侧屏幕下方大约2 / 3rds,然后停止移动并且spaz's out。 我做错了什么???
答案 0 :(得分:0)
我没有发现你的确切问题,只有一小段代码我无法运行并看到问题,但我确实为你提供了一些建议。
首先,在您检查限制的任何地方,您都要检查确切的条件。如果位置以某种方式设置为奇数值,或者以某种方式跳过限制,则限制代码将无法处理它。我建议不要
if(LeftPlayerUp==true){
if(LeftLocation==50){}
else{
LeftLocation-=2;
}
}
你应该使用
if (LeftPlayerUp) {
if (LeftLocation <= 50) {
LeftLocation = 50;
}
else {
LeftLocation-=2;
}
}
这样一来,如果LeftLocation获得了一个被破坏的疯狂值,它就会被纠正。在检查限制的任何地方使用此模式。
我的另一点建议是你的计算机播放器算法非常简单。它没有考虑球的移动方向。如果球在右侧球拍上方,但向下移动,可能右侧球拍不应移动......现在,您不希望计算机玩家一直玩得很完美,因为这对于只能输的人;但你应该从一个完美的电脑播放器开始。最好的方法是计算球将穿过右桨的线的位置。你的游戏知道球的当前位置,以及它向上和向下的速度,所以你的游戏可以预测球的去向;你甚至可以模拟球的整个轨迹,包括反弹并准确计算球的位置。然后让电脑播放器将拨片移向那个位置。一旦你有完美的计算机AI工作,然后添加随机错误,或简化它(如取出处理弹跳的代码;也许击败AI的方法总是将球从墙上反弹!)。
祝你好运,玩得开心。