Bomb
parent
424e71eb74
commit
e856a93fb9
|
@ -40,6 +40,7 @@ public class GamePanel extends JPanel implements Runnable, KeyListener{
|
||||||
public static ArrayList<Tile>map = new ArrayList<Tile>();
|
public static ArrayList<Tile>map = new ArrayList<Tile>();
|
||||||
public static ArrayList<NonPlayer>enemy = new ArrayList<NonPlayer>();
|
public static ArrayList<NonPlayer>enemy = new ArrayList<NonPlayer>();
|
||||||
|
|
||||||
|
public static StickyBomb b;
|
||||||
public static Camera camera;
|
public static Camera camera;
|
||||||
|
|
||||||
// image imports begin here
|
// image imports begin here
|
||||||
|
@ -85,6 +86,7 @@ public class GamePanel extends JPanel implements Runnable, KeyListener{
|
||||||
addMouseListener(new MouseAdapter() {
|
addMouseListener(new MouseAdapter() {
|
||||||
public void mousePressed(MouseEvent e) {
|
public void mousePressed(MouseEvent e) {
|
||||||
player.mousePressed(e);
|
player.mousePressed(e);
|
||||||
|
b.mousePressed(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.setPreferredSize(new Dimension(GAME_WIDTH, GAME_HEIGHT));
|
this.setPreferredSize(new Dimension(GAME_WIDTH, GAME_HEIGHT));
|
||||||
|
@ -114,6 +116,7 @@ public class GamePanel extends JPanel implements Runnable, KeyListener{
|
||||||
enemy.get(i).draw(g, enemyFrame);
|
enemy.get(i).draw(g, enemyFrame);
|
||||||
}
|
}
|
||||||
playerFrameCounter += player.draw(g, playerFrame);
|
playerFrameCounter += player.draw(g, playerFrame);
|
||||||
|
b.draw(g);
|
||||||
g.drawString(camera.x+" "+player.y,100,100);
|
g.drawString(camera.x+" "+player.y,100,100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,6 +127,7 @@ public class GamePanel extends JPanel implements Runnable, KeyListener{
|
||||||
for (NonPlayer n: enemy) {
|
for (NonPlayer n: enemy) {
|
||||||
n.move();
|
n.move();
|
||||||
}
|
}
|
||||||
|
b.move();
|
||||||
}
|
}
|
||||||
|
|
||||||
//handles all collision detection and responds accordingly
|
//handles all collision detection and responds accordingly
|
||||||
|
@ -165,7 +169,9 @@ public class GamePanel extends JPanel implements Runnable, KeyListener{
|
||||||
|
|
||||||
//run() method is what makes the game continue running without end. It calls other methods to move objects, check for collision, and update the screen
|
//run() method is what makes the game continue running without end. It calls other methods to move objects, check for collision, and update the screen
|
||||||
public void run(){
|
public void run(){
|
||||||
|
b = new StickyBomb(600, 100, 20, 1,-5);
|
||||||
LevelManager.setLevel(1);
|
LevelManager.setLevel(1);
|
||||||
|
|
||||||
//the CPU runs our game code too quickly - we need to slow it down! The following lines of code "force" the computer to get stuck in a loop for short intervals between calling other methods to update the screen.
|
//the CPU runs our game code too quickly - we need to slow it down! The following lines of code "force" the computer to get stuck in a loop for short intervals between calling other methods to update the screen.
|
||||||
long lastTime = System.nanoTime();
|
long lastTime = System.nanoTime();
|
||||||
double amountOfTicks = 60;
|
double amountOfTicks = 60;
|
||||||
|
|
|
@ -28,6 +28,7 @@ public class GenericSprite extends Rectangle{
|
||||||
HEIGHT = height;
|
HEIGHT = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//called from GamePanel when any keyboard input is detected
|
//called from GamePanel when any keyboard input is detected
|
||||||
//updates the direction of the ball based on user input
|
//updates the direction of the ball based on user input
|
||||||
//if the keyboard input isn't any of the options (d, a, w, s), then nothing happens
|
//if the keyboard input isn't any of the options (d, a, w, s), then nothing happens
|
||||||
|
@ -60,7 +61,25 @@ public class GenericSprite extends Rectangle{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean collide(Tile tile, double x, double y){
|
||||||
|
if(!tile.collision){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(x+WIDTH>tile.x&&x<tile.x+Tile.length&&y-tile.y<Tile.length&&tile.y-y<HEIGHT){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public boolean canUpdate(double x, double y){
|
||||||
|
boolean canUpdate = true;
|
||||||
|
for(Tile i: GamePanel.map){
|
||||||
|
if(collide(i,this.x+x,this.y+y)){
|
||||||
|
canUpdate = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return canUpdate;
|
||||||
|
}
|
||||||
//called frequently from the GamePanel class
|
//called frequently from the GamePanel class
|
||||||
//draws the current location of the ball to the screen
|
//draws the current location of the ball to the screen
|
||||||
public void draw(Graphics g){
|
public void draw(Graphics g){
|
||||||
|
|
|
@ -65,7 +65,7 @@ public class MapReader {
|
||||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/boxes/box.png")));
|
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/boxes/box.png")));
|
||||||
map.get(map.size()-1).collision = false;
|
map.get(map.size()-1).collision = false;
|
||||||
} else if(file.charAt(i)=='!'){
|
} else if(file.charAt(i)=='!'){
|
||||||
enemy.add(new NonPlayer(x, y, GamePanel.slimeSpriteArray, 50, 28));
|
enemy.add(new NonPlayer(x, y, GamePanel.slimeSpriteArray, 50, 28, 100));
|
||||||
|
|
||||||
} else if(file.charAt(i)=='+') {
|
} else if(file.charAt(i)=='+') {
|
||||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/boxes/finish.png")));
|
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/boxes/finish.png")));
|
||||||
|
|
|
@ -18,13 +18,16 @@ public class NonPlayer extends GenericSprite {
|
||||||
|
|
||||||
public int realX;
|
public int realX;
|
||||||
|
|
||||||
|
public int health;
|
||||||
|
|
||||||
|
|
||||||
// private final Sound bump;
|
// private final Sound bump;
|
||||||
|
|
||||||
public BufferedImage[][][] spriteArray;
|
public BufferedImage[][][] spriteArray;
|
||||||
public NonPlayer(int x, int y, BufferedImage[][][] sprites, int npcWidth, int npcHeight) throws UnsupportedAudioFileException, LineUnavailableException, IOException {
|
public NonPlayer(int x, int y, BufferedImage[][][] sprites, int npcWidth, int npcHeight, int health) throws UnsupportedAudioFileException, LineUnavailableException, IOException {
|
||||||
super(x, y, npcHeight, npcWidth);
|
super(x, y, npcHeight, npcWidth);
|
||||||
// bump = new Sound("sound/bump.wav");
|
// bump = new Sound("sound/bump.wav");
|
||||||
|
this.health = health;
|
||||||
spriteArray = sprites;
|
spriteArray = sprites;
|
||||||
// TODO: remove
|
// TODO: remove
|
||||||
this.npcWidth = npcWidth;
|
this.npcWidth = npcWidth;
|
||||||
|
@ -34,15 +37,7 @@ public class NonPlayer extends GenericSprite {
|
||||||
|
|
||||||
xVelocity = 3;
|
xVelocity = 3;
|
||||||
}
|
}
|
||||||
private boolean collide(Tile tile, double x, double y){
|
|
||||||
if(!tile.collision){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if(x+npcWidth>tile.x&&x<tile.x+Tile.length&&y-tile.y<Tile.length&&tile.y-y<npcHeight){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean collidePlayer(Player p){
|
public boolean collidePlayer(Player p){
|
||||||
if(realX+npcWidth>p.x&&realX<p.x+Player.PLAYER_WIDTH&&y-p.y<Player.PLAYER_HEIGHT&&p.y-y<npcHeight){
|
if(realX+npcWidth>p.x&&realX<p.x+Player.PLAYER_WIDTH&&y-p.y<Player.PLAYER_HEIGHT&&p.y-y<npcHeight){
|
||||||
|
@ -50,16 +45,7 @@ public class NonPlayer extends GenericSprite {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
public boolean canUpdate(double x, double y){
|
|
||||||
boolean canUpdate = true;
|
|
||||||
for(Tile i: GamePanel.map){
|
|
||||||
if(collide(i,this.x+x,this.y+y)){
|
|
||||||
canUpdate = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return canUpdate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void update(){
|
public void update(){
|
||||||
realX = x-GamePanel.camera.x;
|
realX = x-GamePanel.camera.x;
|
||||||
|
|
|
@ -78,7 +78,7 @@ public class Player extends GenericSprite {
|
||||||
if(!tile.collision){
|
if(!tile.collision){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(x+PLAYER_WIDTH>tile.realX&&x<tile.realX+Tile.length&&y-tile.y<Tile.length&&tile.y-y<PLAYER_HEIGHT){
|
if(x+WIDTH>tile.realX&&x<tile.realX+Tile.length&&y-tile.y<Tile.length&&tile.y-y<HEIGHT){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
|
||||||
|
public class StickyBomb extends GenericSprite{
|
||||||
|
public int length;
|
||||||
|
|
||||||
|
public int xVelocity;
|
||||||
|
|
||||||
|
public int yVelocity;
|
||||||
|
|
||||||
|
public boolean isMove;
|
||||||
|
|
||||||
|
public int realX;
|
||||||
|
|
||||||
|
public StickyBomb(int x, int y, int length, int xVelocity, int yVelocity){
|
||||||
|
super(x,y,length,length);
|
||||||
|
this.length = length;
|
||||||
|
this.xVelocity = xVelocity;
|
||||||
|
this.yVelocity = yVelocity;
|
||||||
|
isMove = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(){
|
||||||
|
realX = x - GamePanel.camera.x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void move(){
|
||||||
|
update();
|
||||||
|
if(isMove) {
|
||||||
|
if(canUpdate(xVelocity, 0)&&canUpdate(0, yVelocity)&&!canUpdate(xVelocity, yVelocity)){
|
||||||
|
x += -Math.signum(xVelocity);
|
||||||
|
//isMove = false;
|
||||||
|
}
|
||||||
|
if(!canUpdate(xVelocity, 0)){
|
||||||
|
isMove = false;
|
||||||
|
int updateAmount = 0;
|
||||||
|
if(xVelocity>0){
|
||||||
|
while(canUpdate(updateAmount, 0)){
|
||||||
|
updateAmount++;
|
||||||
|
}
|
||||||
|
x+=updateAmount-1;
|
||||||
|
} else if(xVelocity<0){
|
||||||
|
while(canUpdate(updateAmount, 0)){
|
||||||
|
updateAmount--;
|
||||||
|
}
|
||||||
|
x+=updateAmount+1;
|
||||||
|
}
|
||||||
|
xVelocity = 0;
|
||||||
|
}
|
||||||
|
if(!canUpdate(0, yVelocity)){
|
||||||
|
isMove = false;
|
||||||
|
if(yVelocity>0){
|
||||||
|
while(canUpdate(0,1)){
|
||||||
|
y+=1;
|
||||||
|
}
|
||||||
|
isGrounded = true;
|
||||||
|
} else if(yVelocity<0){
|
||||||
|
while(canUpdate(0,-1)){
|
||||||
|
y-=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
yVelocity = 0;
|
||||||
|
}
|
||||||
|
if(canUpdate(xVelocity, yVelocity)) {
|
||||||
|
y = y + (int) yVelocity;
|
||||||
|
x = x + (int) xVelocity;
|
||||||
|
} else {
|
||||||
|
isMove = false;
|
||||||
|
}
|
||||||
|
yVelocity+=3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mousePressed(MouseEvent e){
|
||||||
|
int xx = e.getX();
|
||||||
|
int yy = e.getY();
|
||||||
|
GamePanel.b = new StickyBomb(GamePanel.player.x+GamePanel.camera.x,GamePanel.player.y,35, (xx-GamePanel.player.x-GamePanel.camera.x)/20, (yy-GamePanel.player.y)/10);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void draw(Graphics g){
|
||||||
|
g.drawRect(x-GamePanel.camera.x,y,length,length);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue