JAVA:I';我正在尝试用swing制作基于2D阵列和图形的Connect4游戏
后端程序与扫描仪输入一起工作,只是打印出矩阵,但我在图形方面有这个问题。当我只制作带有椭圆的矩形时效果很好,但是当我在故事中引入2D数组,以便在我放置的地方填充其他颜色时,会抛出“线程中的异常”AWT-EventQueue-0“java.lang.ArrayIndexOutOfBoundsException:6”。我试着把它放在不同的地方,并在其他序列中调用它,但它总是抛出这个异常 编辑:这只是一个原型代码,需要做更多的工作,但我需要继续处理这个错误 完整堆栈跟踪:JAVA:I';我正在尝试用swing制作基于2D阵列和图形的Connect4游戏,java,swing,multidimensional-array,graphics,indexoutofboundsexception,Java,Swing,Multidimensional Array,Graphics,Indexoutofboundsexception,后端程序与扫描仪输入一起工作,只是打印出矩阵,但我在图形方面有这个问题。当我只制作带有椭圆的矩形时效果很好,但是当我在故事中引入2D数组,以便在我放置的地方填充其他颜色时,会抛出“线程中的异常”AWT-EventQueue-0“java.lang.ArrayIndexOutOfBoundsException:6”。我试着把它放在不同的地方,并在其他序列中调用它,但它总是抛出这个异常 编辑:这只是一个原型代码,需要做更多的工作,但我需要继续处理这个错误 完整堆栈跟踪: Exception in t
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6
at GameLoop$DrawBoard.paintComponent(GameLoop.java:69)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5217)
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.paint(JComponent.java:1042)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:79)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:116)
at java.awt.Container.paint(Container.java:1975)
at java.awt.Window.paint(Window.java:3904)
at javax.swing.RepaintManager$4.run(RepaintManager.java:842)
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)
/**
* Author : Matija & Zvonimir
* Version : 1.0
* Purpose : Connect 4 game work. Creating working game with arrays
*
*
*/
import java.util.Arrays;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.JComponent;
import java.awt.Graphics2D;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
public class GameLoop extends JFrame{
// attributes
private int [][] matrix;
int col;
int row;
private boolean gameOver = false;
private int playerTurn = 0;
Scanner scan = new Scanner(System.in);
//constants
private static final int COL = 7;
private static final int ROWS = 6;
public static final int SQUARE_SIZE = 100;
public static final int WIDTH = COL * SQUARE_SIZE;
public static final int HEIGHT = (ROWS+1) * SQUARE_SIZE;
public static final int CIRCLE_WIDTH_HEIGHT = (SQUARE_SIZE) - 15;
//MAIN METHOD
public static void main(String []args){
GameLoop gl = new GameLoop();
//gl.gameOver();
}//main
/*GRAPHICS*/
private class DrawBoard extends JPanel{
int[][] board = new int[ROWS][COL];
public DrawBoard(){
for(int i = 0; i < ROWS; i++){
for(int j = 0; j < COL; j++){
board[i][j] = 0;
}
}//set to 0;
}
public void paintComponent(Graphics g){
super.paintComponents(g); //override
for(int i = 0; i < COL; i++){
for(int j = 0; j < ROWS; j++){
g.setColor(Color.BLUE);
g.fillRect( (i*SQUARE_SIZE),(j * SQUARE_SIZE+SQUARE_SIZE),SQUARE_SIZE,SQUARE_SIZE);
if(board[i][j] == 0){
g.setColor(Color.BLACK);
g.fillOval( (i*SQUARE_SIZE),(j*SQUARE_SIZE +SQUARE_SIZE),CIRCLE_WIDTH_HEIGHT,CIRCLE_WIDTH_HEIGHT);
}else if(board[i][j] == 1){
g.setColor(Color.RED);
g.fillRect( (i*SQUARE_SIZE),(j * SQUARE_SIZE+SQUARE_SIZE),SQUARE_SIZE,SQUARE_SIZE);
}else if(board[i][j] == 2){
g.setColor(Color.YELLOW);
g.fillOval( (i*SQUARE_SIZE),(j*SQUARE_SIZE +SQUARE_SIZE),CIRCLE_WIDTH_HEIGHT,CIRCLE_WIDTH_HEIGHT);
}
}
}
for(int i = 0; i < COL; i++){
for(int j = 0; j < ROWS; j++){
}//for J
} //for I
}//paint component method
}//CLASS
public GameLoop(){
DrawBoard board = new DrawBoard();
add(board);
setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
setPreferredSize( new Dimension(701,732));
//setResizable(false);
setLocation( 400,200 );
setVisible ( true );
pack();
}
/*
* Method that creates a 2d array (matrix) filled with 0s
* @param matrix 2d array
*/
public int[][] createBoard(){
matrix = new int[ROWS][COL];
for(int i = 0; i < ROWS; i++){
for(int j = 0; j < COL; j++){
matrix[i][j] = 0;
}
}//set to 0
return matrix;
}//create board
}//class game loop
线程“AWT-EventQueue-0”java.lang.ArrayIndexOutofBounds异常:6
位于GameLoop$DrawBoard.paintComponent(GameLoop.java:69)
位于javax.swing.JComponent.paint(JComponent.java:1056)
位于javax.swing.JComponent.paintChildren(JComponent.java:889)
位于javax.swing.JComponent.paint(JComponent.java:1065)
位于javax.swing.JComponent.paintChildren(JComponent.java:889)
位于javax.swing.JComponent.paint(JComponent.java:1065)
位于javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
位于javax.swing.JComponent.paintChildren(JComponent.java:889)
位于javax.swing.JComponent.paintooffscreen(JComponent.java:5217)
在javax.swing.repaitmanager$PaintManager.paintDoubleBuffered处(repaitmanager.java:1579)
在javax.swing.repaitmanager$PaintManager.paint(repaitmanager.java:1502)
在javax.swing.repaitmanager.paint(repaitmanager.java:1272)
位于javax.swing.JComponent.paint(JComponent.java:1042)
位于java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
位于sun.awt.sungraphicscalback.runOneComponent(sungraphicscalback.java:79)
位于sun.awt.sungraphicscalback.runComponents(sungraphicscalback.java:116)
位于java.awt.Container.paint(Container.java:1975)
位于java.awt.Window.paint(Window.java:3904)
在javax.swing.repaitmanager$4.run(repaitmanager.java:842)
在javax.swing.repaitmanager$4.run(repaitmanager.java:814)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:814)
位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:789)
位于javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
在javax.swing.repaitmanager.access$1200(repaitmanager.java:64)
在javax.swing.repaitmanager$ProcessingRunnable.run(repaitmanager.java:1732)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)中
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
在java.awt.EventQueue.access$500(EventQueue.java:97)
在java.awt.EventQueue$3.run(EventQueue.java:709)
在java.awt.EventQueue$3.run(EventQueue.java:703)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)中
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:105)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
/**
*作者:Matija&Zvonimir
*版本:1.0
*目的:连接4个游戏工作。使用数组创建工作游戏
*
*
*/
导入java.util.array;
导入java.util.*;
导入java.awt.*;
导入javax.swing.*;
导入javax.swing.JComponent;
导入java.awt.Graphics2D;
导入java.awt.event.MouseListener;
导入java.awt.event.MouseEvent;
公共类GameLoop扩展了JFrame{
//属性
私有int[][]矩阵;
int col;
int行;
私有布尔gameOver=false;
私有int playerTurn=0;
扫描仪扫描=新扫描仪(System.in);
//常数
专用静态最终整数列=7;
私有静态最终整数行=6;
公共静态最终整数平方_尺寸=100;
公共静态最终整数宽度=列*正方形大小;
公共静态最终整数高度=(行数+1)*正方形大小;
公共静态最终整数圆\宽度\高度=(正方形\大小)-15;
//主要方法
公共静态void main(字符串[]args){
GameLoop gl=新GameLoop();
//gl.gameOver();
}//主要
/*图形*/
私有类绘图板扩展JPanel{
int[][]板=新的int[行][COL];
公共绞车(){
对于(int i=0;i for(int i = 0; i < COL; i++){
for(int j = 0; j < ROWS; j++){
g.setColor(Color.BLUE);
g.fillRect( (i*SQUARE_SIZE),(j * SQUARE_SIZE+SQUARE_SIZE),SQUARE_SIZE,SQUARE_SIZE);
if(board[i][j] == 0){
g.setColor(Color.BLACK);
g.fillOval( (i*SQUARE_SIZE),(j*SQUARE_SIZE +SQUARE_SIZE),CIRCLE_WIDTH_HEIGHT,CIRCLE_WIDTH_HEIGHT);
}else if(board[i][j] == 1){
g.setColor(Color.RED);
g.fillRect( (i*SQUARE_SIZE),(j * SQUARE_SIZE+SQUARE_SIZE),SQUARE_SIZE,SQUARE_SIZE);
}else if(board[i][j] == 2){
g.setColor(Color.YELLOW);
g.fillOval( (i*SQUARE_SIZE),(j*SQUARE_SIZE +SQUARE_SIZE),CIRCLE_WIDTH_HEIGHT,CIRCLE_WIDTH_HEIGHT);
}
}
}