Hi everybody,
I have the following question which has to do with my homework for Java.
It`s about this question: "You will probably find it easier to write the code to
draw your wall if you first write a private method called drawRow which draws a row of n
bricks starting at coordinates (x, y). Another private method called makeBrick
should create a new Rectangle object at the position (X,Y) and make it visible. Each
brick should be created as a Rectangle object, 54 pixels wide and 16 pixels high. The
rectangle object representing the brick should be added to the ArrayList called
bricks."
I have written the following code for the above two methods. My question is how can I create a row of 8 bricks. I have managed to get one brick to be shown but they need to be placed next to eachother. So how do I place them next to each other? See my two methods down here. Beneath the methods you will find the rest of the code of the whole class.
/**
* Create a new rectangle object representing a brick and add it to the arraylist.
*/
private void makeBrick() {
brick = new Rectangle();
brick.makeVisible();
brick.changeSize(54, 16);
brick.moveHorizontal(10);
brick.moveVertical(550);
bricks.add(brick);
}
/**
* Create a new row of 8 bricks.
*/
private void drawRow() {
Integer r=0;
while(r < 9){
makeBrick();
r++;
}
}
import java.util.ArrayList;
/**
* Write a description of class BrickWall here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class BrickWall
{
// instance variables - replace the example below with your own
private Integer bWidth;
private Integer bHeight;
private Integer numRows;
private Integer rowLength;
private ArrayList<String> colors;
private ArrayList<Rectangle> bricks;
private Boolean decrease;
private Boolean isSymmetric;
private Boolean isMultiColor;
private Integer currentColor;
private Integer startX;
private Integer startY;
private Rectangle brick;
/**
* Constructor for objects of class BrickWall.
* @param rows The number of rows in the wall
* @param rowlen The maximum number of bricks in a row
* @param isMultiColor when false all bricks are the same colour. When true the colours cycle through the 6 colours.
* @param decrease If true subtract 2 from rowLen for each row drawn
* @param isSymmetric if decrease is greater than 0 and isSymmetric is true the wall is a pyramid shape, otherwise it is a rectangle or a right angle triangle.
*/
public BrickWall(Integer rows, Integer rowLen)
{
// initialise instance variables
setUpColors();
bWidth = 54;
bHeight = 16;
startX = 10;
startY = 550;
bricks = new ArrayList<Rectangle>();
currentColor = 0;
setNumRows(rows);
setRowLength(rowLen);
this.isMultiColor = false;
this.decrease = false;
this.isSymmetric = false;
}
private void setUpColors() {
colors = new ArrayList<String>();
colors.add("red");
colors.add("yellow");
colors.add("blue");
colors.add("green");
colors.add("magenta");
colors.add("black");
}
/**
* Toggle whether the wall is multicoloured.
*/
public void toggleMultiColour() {
isMultiColor = !isMultiColor;
currentColor = 0;
}
/**
* Toggle whether the decrease in a row length is symmetric.
*/
public void toggleSymmetric() {
isSymmetric = !isSymmetric;
}
/**
* Toggle whether the length of a new row is one less than the length of the previous row.
*/
public void toggleDecrease() {
decrease = ! decrease;
}
/**
* @return the number of bricks in the current wall.
*/
public Integer getNumberOfBricks() {
return bricks.size();
}
/**
* Set the length of a row. There can be no more than 22 bricks in a row.
* @param len The number of bricks in a row. If len is less than or equal
* to zero OR len is greater than 22, the row length will be assigned the value 22.
* Otherwise the length of a row will be assigned the value of len.
*/
public void setRowLength(Integer len) {
if (len <= 0 || len > 22) {
rowLength = 22;
} else {
rowLength = len;
}
}
/**
* Set the maximum number of rows in the wall. If the length of a row decreases,
* there may not be this many rows in the wall.
* @param rows The maximum number of rows in the wall. If rows is less than
* or equal to zero OR rows is greater than 30, the number of rows will be assigned the value 30.
* Otherwise the number of rows will be assigned the value of rows.
*/
public void setNumRows(Integer rows) {
if (rows <= 0 || rows > 30) {
numRows = 30;
} else {
numRows = rows;
}
}
/**
* Create a new rectangle object representing a brick and add it to the arraylist.
*/
private void makeBrick() {
brick = new Rectangle();
brick.makeVisible();
brick.changeSize(54, 16);
brick.moveHorizontal(10);
brick.moveVertical(550);
bricks.add(brick);
}
/**
* Create a new row of 8 bricks.
*/
private void drawRow() {
Integer r=0;
while(r < 9){
makeBrick();
r++;
}
}
/**
* Draw the wall. The first brick will be positioned at the coordinates (10, 550).
* The number of bricks in a row is specified by setRowLength(). The maximum number of rows
* is specified by setNumRows(). If decrease is true, each subsequent row of bricks
* contains one brick less than the previous row. If symmetric is true AND decrease is true then
* the wall is pyramid shaped. If symmetric is false AND decrease is true then the wall is shaped
* like a right angle triangle.
*/
public void draw()
{
eraseWall();
//------------------------------
drawRow();
boolean decrease = false;
boolean symmetric = false;
//------------------------------
}
public void eraseWall() {
Canvas canvas = Canvas.getCanvas();
for (int i=0; !bricks.isEmpty(); i++) {
canvas.erase(bricks.remove(0));
}
}
}