aspose file tools*
The moose likes Beginning Java and the fly likes Simple Programming exercise Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Simple Programming exercise" Watch "Simple Programming exercise" New topic
Author

Simple Programming exercise

Amil Mehmedagic
Greenhorn

Joined: Feb 27, 2004
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

Joined: Jan 29, 2003
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?


A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi
Amil Mehmedagic
Greenhorn

Joined: Feb 27, 2004
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

Joined: Oct 02, 2003
Posts: 11499
    
  16

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.


There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Simple Programming exercise