Java 内有对称正方形的随机正方形
因此,我必须画4个正方形,然后在每个正方形内画10个随机正方形,带有随机的x和y坐标,它们必须对称,然后用它们并排画整个屏幕。每个部分(4个大正方形为一个部分)必须具有相同的随机正方形和相同的颜色。我已经到了一个地步,我可以画一个单一的部分,但我想不出任何东西,使他们被画了一遍又一遍,所以他们涵盖了整个屏幕相同的随机方块和随机颜色。希望你能理解。这是我现在拥有的Java 内有对称正方形的随机正方形,java,random,graphics,jframe,paint,Java,Random,Graphics,Jframe,Paint,因此,我必须画4个正方形,然后在每个正方形内画10个随机正方形,带有随机的x和y坐标,它们必须对称,然后用它们并排画整个屏幕。每个部分(4个大正方形为一个部分)必须具有相同的随机正方形和相同的颜色。我已经到了一个地步,我可以画一个单一的部分,但我想不出任何东西,使他们被画了一遍又一遍,所以他们涵盖了整个屏幕相同的随机方块和随机颜色。希望你能理解。这是我现在拥有的 @Override public void paint(Graphics g){ int a=100; Random
@Override
public void paint(Graphics g){
int a=100;
Random rand = new Random();
g.setColor(Color.black);
g.drawRect(50, 50, a, a);
g.drawRect(50+a, 50, a, a);
g.drawRect(50, 50+a, a, a);
g.drawRect(50+a, 50+a, a, a);
int r = rand.nextInt(a/2);
int rx = rand.nextInt(a/2)+50;
int ry = rand.nextInt(a/2)+50;
int rxsim = (2*a+50)-(rx-50)-r;
int rysim = (2*a+50)-(ry-50)-r;
g.setColor(new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255)));
g.fillRect(rx, ry, r, r);
g.fillRect(rxsim, ry, r, r);
g.fillRect(rx, rysim, r, r);
g.fillRect(rxsim, rysim, r, r);
}
您可以测量屏幕(或框架,无论什么)的大小和矩形的大小
int widthScreen = getWidth();//TODO implement this
int widthSample = getSampleWidth();//TODO implement that (looks like 50 in your code)
一旦你知道了你的尺寸,你就可以计算:
int amountHorizontal = widthScreen / widthSample + 1; //adding one extra
当然,你也必须对amountVertical做同样的操作,这是相同的技术
然后画dx/dy倍
Graphics g; //your graphics to draw on
Rectangle r; //a rectanlge to be drawn
for(int dy = 0; dy < amountHorizontal; dy++){
for(int dx = 0; dx < amountHorizontal; dx++){
if(dx%2 == 0 && dy%2 == 0){ //even & even
drawUpperLeft(r, dx, dy, g)
}
if(dx%2 != 0 && dy%2 == 0){ //odd & even
drawUpperRight(r, dx, dy)
}
if(dx%2 == 0 && dy%2 != 0){ //even & odd
drawLowerLeft(r, dx, dy)
}
if(dx%2 != 0 && dy%2 != 0){ //odd & odd
drawLowerRight(r, dx, dy)
}
}
}
你能不能提供一张能更详细地解释你的问题的图片?@SaraSeppola我有它,但需要让它看起来像
private void drawLowerRight(Rectangle r, int xOff, int yOff, Graphics g){
//you already know how to rotate a rectangle by 90/180/270 degree
Rectangle rot = createRectanlge(r, 270);
int x = xOff * widthSample;
int y = yOff * widthSample;
rot.x = rot.x + xOff;
rot.y = rot.y + yOff;
g.drawRect(rot);
}