好了,我刚写完我的乒乓球游戏,但现在我想要一个供玩家玩的人工智能。我尝试过这样做,当NPC球的位置超过球的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就出来了。我做错了什么?
发布于 2012-11-16 06:20:20
我还没有发现你的确切问题,而且只有一小段代码,我不能运行它并看到问题所在,但我确实有一些建议给你。
首先,无论你在哪里检查极限,你都要检查确切的条件。如果位置以某种方式被设置为奇数值,或者以某种方式超过了限制,您的限制代码将无法处理它。我建议不要这样做
if(LeftPlayerUp==true){
if(LeftLocation==50){}
else{
LeftLocation-=2;
}
}你应该使用
if (LeftPlayerUp) {
if (LeftLocation <= 50) {
LeftLocation = 50;
}
else {
LeftLocation-=2;
}
}这样,如果LeftLocation获得了一个疯狂的值,它将被简单地纠正。在您检查限制的任何地方使用此模式。
我的另一点建议是,你的计算机播放器算法非常简单。它没有考虑球的移动方向。如果球在右桨上方,但向下移动,也许右桨不应该移动。现在,你不希望电脑玩家一直玩得很完美,因为对于只会输的人来说,这并不有趣;但你应该从一个完美的电脑玩家开始。要做到这一点,最好的方法就是计算出球将在哪里越过右划桨的线。您的游戏知道球的当前位置,以及它将向右和向上/向下移动的速度,因此您的游戏可以预测球将移动的位置;您甚至可以模拟球的整个轨迹,包括反弹并精确计算球将移动的位置。然后让电脑玩家将球拍移向那个点。一旦你有了完美的计算机人工智能,然后添加随机错误,或者简化它(比如去掉处理反弹的代码;也许击败人工智能的方法总是将球从墙上反弹!)。
祝你好运,玩得开心。
https://stackoverflow.com/questions/13406133
复制相似问题