3. Task 1:
The application that I have created:
a) Class - SuitableLocation.java:
---------------------------------------------------------------------------
Rashidul Islam
7. d) Class - Obstacle.java:
---------------------------------------------------------------------------
1.) Documentation:
Constructor Summary
Obstacle(int i, int j)
Rashidul Islam
11. public class Panel extends JPanel {
/**
*
*/
// instance variables
//Attributes: instance variables of an object
/**
* Constructor for objects of class Panel
*/
private static final long serialVersionUID = 1L;
private final int OFFSET = 30;
private JButton btn1; /*type: JButton, variable: btn1 */
private JButton btn2;
private JButton btn3;
private JButton btn4;
private JButton btn5;
private JButton btn6;
private JButton btn7;
//private JButton btnQuit;
private final int SPACE = 20;
private final int LEFT_COLLISION = 1;
private final int RIGHT_COLLISION = 2;
private final int TOP_COLLISION = 3;
private final int BOTTOM_COLLISION = 4;
private ArrayList<Obstacle> obs = new ArrayList<Obstacle>();
private ArrayList<Crate> crates = new ArrayList<Crate>();
Rashidul Islam
12. private ArrayList<SuitableLocation> SuitLo = new
ArrayList<SuitableLocation>();
private PlayerCharacter PlayerChar;
private int w = 0;
private int h = 0;
private boolean solved = false;
private String stage =
" ######n"
+ " ## #n"
+ " ##$ #n"
+ " #### $##n"
+ " ## $ $ #n"
+ "#### # ## # ######n"
+ "## # ## ##### ..#n"
+ "## $ $
..#n"
+ "###### ### #@## ..#n"
+ " ## #########n"
+ " ########n";
public Panel() {
// initialise instance variables
addKeyListener(new TAdapter());
setFocusable(true);
initWorld();
}
/**
*/
public int getBoardWidth() {
return this.w;
}
public int getBoardHeight() {
return this.h;
}
Rashidul Islam
13. public final void initWorld() {
btn1 = new JButton("Level 1");
btn1.setBounds(10000, 1000, 200, 50);
this.add(btn1);
Font f = new Font("Courier New",
Font.LAYOUT_LEFT_TO_RIGHT,24);
btn1.setFont(f);
btn2 = new JButton("Level 2");
btn2.setBounds(10000, 1055, 200, 50);
this.add(btn2);
Font g = new Font("Monospaced",
Font.LAYOUT_LEFT_TO_RIGHT,24);
btn2.setFont(g);
btn3 = new JButton("Level 3");
btn3.setBounds(10000, 1110, 200, 50);
this.add(btn3);
Font n = new Font("Monospaced",
Font.LAYOUT_LEFT_TO_RIGHT,24);
btn3.setFont(n);
btn4 = new JButton("Level 4");
btn4.setBounds(500, 1165, 200, 50);
this.add(btn4);
Font m = new Font("Monospaced",
Font.LAYOUT_LEFT_TO_RIGHT,24);
btn4.setFont(m);
btn5 = new JButton("Level 5");
btn5.setBounds(500, 1220, 200, 50);
this.add(btn5);
Font j = new Font("Monospaced",
Font.LAYOUT_LEFT_TO_RIGHT,24);
btn5.setFont(j);
btn6 = new JButton("Steps");
Rashidul Islam
14. btn6.setBounds(500, 1275, 200, 50);
this.add(btn6);
Font k = new Font("Courier New",
Font.LAYOUT_LEFT_TO_RIGHT,24);
btn6.setFont(k);
btn7 = new JButton("Exit");
btn7.setBounds(500, 1330, 200, 50);
this.add(btn7);
Font l = new Font("Courier New",
Font.LAYOUT_LEFT_TO_RIGHT,24);
btn7.setFont(l);
/**btnQuit = new JButton("Quit");
btnQuit.setBounds(440, 380, 100, 50);
btnQuit.setFont(f);
btnQuit.addActionListener(this);
this.add(btnQuit);
this.setVisible(true);*/
}*/
/**public void actionPerformed(ActionEvent e)
{
if (e.getSource() == btnQuit)
System.exit(0);
int x = OFFSET;
int y = OFFSET;
Obstacle wall;
Crate b;
SuitableLocation a;
for (int i = 0; i < stage.length(); i++) {
char item = stage.charAt(i);
if (item == 'n') {
Rashidul Islam
15. y += SPACE;
if (this.w < x) {
this.w = x;
}
x = OFFSET;
} else if (item == '#') {
wall = new Obstacle(x, y);
obs.add(wall);
x += SPACE;
} else if (item == '$') {
b = new Crate(x, y);
crates.add(b);
x += SPACE;
} else if (item == '.') {
a = new SuitableLocation(x, y);
SuitLo.add(a);
x += SPACE;
} else if (item == '@') {
PlayerChar = new PlayerCharacter(x, y);
x += SPACE;
} else if (item == ' ') {
x += SPACE;
}
}
}
h = y;
public void buildWorld(Graphics g) {
g.setColor(new Color(0, 108, 209));
g.fillRect(0, 0, this.getWidth(), this.getHeight());
ArrayList<User> world = new ArrayList<User>();
world.addAll(obs);
world.addAll(SuitLo);
world.addAll(crates);
world.add(PlayerChar);
Rashidul Islam
16. for (int i = 0; i < world.size(); i++) {
User item = (User) world.get(i);
if ((item instanceof PlayerCharacter)
|| (item instanceof Crate)) {
g.drawImage(item.getImage(), item.x() + 2, item.y() + 2, this);
} else {
g.drawImage(item.getImage(), item.x(), item.y(), this);
}
if (solved) {
g.setColor(new Color(255,255,255));
g.drawString("The level has been solved!", 25, 20);
Font f = new Font("Courier New", Font.BOLD,14);
setFont(f);
}
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
buildWorld(g);
}
class TAdapter extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
if (solved) {
return;
}
int key = e.getKeyCode();
Rashidul Islam
17. if (key == KeyEvent.VK_LEFT) {
if (checkWallCollision(PlayerChar,
LEFT_COLLISION)) {
return;
}
if (checkBagCollision(LEFT_COLLISION)) {
return;
}
PlayerChar.move(-SPACE, 0);
} else if (key == KeyEvent.VK_RIGHT) {
if (checkWallCollision(PlayerChar,
RIGHT_COLLISION)) {
return;
}
if (checkBagCollision(RIGHT_COLLISION)) {
return;
}
PlayerChar.move(SPACE, 0);
} else if (key == KeyEvent.VK_UP) {
if (checkWallCollision(PlayerChar,
TOP_COLLISION)) {
return;
}
if (checkBagCollision(TOP_COLLISION)) {
return;
}
PlayerChar.move(0, -SPACE);
Rashidul Islam
18. } else if (key == KeyEvent.VK_DOWN) {
if (checkWallCollision(PlayerChar,
BOTTOM_COLLISION)) {
return;
}
if (checkBagCollision(BOTTOM_COLLISION)) {
return;
}
PlayerChar.move(0, SPACE);
} else if (key == KeyEvent.VK_R) {
restartStage();
}
}
}
repaint();
private boolean checkWallCollision(User actor, int type) {
if (type == LEFT_COLLISION) {
for (int i = 0; i < obs.size(); i++) {
Obstacle wall = (Obstacle) obs.get(i);
if (actor.isLeftCollision(wall)) {
return true;
}
}
return false;
} else if (type == RIGHT_COLLISION) {
for (int i = 0; i < obs.size(); i++) {
Obstacle wall = (Obstacle) obs.get(i);
if (actor.isRightCollision(wall)) {
Rashidul Islam
19. }
return true;
}
return false;
} else if (type == TOP_COLLISION) {
for (int i = 0; i < obs.size(); i++) {
Obstacle wall = (Obstacle) obs.get(i);
if (actor.isTopCollision(wall)) {
return true;
}
}
return false;
} else if (type == BOTTOM_COLLISION) {
for (int i = 0; i < obs.size(); i++) {
Obstacle wall = (Obstacle) obs.get(i);
if (actor.isBottomCollision(wall)) {
return true;
}
}
return false;
}
}
return false;
private boolean checkBagCollision(int type) {
if (type == LEFT_COLLISION) {
for (int i = 0; i < crates.size(); i++) {
Crate bag = (Crate) crates.get(i);
if (PlayerChar.isLeftCollision(bag)) {
for (int j=0; j < crates.size(); j++) {
Crate item = (Crate) crates.get(j);
Rashidul Islam
20. if (!bag.equals(item)) {
if (bag.isLeftCollision(item)) {
return true;
}
}
if (checkWallCollision(bag,
LEFT_COLLISION)) {
return true;
}
}
}
bag.move(-SPACE, 0);
isSolved();
}
return false;
} else if (type == RIGHT_COLLISION) {
for (int i = 0; i < crates.size(); i++) {
Crate bag = (Crate) crates.get(i);
if (PlayerChar.isRightCollision(bag)) {
for (int j=0; j < crates.size(); j++) {
Crate item = (Crate) crates.get(j);
if (!bag.equals(item)) {
if (bag.isRightCollision(item)) {
return true;
}
}
if (checkWallCollision(bag,
RIGHT_COLLISION)) {
return true;
}
}
}
}
bag.move(SPACE, 0);
isSolved();
Rashidul Islam
21. return false;
} else if (type == TOP_COLLISION) {
for (int i = 0; i < crates.size(); i++) {
Crate bag = (Crate) crates.get(i);
if (PlayerChar.isTopCollision(bag)) {
for (int j = 0; j < crates.size(); j++) {
Crate item = (Crate) crates.get(j);
if (!bag.equals(item)) {
if (bag.isTopCollision(item)) {
return true;
}
}
if (checkWallCollision(bag,
TOP_COLLISION)) {
return true;
}
}
}
}
bag.move(0, -SPACE);
isSolved();
return false;
} else if (type == BOTTOM_COLLISION) {
for (int i = 0; i < crates.size(); i++) {
Crate bag = (Crate) crates.get(i);
if (PlayerChar.isBottomCollision(bag)) {
for (int j = 0; j < crates.size(); j++) {
Crate item = (Crate) crates.get(j);
if (!bag.equals(item)) {
if (bag.isBottomCollision(item)) {
Rashidul Islam
22. }
return true;
}
if (checkWallCollision(bag,
BOTTOM_COLLISION)) {
return true;
}
}
}
}
}
}
bag.move(0, SPACE);
isSolved();
return false;
public void isSolved() {
int num = crates.size();
int compl = 0;
for (int i = 0; i < num; i++) {
Crate bag = (Crate) crates.get(i);
for (int j = 0; j < num; j++) {
SuitableLocation area = (SuitableLocation) SuitLo.get(j);
if (bag.x() == area.x()
&& bag.y() == area.y()) {
compl += 1;
}
}
}
}
if (compl == num) {
solved = true;
repaint();
}
Rashidul Islam
23. public void restartStage() {
}
}
SuitLo.clear();
crates.clear();
obs.clear();
initWorld();
if (solved) {
solved = false;
}
1.) Documentation:
Constructor Summary
Panel()
g) Class - Game.java:
---------------------------------------------------------------------------
Rashidul Islam
30. Fig: starting position with buttons
---------------------------------------------------------------------------
Task 3:
Class diagrams:
a) Class Diagram:
i)
Class Diagram or Design In UML Using StarUML:
Fig: Level 1
Rashidul Islam