Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的蛇游戏有点小错误_Java - Fatal编程技术网

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

当我在黄点()中“点击”时,我有时会看到这个错误(有时出现,有时不出现),但我不知道为什么。。 我知道也许它看起来很混乱,但这是我第一次用java制作游戏

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