Added Breakable Blocks

master
Chara1236 2022-06-12 14:11:09 -04:00
parent f7b071b624
commit 17d49895f7
9 changed files with 60 additions and 28 deletions

View File

@ -3,16 +3,16 @@ sssssssssssssssssd
sssssssssssssssssd 1 sssssssssssssssssd 1
sssssssssssssssssd sssssssssssssssssd
sssssssssssssssssd sssssssssssssssssd
sssssssssssssssssd 1 1 1 1 1 sssssssssssssssssd 1 1lllllllll1 1 1
sssssssssssssssssd 1 sssssssssssssssssd 1
sssssssssssssssssd sssssssssssssssssd
sssssssssssssssssd qe qe sssssssssssssssssd b ! qe qe
sssssssssssssssssd ad ! ad sssssssssssssssssd bbbbb ad ! ad
sssssssssssssssssd qwe qwe atwwwrd qwwwwwwellllqwwwwwwwe sssssssssssssssssd qwe qwe atwwwrd qwwwwwwellllqwwwwwwwe
sssssssssssssssssd asd asd zxxxxxc zxxxxxxxllllxxxxxxxxc sssssssssssssssssd asd asd zxxxxxc zxxxxxxxllllxxxxxxxxc
sssssssssssssssssd 1 zxc zxc vvvvvvvvwwwwvvvvvvvvv sssssssssssssssssd 1 zxc zxc vvvvvvvvwwwwvvvvvvvvv
sssssssssssssssssd qe vvvvvvvvvvvvvvvvvvvvv sssssssssssssssssd qe vvvvvvvvvvvvvvvvvvvvv
sssssssssssssssssdlllllad qwwwwwwwwe vvvvvvvvvvvvvvvvvvvvv sssssssssssssssssdlllllad qwwwwwwwwe vvvvvvvvvvvvvvvvvvvvv
sssssssssssssssssdlllllad qrsssslssstwe vvvvvvvvvvvvvvvvvvvvv sssssssssssssssssdlllllad qrsssslssstwe vvvvvvvvvvvvvvvvvvvvv
sssssssssssssssssdlllllad qwwrssssllssssstwe !!! qwe vvvvvvvvvvvvvvvvvvvvv + sssssssssssssssssdllllladbb qwwrssssllssssstwe !!! qwe vvvvvvvvvvvvvvvvvvvvv +
ssssssssssssssssstwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrsssssssssssssssstwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrstwwwwwwwwwwwwwwwwwwwwwwwwwwwwww3 ssssssssssssssssstwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrsssssssssssssssstwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrstwwwwwwwwwwwwwwwwwwwwwwwwwwwwww3

View File

@ -1,18 +1,18 @@
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

View File

@ -4,6 +4,8 @@ import java.awt.image.BufferedImage;
public class BombDirectionShow extends StickyBomb{ public class BombDirectionShow extends StickyBomb{
public BombDirectionShow(int x, int y, int xVelocity, int yVelocity) { public BombDirectionShow(int x, int y, int xVelocity, int yVelocity) {
super(x, y, xVelocity, yVelocity, null, null); super(x, y, xVelocity, yVelocity, null, null);
WIDTH = 25;
HEIGHT = 25;
} }
public void draw(Graphics g){ public void draw(Graphics g){

View File

@ -50,7 +50,6 @@ public class GamePanel extends JPanel implements Runnable, KeyListener{
public static ArrayList<Tile>particleTiles = new ArrayList<Tile>(); public static ArrayList<Tile>particleTiles = new ArrayList<Tile>();
public static ArrayList<NonPlayer>enemy = new ArrayList<NonPlayer>(); public static ArrayList<NonPlayer>enemy = new ArrayList<NonPlayer>();
public static ArrayList<StickyBomb>bombs = new ArrayList<>(); public static ArrayList<StickyBomb>bombs = new ArrayList<>();
public BombDirectionShow bombDir = null; public BombDirectionShow bombDir = null;
public static ArrayList<Particle>particles = new ArrayList<Particle>(); public static ArrayList<Particle>particles = new ArrayList<Particle>();
@ -204,8 +203,10 @@ public class GamePanel extends JPanel implements Runnable, KeyListener{
(player.mouseX - GamePanel.player.x) / 20, (player.mouseY - GamePanel.player.y) / 10); (player.mouseX - GamePanel.player.x) / 20, (player.mouseY - GamePanel.player.y) / 10);
bombDir.draw(g); bombDir.draw(g);
} }
g.drawString(camera.x+" "+((camera.x+GAME_WIDTH)/Tile.length)+" "+player.leftMouseDown,100,100); // g.drawString(camera.x+" "+((camera.x+GAME_WIDTH)/Tile.length)+" "+player.leftMouseDown,100,100);
g.drawImage(bomb,20,20,35,35,null);
g.drawString("X"+LevelManager.bombs,60,40);
if (isPaused) { if (isPaused) {
g.setColor(new Color(255, 255, 255, 100)); g.setColor(new Color(255, 255, 255, 100));
g.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT); g.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);

View File

@ -8,20 +8,27 @@ public class LevelManager {
public static int ySpawn = 600; public static int ySpawn = 600;
public static String filePath; public static String filePath;
public static int bombs;
public static void setLevel(int level){ public static void setLevel(int level){
GamePanel.player.yVelocity = 0;
GamePanel.player.xVelocity = 0;
LevelManager.level = level; LevelManager.level = level;
if(level == 1){ if(level == 1){
xSpawn = 0; xSpawn = 0;
ySpawn = 300; ySpawn = 300;
filePath = "saves/Level1.txt"; filePath = "saves/Level1.txt";
bombs = 99999;
} else if(level == 2){ } else if(level == 2){
xSpawn = 200; xSpawn = 200;
ySpawn = 0; ySpawn = 0;
filePath = "saves/Level2.txt"; filePath = "saves/Level2.txt";
bombs = 2;
} else if(level == 3){ } else if(level == 3){
xSpawn = 200; xSpawn = 200;
ySpawn = 0; ySpawn = 0;
filePath = "saves/Level3.txt"; filePath = "saves/Level3.txt";
bombs = 99329;
} }
try { try {
MapReader.inputMap(filePath); MapReader.inputMap(filePath);
@ -32,7 +39,7 @@ public class LevelManager {
} catch (LineUnavailableException e) { } catch (LineUnavailableException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
GamePanel.player.reset(); //GamePanel.player.reset();
} }
public static void nextLevel(){ public static void nextLevel(){
setLevel(level+1); setLevel(level+1);

View File

@ -59,7 +59,6 @@ public class MapReader {
newTile("img/tiles/terrain/grassMiddleLeft.png"); newTile("img/tiles/terrain/grassMiddleLeft.png");
} else if(file.charAt(i)=='s'){ } else if(file.charAt(i)=='s'){
newTile("img/tiles/terrain/grassCenter.png"); newTile("img/tiles/terrain/grassCenter.png");
GamePanel.map[x][y].collision = false;
} else if(file.charAt(i)=='d'){ } else if(file.charAt(i)=='d'){
newTile("img/tiles/terrain/grassMiddleRight.png"); newTile("img/tiles/terrain/grassMiddleRight.png");
} else if(file.charAt(i)=='z'){ } else if(file.charAt(i)=='z'){
@ -78,7 +77,7 @@ public class MapReader {
newTile("img/tiles/terrain/cornerBottomRight.png"); newTile("img/tiles/terrain/cornerBottomRight.png");
} else if(file.charAt(i)=='b'){ } else if(file.charAt(i)=='b'){
newTile("img/tiles/boxes/box.png"); newTile("img/tiles/boxes/box.png");
GamePanel.map[x][y].collision = false; GamePanel.map[x][y].breakable = true;
} else if(file.charAt(i)=='!'){ } else if(file.charAt(i)=='!'){
GamePanel.enemy.add(new NonPlayer(TileX, TileY, GamePanel.slimeSpriteArray, 50, 28, 100)); GamePanel.enemy.add(new NonPlayer(TileX, TileY, GamePanel.slimeSpriteArray, 50, 28, 100));

View File

@ -104,6 +104,7 @@ public class Player extends GenericSprite {
if (collide(GamePanel.map[i][j], this.x + x, this.y + y)) { if (collide(GamePanel.map[i][j], this.x + x, this.y + y)) {
if (GamePanel.map[i][j].isFinish) { if (GamePanel.map[i][j].isFinish) {
LevelManager.nextLevel(); LevelManager.nextLevel();
GamePanel.player.reset();
return true; return true;
} }
if (GamePanel.map[i][j].kills) { if (GamePanel.map[i][j].kills) {
@ -204,6 +205,7 @@ public class Player extends GenericSprite {
} }
public void reset(){ public void reset(){
LevelManager.setLevel(LevelManager.level);
GamePanel.camera.x = LevelManager.xSpawn; GamePanel.camera.x = LevelManager.xSpawn;
y = LevelManager.ySpawn; y = LevelManager.ySpawn;
} }
@ -228,7 +230,8 @@ public class Player extends GenericSprite {
mouseY = e.getY(); mouseY = e.getY();
if(e.getButton()==MouseEvent.BUTTON1) { if(e.getButton()==MouseEvent.BUTTON1) {
leftMouseDown = false; leftMouseDown = false;
if (GamePanel.bombs.size() < 3) { if (GamePanel.bombs.size() < 3 && LevelManager.bombs>0) {
LevelManager.bombs--;
GamePanel.bombs.add(new StickyBomb(GamePanel.player.x + GamePanel.camera.x + WIDTH/2, GamePanel.player.y+HEIGHT/2, GamePanel.bombs.add(new StickyBomb(GamePanel.player.x + GamePanel.camera.x + WIDTH/2, GamePanel.player.y+HEIGHT/2,
(mouseX - GamePanel.player.x) / 20, (mouseY - GamePanel.player.y) / 10, GamePanel.bomb, GamePanel.explosionArray)); (mouseX - GamePanel.player.x) / 20, (mouseY - GamePanel.player.y) / 10, GamePanel.bomb, GamePanel.explosionArray));
} }
@ -241,7 +244,7 @@ public class Player extends GenericSprite {
} }
} }
public int draw(Graphics g, int frame) { public int draw(Graphics g, int frame) {
g.drawString(mouseX+" "+mouseY, 300, 300); //g.drawString(mouseX+" "+mouseY, 300, 300);
frame %= spriteArray[0][0].length; frame %= spriteArray[0][0].length;
if (!upPressed && !downPressed && !leftPressed && !rightPressed) { if (!upPressed && !downPressed && !leftPressed && !rightPressed) {
g.drawImage(spriteArray[lastXDirection][lastYDirection][0], x-10, y, null); g.drawImage(spriteArray[lastXDirection][lastYDirection][0], x-10, y, null);

View File

@ -66,6 +66,23 @@ public class StickyBomb extends GenericSprite{
} }
} }
int lowX = Math.max(0, ((x+GamePanel.GAME_WIDTH)/Tile.length)-4);
int highX = Math.min(lowX + 8, GamePanel.map.length);
int lowY = Math.max(0,(this.y/Tile.length)-6);
int highY = Math.min(lowY + 12, GamePanel.map[0].length);
for(int i=0; i<100; i++) {
for (int j = lowY; j < highY; j++) {
if (GamePanel.map[i][j] != null && GamePanel.map[i][j].breakable) {
double disX = (x + WIDTH / 2) - (GamePanel.map[i][j].x + Tile.length / 2);
double disY = (y + HEIGHT / 2) - (GamePanel.map[i][j].y + Tile.length / 2);
if (Math.sqrt(disX * disX + disY * disY) < Tile.length * 5) {
GamePanel.map[i][j] = null;
}
}
}
}
} }
public boolean collide(Tile tile, double x, double y){ public boolean collide(Tile tile, double x, double y){

View File

@ -11,6 +11,8 @@ public class Tile {
public boolean isFinish; public boolean isFinish;
public boolean kills; public boolean kills;
public boolean breakable;
public int realX; public int realX;
public static final int length = 35; public static final int length = 35;
public Tile(int x, int y){ public Tile(int x, int y){
@ -20,6 +22,7 @@ public class Tile {
this.x = x; this.x = x;
this.y = y; this.y = y;
nonBombCollide = false; nonBombCollide = false;
breakable = false;
} }
public void update(){ public void update(){
realX = x-GamePanel.camera.x; realX = x-GamePanel.camera.x;