0

我正在从 Roberts 的 The Art & Science of Java (斯坦福的 CS106a 文本)中学习 Java。我使用 NetBeans 作为我的 IDE。

第 4 章,练习 14 要求您扩展前面介绍的棋盘程序。具体来说,它要求您将棋盘居中并绘制一组与游戏初始状态相对应的红白格子。

我已经按照要求完成了,但是有两个问题-

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

1 回答 1

0

对于 1. 板的中心也应该在宽度的中心。所以我们知道

tile 的左边缘N_COLUMNS/2=getWidth()/2例如 tile 4 in 0 索引的左边缘在中心

并且它左边或右边的每个图块都会有一个 sqSize 的移动,所以:

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

于 2013-02-25T03:55:06.493 回答