Win a copy of Design for the Mind this week in the Design forum!

# Simple Programming exercise

Amil Mehmedagic
Greenhorn
Posts: 22
Hello Everyone!
I've just started programming in Java and I'm stuck on this particular exercise.
I need to create a red square of width 50 pixels in the window centre, which then has to grow by 2 pixels every 50 milliseconds until the width is
250 pixels. I've got this to work. Now the square needs to remain at the centre at all times, which means that it has to grow by 100 pixels in each direction of the window(symmetrically). How can this be accomplished in a for loop?
I've written the following code, which increases the width by 2 pixels every 50 millisec. But SquareFigure.setWidth increases the square only downwards and in the right direction:
SquareFigure.create();
SquareFigure.setWidth(50);
for (int i = 1; i < 201; i = i + 2) {
Delay.milliseconds(50);
SquareFigure.setWidth(50 + i);

}
}
}

Stan James
(instanceof Sidekick)
Ranch Hand
Posts: 8791
SquareFigure is a class you wrote? That means I don't know much about it. But to get it in the center of the screen you must have calculated a starting point X & Y probably for the top left corner? Every time you update the square, move the location as well as the size. To grow by 2:
x = x - 1;
y = y - 1;
height = height + 2;
width = height;
Or you could resize the square and then calculate where to put it. Should give the exactly same results unless you get rounding trouble:
heigth = height + 2;
width = height;
x = (screen width - square width) / 2;
y = (screen heigth - square height) / 2;
Think that will work?

Amil Mehmedagic
Greenhorn
Posts: 22
The class SquareFigure is given and consists of the sole object window and methods,which can be sent to this class: moveRight,moveLeft,moveUp,moveDown,moveTo,setWidth,setColour and drawHollow
The absolute center of the window is at (196,134), which means that as the width of the square is 50 pixels, the top-left corner is at (171,109).
The square is supposed to grow to top-left corner of (71,9);top-right corner (321,9); bottom-left corner at (71,259) and bottom-right corner at (321,259); The square is supposed to grow symmetrically to all corners from the middle at once, so that the final width is 250pix.(from 50 pixels originally).
My new code merely changed the side of the growing square, but still doesn't make it grow to all sides(only to the top-left and bottom-left hand side).
public class GrowingSquare {

public static void main ( String [ ] args){

SquareFigure.create();
SquareFigure.setWidth(50);
int oldX = SquareFigure.getXCorner();
int oldY = SquareFigure.getYCorner();
int height = SquareFigure.getYCorner();
for (int i = 1; i < 101; i = i + 2){
Delay.milliseconds(50);
SquareFigure.setWidth(50+i);
SquareFigure.moveTo((oldX = oldX - 2),(oldY = oldY - 2));
height = height + 2;

}

}
}

fred rosenberger
lowercase baba
Bartender
Posts: 12098
30
Amil,
if you could use the UBB code tags, it would make reading your code easier.
i don't understand why you originaly set the height to SquareFigure.getYCorner(), or for that matter, what height is used for.
to get the sqaure to grow, if you increase it's size by 2, you need to move it's top corner by 1. you are moving it 2.