Java CS106a棋盘格优化
我从Roberts的《Java艺术与科学》(斯坦福大学的CS106a文本)中学习Java。我正在使用NetBeans作为我的IDE 第4章,练习14要求您展开前面介绍的棋盘格程序。具体来说,它要求您将棋盘居中,并绘制一组与游戏初始状态对应的红白支票 我已经按要求完成了很多,但有两个问题-Java CS106a棋盘格优化,java,graphics,Java,Graphics,我从Roberts的《Java艺术与科学》(斯坦福大学的CS106a文本)中学习Java。我正在使用NetBeans作为我的IDE 第4章,练习14要求您展开前面介绍的棋盘格程序。具体来说,它要求您将棋盘居中,并绘制一组与游戏初始状态对应的红白支票 我已经按要求完成了很多,但有两个问题- 该板在窗口中未完全居中。它比右侧更靠近窗口的左侧。我不知道如何使它更集中。我这样做对吗?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;
}
导入acm.graphics.*;
导入acm.程序。*;
导入java.awt.*;
公共类棋盘扩展图形程序{
公开募捐{
double sqSize=(double)getHeight()/N_行;
对于(int i=0;i4){
GOval black=新的GOval(xx,yy,circleCoord,circleCoord);
黑色。设置填充(真);
黑色。setFillColor(颜色。黑色);
添加(黑色);
}
}
}
}
私有静态最终整数N_行=8;
私有静态final int N_COLUMNS=8;
}
1。板的中心也应该在宽度的中心。所以我们知道 平铺
N_列/2
=getWidth()/2
的左边缘,例如,0索引中的平铺4的左边缘位于中心
左右两侧的每个瓷砖都会有一个SQ大小的移动,所以:
double x=getWidth()/2+(j-N_列/2)*sqSize
谢谢,这个解决方案很有意义,而且帮助很大!