2016-09-07 9 views
0

ネストされたforループを使用してJavaでチェッカーボードパターンを描画しようとしています。私はこの質問が以前に尋ねられたことは知っていますが、ボード上に背景色を使用しているだけではない2つの異なる色で質問されていません。私はチェッカーの位置を保持するための配列として個々の四角形を使用することを計画しているので、個々の四角形を作成する必要があります。入れ子にされたforループの氷を落として各四角形を作成する方が良いでしょうか?そのショートカットに固執すべきですか?そして、もし私がそれに固執すれば、ネストされたループはどのようにフォーマットされますか(各色ごとに1つ)?チェッカータイルを作成する場合ネストされたforループを持つ2色のチェッカーボードを描画します。各四角はそれぞれ独自のオブジェクトです(Java)

答えて

1

、私は、x座標のためintに渡す、とyのような座標:私たちはボード上のタイルを描画する方法を持ってそのように

 import java.awt.Color; 
     import java.awt.Graphics; 

     public class CheckerTile { 

      public static final int WIDTH = 100; //width of each tile 
      public static final int HEIGHT = 100; //height of each tile, most likely same as width so its a square 

      public static int currentId = 0; //variable to reference unique id for each tile 

      private int id; //current id of tile 
      private int x; //x coordinate 
      private int y; //y coordinate 
      private int width; //width of tile 
      private int height; //height of tile 

      //Default constructor to take x and y coordinate 
      public CheckerTile(int x, int y) { 
       this.id = currentId++; 
       this.x = x; 
       this.y = y; 
       width = WIDTH; 
       height = HEIGHT; 
      } 

      public int getId() 
      { 
       return id; 
      } 

      //draws the tile on the panel. 
      public void draw(Graphics g) 
      { 
       //if the checkerTile's id is divisible by 2, draw it red, otherwise draw it black. 
       g.setColor(id % 2 == 0 ? Color.RED : Color.black); 
       g.fillRect(x, y, width, height); 
      } 

     } 

。今度は、各オブジェクトを作成するときに、currentId変数をインクリメントし、後でモジュラス演算子を使用して各オブジェクトを個別に色付けすることができます。

私はdraw(Graphics g)メソッドを追加することにしたので、スウィングを使用していると仮定していますので、javaで再ペイントするときにGraphicsオブジェクトを使用します。別のライブラリを使用している場合は、ボードに描画する方法についていくつかの調査を行う必要があります。

//Creates the JPanel, which needs to be added to JFrame object in main 
    import java.awt.BorderLayout; 
    import java.awt.Graphics; 

    import javax.swing.JFrame; 
    import javax.swing.JPanel; 

    public class CheckerBoard extends JPanel { 

     CheckerTile[][] checkerTiles; //2-dimension array of checkerTiles 

     public CheckerBoard() { 
      super(); 
      this.setSize(800,800); 

      checkerTiles = new CheckerTile[9][9]; 

      //This creates the checkerTiles. 
      for(int i = 0; i < 9; i++) 
      { 
       for(int j = 0; j < 9; j++) 
       { 
        checkerTiles[i][j] = new CheckerTile(j * CheckerTile.WIDTH, i * CheckerTile.HEIGHT); 
       } 
      } 


      this.setVisible(true); 

      //Repaint right away to show results. 
      repaint(); 

     } 

     //We need to override this to paint the tiles on the board. 
     @Override 
     public void paintComponent(Graphics g) 
     { 
      for(int i = 0; i < checkerTiles.length; i++) 
      { 
       for(int j = 0; j < checkerTiles[i].length; j++) 
       { 
        //call the draw method on each tile. 
        checkerTiles[i][j].draw(g); 
       } 
      } 
     } 

     //A demo of adding the panel to a frame and showing the tiles. 
     public static void main(String[] args) 
     { 
      //Create the JFrame and add the CheckerBoard we made to it. 
      JFrame frame = new JFrame(); 
      frame.setSize(800,800); 
      frame.setLayout(new BorderLayout()); 
      frame.add(new CheckerBoard(), BorderLayout.CENTER); 
      frame.setVisible(true); 

     } 

    } 

あなた JPanelで今

、それは次のようになります

関連する問題