我正在从The Art& amp;罗伯茨的Java科学(斯坦福大学的CS106a文本)。我使用NetBeans作为我的IDE。
第4章,练习14要求您扩展之前介绍的Checkerboard程序。具体来说,它要求您将棋盘放在中心并绘制一组红色&对应于游戏初始状态的白色支票。
我已经完成了所要求的,但有两个问题 -
电路板未完全位于窗口中央。它靠近窗口的左侧而不是右侧。我不确定如何更加集中。我这样做了吗?我可以/应该更改NetBeans中的设置吗?
跳棋应该占据他们所坐的大部分瓷砖。我指定我的检查器的大小取决于瓷砖的大小,以便设置简单且相称。有没有更好的方法来让棋子更大?
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 :(得分:0)
对于1.板的中心也应该在宽度的中心。所以我们知道
图块N_COLUMNS/2
= getWidth()/2
的左边缘,例如tile 4 in in indexing的左边缘位于中心
并且左边或右边的每个图块都会有sqSize的移动,所以:
double x = getWidth()/2 + (j-N_COLUMNS/2)*sqSize