2013-02-25 126 views
0

我正在學習Java的藝術& Java的科學由羅伯茨(斯坦福的CS106a文本)。我使用NetBeans作爲我的IDE。CS106a棋盤優化

第4章練習14要求您擴展前面介紹的棋盤程序。具體來說,它會要求您將棋盤居中並繪製一組對應於遊戲初始狀態的紅色檢查。

的要求我已經完成儘可能多的,但有兩個issues-

  1. 董事會並不完全在窗口中居中。它比右側更靠近窗戶的左側。我不知道如何更加集中它。我做對了嗎? NetBeans中是否有可以更改的設置?

  2. 跳棋應占用大部分他們坐的瓷磚。我將我的棋子的大小分配爲取決於瓷磚的大小,以便設置簡單且相稱。有沒有更好的方法來做到這一點,使棋子更大?

    import acm.graphics.*; 
    import acm.program.*; 
    import java.awt.*; 
    
    public class Checkerboard extends GraphicsProgram{ 
    
    public void run(){ 
    
    double sqSize = (double)getHeight()/N_ROWS; 
    for (int i = 0; i < N_ROWS; i++){ 
        for(int j = 0; j < N_COLUMNS; j++){ 
         double x = ((j * sqSize) + (getWidth()/N_COLUMNS)); //centers square?? 
         double y = (i * sqSize); 
         GRect sq = new GRect(x, y, sqSize, sqSize); 
         sq.setFilled((i + j) % 2 != 0); 
         sq.setFillColor(Color.GRAY); 
         add(sq); 
    
         double circleCoord = (sqSize * .33); 
         double xx = ((j * sqSize) + (getWidth()/N_COLUMNS) + circleCoord); 
         double yy = ((i * sqSize) + circleCoord); 
    
         if((i + j) % 2 != 0 && i < 3){ 
          GOval red = new GOval(xx, yy, circleCoord, circleCoord); 
          red.setFilled(true); 
          red.setFillColor(Color.RED); 
          add(red); 
    
         } else if((i + j) % 2 != 0 && i > 4){ 
          GOval black = new GOval(xx, yy, circleCoord, circleCoord); 
          black.setFilled(true); 
          black.setFillColor(Color.BLACK); 
          add(black); 
         } 
    
        } 
        } 
    } 
    private static final int N_ROWS = 8; 
    private static final int N_COLUMNS = 8; 
    
    } 
    

回答

0
對於

1.板的中心應是在寬度的中心,也是。所以我們知道

瓦片的左邊緣N_COLUMNS/2 = getWidth()/2例如,瓦4 0索引有其左側邊緣在中心

左或該權利將有sqSize的運動中每瓦,所以:

double x = getWidth()/2 + (j-N_COLUMNS/2)*sqSize

+0

謝謝,這個解決方案是有道理的,並幫助很多! – todon2 2013-02-27 01:53:06