在Java的2D网格数组中绘制圆圈



我了解如何制作2D数组网格。我尝试将随机数放入其中,但我不知道如何在Jframe上绘制它们。例如,为红色圆圈为0,绿色圆圈等。我需要弄清楚如何以网格方式表示它们。

public class Game {

    public static void initGrid(){
        //clumn and row 4 x 4
        int col = 4;
        int row = 4;
        //initialize 2d grid array
        int[][] a = new int[row][col];
        Random rand = new Random();
        //for loop to fill it with random number
        for(int x = 0 ; x < col ; x++) {
            for(int y = 0; y < row; y++) {
                a[x][y] = (int) rand.nextInt(4);
                System.out.print(a[x][y]);
            }//inner for
            System.out.println();
        }//outer for

    }//method

    public static void main(String[] args){
        initGrid();
    }

}

我了解jframe和jpanel,就在空画布上而不是我想要的方式。我想结合两个代码,但我的知识有限。

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.geom.Ellipse2D;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
  @SuppressWarnings("serial")
  public class Game2 extends JPanel{
    @Override
    public void paint(Graphics g){
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.RED);
        g2d.fillOval(0, 0, 30, 30);
        g2d.drawOval(0, 50, 30, 30);
        g2d.fillRect(50, 0, 30, 30);
        g2d.drawRect(50, 50, 30, 30);
        g2d.draw(new Ellipse2D.Double(0, 100, 30 ,30));
    }
     public static void main(String[] args){
        JFrame frame = new JFrame("Mini Tennis");
        frame.add(new Game2());
        frame.setSize(300, 300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
} 

我的建议是:

  1. Game类作为参数传递给Game2的构造函数,并将其作为局部变量存储在Game2类中,如下所示:

    Game game;
    public Game2(Game game){
       this.game = game;
       //Rest of your constructor.
    }
    
  2. 接下来,您在Game类中声明一个getter方法以检索存储位置网格如下的数组:

    public int[][] getPositions(){
       return this.a;
    }
    
  3. 创建一种方法,该方法将根据int值作为网格的元素返回颜色为油漆:

    private Color getColor(int col){
       switch(col){
          case 0:
          return Color.red;
          case 1:
          .
          .
          .
          .
       }
    }
    
  4. 现在,不用覆盖Game2类的paint方法覆盖paintComponent,并在paintComponent方法中绘制圆圈(在这里我认为圆形直径为30px,它们之间的间隙为20px,它们之间的差距为20px)):

    public void paintComponent(Graphics g){
       super.paintComponent(g);
       Graphics2D g2d = (Graphics2D) g;
       int[][] pos = this.game.getPositions();
       for(int i = 0; i < pos.length; i++){
          for(int j = 0; j < pos[i].length; j++){
             g2d.setColor(getColor(pos[i][j]));
             g2d.fillOval(i*50, j*50, 30, 30);
          }
       }
    }
    

我希望这将解决您访问Game代表模型的Game2类代表视图的问题。

相关内容

  • 没有找到相关文章

最新更新