Java 贪吃蛇游戏中的 ArrayIndexOutOfBoundException 错误

Java ArrayIndexOutOfBoundException error in snake game

我正在尝试制作贪吃蛇游戏。我快完成了。问题是有时候蛇吃敌人物体的时候会弹出这个错误--->

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 33

er.java:814)

这是敌人的定位单元--->

private int[] enemyYpos = {25,50,75,100,125,150,175,200,225,250,275,300,325,350,375,400,425,450,475,500,525,550,575,600,625,650,675,700,725,750,775,800,825,850};
private int[] enemyXpos = {100,125,150,175,200,225,250,275,300,325,350,375,400,425,450,475,500,525,550,575,600,625};

这是随机数--->

private int xpos = r.nextInt(34);
private int ypos = r.nextInt(20);

现在我使用这些来绘制敌人,方法是使用其中定义了敌人位置的 for 循环 -->

 enemy = new ImageIcon("E:\Netbeans\old files\Game\src\game\bug.png");
    if((enemyXpos[xpos] == snakeXlength[0] && enemyYpos[ypos] == snakeYlength[0])){
    lengthsnake++;
    xpos = r.nextInt(34);
    ypos = r.nextInt(20);
    }
    enemy.paintIcon(this, g, enemyXpos[xpos], enemyYpos[ypos]); //The Exception error shows that the mistake is in this line

我希望这些信息足够了。提前致谢! :)

您的问题是您混淆了 X 和 Y。应该是

xpos = r.nextInt(20);
ypos = r.nextInt(34);

而不是相反。

我认为您交换了 x 个元素的数量和 y 个元素的数量。最简单的修复。更改您的生成器以使用数组的长度而不是幻数。

private int xpos = r.nextInt(enemyXpos.length);
private int ypos = r.nextInt(enemyYpos.length);

xpos = r.nextInt(enemyXpos.length);
ypos = r.nextInt(enemyYpos.length);