Java 我的蛇游戏有点小错误
当我在黄点()中“点击”时,我有时会看到这个错误(有时出现,有时不出现),但我不知道为什么。。 我知道也许它看起来很混乱,但这是我第一次用java制作游戏Java 我的蛇游戏有点小错误,java,Java,当我在黄点()中“点击”时,我有时会看到这个错误(有时出现,有时不出现),但我不知道为什么。。 我知道也许它看起来很混乱,但这是我第一次用java制作游戏 Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 22 at Gameplay.paint(Gameplay.java:140) at javax.swing.JComponent.paintToOffscreen(JCompone
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 22
at Gameplay.paint(Gameplay.java:140)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
以下是我的绘画方法:
if (enemyXPos[xPos] == snakeXLenght[0] && enemyYPos[yPos] == snakeYLenght[0]) {
score++;
lenghtOfSnake++;
xPos = random.nextInt(34);
yPos = random.nextInt(23);
}
//line140:
enemyImage.paintIcon(this, graphics, enemyXPos[xPos], enemyYPos[yPos]);
for (int b = 1; b < lenghtOfSnake; b++) {
if (snakeXLenght[b] == snakeXLenght[0] && snakeYLenght[b] == snakeYLenght[0]) {
right = false;
left = false;
up = false;
down = false;
graphics.setColor(Color.white);
graphics.setFont(new Font("arial", Font.BOLD, 50));
graphics.drawString("YOU LOSE", 300, 300);
graphics.setFont(new Font("arial", Font.BOLD, 20));
graphics.drawString("Space to RESTART", 350, 340);
}
}
graphics.dispose();
}
如果我没有显示足够的代码,只需说,然后我粘贴更多。在
Gameplay.java
中,在线140
(在您的paint()
方法中),您正试图从数组中获取一些内容。该数组比您给它的索引小(您试图在索引22
处获取项,但该数组可能有21
或更少的项)
确保
enemyXPos
和enemyYPos
分别等于或大于xPos
和yPos
。此代码不足以给出具体答案,但看起来您的enemyXPos
或enemyYPos
大小不够。哪一行是140?你的问题是xPos、yPos或b的值。“enemyImage.paintIcon(这是,图形,enemyXPos[xPos],enemyYPos[yPos]);”这是一条线,仔细检查敌方阵列的定位。我的猜测是xPos=random.nextInt(34);yPos=随机。nextInt(23)代码>其中一个大于数组的大小。如果我不得不猜测的话,我会说这是一个简单的错误。我同意@RJ7,检查您的数组。您是否尝试了解异常的含义以及它如何帮助您解决问题?private int[]enemyXPos={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[]enemyYPos={75100125150175200225250275300325350375 4004254504755052557560625};这应该是一个评论,供将来参考。这不是一个格式正确的答案。private int[]enemyXPos={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[]enemyYPos={75100125150175200225250275300325350375 4004254504755052557560625}@Pablito请回答你的问题,而不是在那篇难以辨认的文章的评论中发布你的更新,但你是对的,我的数组“EnemyPos”有22个元素,我想使用23个元素…:但是我仍然不知道为什么有时候我会犯这个错误,而不是在我启动应用程序的时候,我很高兴我能帮上忙。祝你好运,帕布里托@Pablito,您只有在某些情况下才会收到此消息,因为错误取决于random.nextInt
调用返回的值。
private int[] enemyXPos = {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[] enemyYPos = {75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375, 400, 425, 450, 475, 500, 525, 575, 600, 625};