Rashidul Islam
Sokoban Game Development using Java | Rashidul Islam
SOKOBAN GAME
Rashidul Islam
Table of Contents
No Description Page
Task 1
a) The application that I produce.
1
Task 2
a)
Test data.
17
T...
Rashidul Islam
Task 1:
The application that I have created:
a) Class - SuitableLocation.java:
----------------------------...
Rashidul Islam
1.) Documentation:
Constructor Summary
SuitableLocation(int i, int j)
-------------------------------------...
Rashidul Islam
1.) Documentation:
c) Class - PlayerCharacter.java:
-------------------------------------------------------...
Rashidul Islam
1.) Documentation:
sokobangame
Class PlayerCharacter
java.lang.Object
sokobangame.User
sokobangame.PlayerCh...
Rashidul Islam
d) Class - Obstacle.java:
---------------------------------------------------------------------------
1.) D...
Rashidul Islam
e) Class - User.java:
Rashidul Islam
Rashidul Islam
---------------------------------------------------------------------------
1.) Documentation:
Constructor ...
Rashidul Islam
public class Panel extends JPanel {
/**
*
*/
// instance variables
//Attributes: instance variables of an o...
Rashidul Islam
private ArrayList<SuitableLocation> SuitLo = new
ArrayList<SuitableLocation>();
private PlayerCharacter Pla...
Rashidul Islam
public final void initWorld() {
btn1 = new JButton("Level1");
btn1.setBounds(10000, 1000, 200, 50);
this.ad...
Rashidul Islam
btn6.setBounds(500, 1275, 200, 50);
this.add(btn6);
Font k = new Font("Courier New",
Font.LAYOUT_LEFT_TO_RI...
Rashidul Islam
y += SPACE;
if (this.w < x) {
this.w = x;
}
x = OFFSET;
} else if (item == '#') {
wall = new Obstacle(x, y)...
Rashidul Islam
for (int i = 0; i < world.size(); i++) {
User item = (User) world.get(i);
if ((item instanceof PlayerCharac...
Rashidul Islam
if (key == KeyEvent.VK_LEFT) {
if (checkWallCollision(PlayerChar,
LEFT_COLLISION)) {
return;
}
if (checkBag...
Rashidul Islam
} else if (key == KeyEvent.VK_DOWN) {
if (checkWallCollision(PlayerChar,
BOTTOM_COLLISION)) {
return;
}
if ...
Rashidul Islam
return true;
}
}
return false;
} else if (type == TOP_COLLISION) {
for (int i = 0; i < obs.size(); i++) {
O...
Rashidul Islam
if (!bag.equals(item)) {
if (bag.isLeftCollision(item)) {
return true;
}
}
if (checkWallCollision(bag,
LEFT...
Rashidul Islam
return false;
} else if (type == TOP_COLLISION) {
for (int i = 0; i < crates.size(); i++) {
Crate bag = (Cr...
Rashidul Islam
return true;
}
}
if (checkWallCollision(bag,
BOTTOM_COLLISION)) {
return true;
}
}
bag.move(0, SPACE);
isSo...
Rashidul Islam
public void restartStage() {
SuitLo.clear();
crates.clear();
obs.clear();
initWorld();
if (solved) {
solved...
Rashidul Islam
Rashidul Islam
---------------------------------------------------------------------------
1.) Documentation:
Constructor ...
Rashidul Islam
Because I think:
 The testing data is representative of other data.
 These were the best suitable test da...
Rashidul Islam
1. Testing :
a. For Public class User (User.java) (Lines 13-15):
case Line
No.
Data
Type
i j x y Constructo...
Rashidul Islam
case Line
No.
Data Type Method Expected Actual
4 22 int Int x()
22.
a.
int Int x() i i
23 int Int x() i i
e...
Rashidul Islam
case Line
No.
Data Type Method Expected
(in j)
Actual
(inj)
7 26 int(y) void setY(int x)
26.
a.
int(y) void...
Rashidul Islam
case Line
No.
Data Type Method Expected Actual
9 32 User(actor) boolean
isRightCollision(User actor)
- -
32...
Rashidul Islam
No.
11 36 User(actor
)
boolean
isBottomCollision(User actor
)
- -
36.
a.
User(actor
)
boolean
isBottomColli...
Rashidul Islam
Task 3:
Class diagrams:
a) Class Diagram:
Rashidul Islam
Upcoming SlideShare
Loading in …5
×

Introduction to-sokoban-game-development-using-java-by-rashidul-islam

482 views

Published on

Sokoban Game Development using Java | Rashidul Islam

Published in: Technology, Spiritual
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
482
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introduction to-sokoban-game-development-using-java-by-rashidul-islam

  1. 1. Rashidul Islam Sokoban Game Development using Java | Rashidul Islam SOKOBAN GAME
  2. 2. Rashidul Islam Table of Contents No Description Page Task 1 a) The application that I produce. 1 Task 2 a) Test data. 17 Task 3 a) Class diagrams 19
  3. 3. Rashidul Islam Task 1: The application that I have created: a) Class - SuitableLocation.java: ---------------------------------------------------------------------------
  4. 4. Rashidul Islam 1.) Documentation: Constructor Summary SuitableLocation(int i, int j) ---------------------------------------------------------------------------------------------- b) Class - Crate.java: ---------------------------------------------------------------------------
  5. 5. Rashidul Islam 1.) Documentation: c) Class - PlayerCharacter.java: --------------------------------------------------------------------------- Constructor Summary Crate(int i, int j)
  6. 6. Rashidul Islam 1.) Documentation: sokobangame Class PlayerCharacter java.lang.Object sokobangame.User sokobangame.PlayerCharacter public class PlayerCharacterextends sokobangame.User Constructor Summary PlayerCharacter(int i, int j)
  7. 7. Rashidul Islam d) Class - Obstacle.java: --------------------------------------------------------------------------- 1.) Documentation: Constructor Summary Obstacle(int i, int j)
  8. 8. Rashidul Islam e) Class - User.java:
  9. 9. Rashidul Islam
  10. 10. Rashidul Islam --------------------------------------------------------------------------- 1.) Documentation: Constructor Summary User(int x, int y) ---------------------------------------------------------------------------------------------- f) Class - Panel.java: --------------------------------------------------------------------------- package sokobangame; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; /**import java.awt.event.ActionEvent;*/ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JPanel; /** * * * @author (Md. ) * @version (09/11/12) */
  11. 11. Rashidul Islam 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>();
  12. 12. Rashidul Islam 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; }
  13. 13. Rashidul Islam public final void initWorld() { btn1 = new JButton("Level1"); 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("Level2"); 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("Level3"); 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("Level4"); 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("Level5"); 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");
  14. 14. Rashidul Islam 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') {
  15. 15. Rashidul Islam 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);
  16. 16. Rashidul Islam 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();
  17. 17. Rashidul Islam 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);
  18. 18. Rashidul Islam } 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)) {
  19. 19. Rashidul Islam 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);
  20. 20. Rashidul Islam 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(); } }
  21. 21. Rashidul Islam 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)) {
  22. 22. Rashidul Islam 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(); } }
  23. 23. Rashidul Islam public void restartStage() { SuitLo.clear(); crates.clear(); obs.clear(); initWorld(); if (solved) { solved = false; } } } 1.) Documentation: Constructor Summary Panel() g) Class - Game.java: ---------------------------------------------------------------------------
  24. 24. Rashidul Islam
  25. 25. Rashidul Islam --------------------------------------------------------------------------- 1.) Documentation: Constructor Summary Game() private JButton btn1; private JButton btn2; private JButton btn3; private JButton btn4; private JButton btn5; private JButton btn6; private JButton btn7; --------------------------------------------------------------------------- Task 2: Test data: a) Full Testing Plan: It’s important that tests are described fully before they are carried out. Anyone carrying out a test without first describing the expected outcome is not testing, but experimenting. My testing plan includes:  The identity of the component to be tested.  The purpose of the test.  The condition under which the test is to be carried out.  The expected outcome. b) Why I chose the testing data:
  26. 26. Rashidul Islam Because I think:  The testing data is representative of other data.  These were the best suitable test data where errors are particularly likely to happen. c) What testing categories you are stressing in your regime: We need a structured approach to testing. These are the testing categories that I am stressing in my regime:  I am going to decide on a set of test data.  I am going to record the expected results and the actual results. d) Full log of how I implemented the testing: e) What regression testing I needed to do as a result of fixes:
  27. 27. Rashidul Islam 1. Testing : a. For Public class User (User.java) (Lines 13-15): case Line No. Data Type i j x y Constructor Expected(i,j) Actual(i,j) 1 13 int 0 0 Public User() 14 int x 0 0 Public User() (X, -) (X, -) 15 int y 0 0 Public User() (x, y) (x, y) b. For Public class User (User.java) (Lines 18-19): case Line No. Data Type Method Expected Actual 2 18 Image(pic) java.awt.Image getImage() 18. a. Image(pic) java.awt.Image getImage() pic pic 19 Image(pic) java.awt.Image getImage() pic pic c. For Public class User (User.java) (Lines 20-21): cas e Lin e No. Data Type Method Expected(i n pic) Actual(i n pic) 3 20 Image(im g) Void setImage(java.awt.Image i mg) 20. a. Image(im g) Void setImage(java.awt.Image i mg) img img 21 Image(im g) Void setImage(java.awt.Image i mg) img img d. For Public class User (User.java) (Lines 22-23):
  28. 28. Rashidul Islam case Line No. Data Type Method Expected Actual 4 22 int Int x() 22. a. int Int x() i i 23 int Int x() i i e. For Public class User (User.java) (Lines 24-25): case Line No. Data Type Method Expected Actual 5 24 int Int y() 24. a. int Int y() j j 25 int Int y() j j f. For Public class User (User.java) (Lines 26-27): case Line No. Data Type Method Expected (in i) Actual (in i) 6 26 int(x) void setX(int x) 26. a. int(x) void setX(int x) x x 27 int(x) void setX(int x) x x g. For Public class User (User.java) (Lines 26-27):
  29. 29. Rashidul Islam case Line No. Data Type Method Expected (in j) Actual (inj) 7 26 int(y) void setY(int x) 26. a. int(y) void setY(int x) y y 27 int(y) void setY(int x) y y h. For Public class User (User.java) (Lines 30-31): case Line No. Data Type Method Expected Actual 8 30 User(actor) boolean isLeftCollision(User actor) - - 30. a. User(actor) boolean isLeftCollision(User actor) true true 30. b. User(actor) boolean isLeftCollision(User actor) true true 30. c. User(actor) boolean isLeftCollision(User actor) false false 31 User(actor) boolean isLeftCollision(User actor) false false i. For Public class User (User.java) (Lines 32-33):
  30. 30. Rashidul Islam case Line No. Data Type Method Expected Actual 9 32 User(actor) boolean isRightCollision(User actor) - - 32. a. User(actor) boolean isRightCollision(User actor) true true 32. b. User(actor) boolean isRightCollision(User actor) true true 32. c. User(actor) boolean isRightCollision(User actor) false false 33 User(actor) boolean isRightCollision(User actor) false false j. For Public class User (User.java) (Lines 34-35): case Line No. Data Type Method Expected Actual 10 34 User(actor) boolean isTopCollision(User actor) - - 34. a. User(actor) boolean isTopCollision(User actor) true true 34. b. User(actor) boolean isTopCollision(User actor) true true 34. c. User(actor) boolean isTopCollision(User actor) false false 35 User(actor) boolean isTopCollision(User actor) false false k. For Public class User (User.java) (Lines 36-37): cas e Lin e Data Type Method Expecte d Actua l
  31. 31. Rashidul Islam No. 11 36 User(actor ) boolean isBottomCollision(User actor ) - - 36. a. User(actor ) boolean isBottomCollision(User actor ) true true 36. b. User(actor ) boolean isBottomCollision(User actor ) true true 36. c. User(actor ) boolean isBottomCollision(User actor ) false false 37 User(actor ) boolean isBottomCollision(User actor ) false false
  32. 32. Rashidul Islam Task 3: Class diagrams: a) Class Diagram:
  33. 33. Rashidul Islam

×