ok…
ClASE DOS INIMIGOS=======
public class Inimigos extends Entity{
public boolean right_IN, up_IN, left_IN,down_IN;
public int right_dir_IN=0, up_dir_IN=1, left_dir_IN=3,down_dir_IN=4;
public int dir_IN = down_dir_IN;
public double speed_IN= 2.0;
private int frames_IN =0, maxFrame_IN=7, index_IN =1,maxIndex_IN=2;
private boolean muved_IN = false;
private int mascaraX=16 ,mascaraY=16,mascaraW=30, mascaraH=30;
private BufferedImage[] right_INimigo;
private BufferedImage[] left_INimigo;
private BufferedImage[] up_INimigo;
private BufferedImage[] down_INimigo;
public Inimigos(int x, int y, int widtht, int height, BufferedImage sprite) {
super(x, y, widtht, height, null);
this.right_INimigo = new BufferedImage[3];
this.left_INimigo = new BufferedImage[3];
this.up_INimigo = new BufferedImage[3];
this.down_INimigo = new BufferedImage[3];
for(int i=0; i<3;i++) {
this.right_INimigo [i]=Game.spriteSheet.getSprite(192+(i*64), 128, 64, 64);
this.left_INimigo [i]=Game.spriteSheet.getSprite(192+(i*64), 64, 64, 64);
this.up_INimigo [i]=Game.spriteSheet.getSprite(192+(i*64), 192, 64, 64);
this.down_INimigo [i]=Game.spriteSheet.getSprite(192+(i*64), 0, 64, 64);
}
}
public void tick() {
if(inimigoColideComPlayer()== false) {
if(Game.aliatorio.nextInt(100)<50) {
// primeiro somar 0.5 e depois fazer cast pra int
// é uma forma de arredondar sem usar o Math.round
int playerX = (int) (Game.player.getX() + 0.5);
int playerY = (int) (Game.player.getY() + 0.5);
// primeiro um if-else pra decidir entre mover o inimigo pra direita ou esquerda
if (x < playerX && World.caminhoLivre((int)(x+speed_IN), this.getY())
&& !inimigoColide((int) (x+speed_IN), this.getY())) {
this.dir_IN = right_dir_IN;
x += speed_IN;
} else if (x > playerX && World.caminhoLivre((int)(x-speed_IN), this.getY())
&& !inimigoColide((int) (x-speed_IN), this.getY())) {
this.dir_IN = left_dir_IN;
x -= speed_IN;
}
// depois um if-else pra decidir entre mover o inimigo pra baixo ou pra cima
else if (y < playerY && World.caminhoLivre(this.getX(),(int)(y+speed_IN) )
&& !inimigoColide(this.getX(),(int)(y+speed_IN))) {
this.dir_IN =down_dir_IN;
y += speed_IN;
} else if (y > playerY && World.caminhoLivre(this.getX(),(int)(y-speed_IN) )
&& !inimigoColide(this.getX(),(int)(y-speed_IN))) {
this.dir_IN = up_dir_IN;
y -= speed_IN;
}
if (muved_IN) {
frames_IN++;
if(frames_IN == maxFrame_IN) {
frames_IN=0;
index_IN ++;
if(index_IN >maxIndex_IN) {
index_IN=0;
}
}
}
}
}
else {
if(Game.aliatorio.nextInt(100)<10) {
Game.player.vidaPlayer --;
}
// System.out.println("VIDA: "+Game.player.vidaPlayer);
Game.player.tomandoDano =true;
if(Game.player.vidaPlayer<=0) {
System.exit(1);
}
}
}
=====Classe WORLD
public class World {
private static Tile[] tiles;
public static int WIDTH, HEIGHT;
public static final int TILE_size=64;
public World(String path) {
try {
BufferedImage miniMapa = ImageIO.read(getClass().getResource(path));
int[] pixels = new int[miniMapa.getWidth() * miniMapa.getHeight()];
WIDTH = miniMapa.getWidth();
HEIGHT = miniMapa.getHeight();
tiles = new Tile[miniMapa.getWidth() * miniMapa.getHeight()];
miniMapa.getRGB(0, 0, miniMapa.getWidth(), miniMapa.getHeight(), pixels, 0, miniMapa.getWidth());
for (int xx = 0; xx < miniMapa.getWidth(); xx++) {
for (int yy = 0; yy < miniMapa.getHeight(); yy++) {
int pixelAtual = pixels[xx +(yy * miniMapa.getWidth())];
tiles[xx + (yy * this.WIDTH)]= new TileChao(xx*64,yy*64,Tile.Tile_chao);
// Chão!
if (pixelAtual == 0xff070000) {
tiles[xx+(yy*this.WIDTH)] = new TileChao(xx*64,yy*64,Tile.Tile_chao);
}
// Parede!
else if (pixelAtual == 0xffffffff) {
tiles[xx+(yy*this.WIDTH)] = new TileParede(xx*64,yy*64,Tile.Tile_parede);
}
// Player!
else if (pixelAtual == 0xff0c3ee6) {
Game.player.setX(xx*64);
Game.player.setY(yy*64);
}
// Arma!
else if (pixelAtual == 0xff74685a) {
Game.entities.add(new Arma(xx*64,yy*64,64,64,Entity.Arma));
}
// Muniçãi!
else if (pixelAtual == 0xfffeee00) {
Game.entities.add(new Muniçao(xx*64,yy*64,64,64,Entity.Muniçao));
}
// Vida!!
else if (pixelAtual == 0xff00ff00) {
Game.entities.add(new Potion(xx*64,yy*64,64,64,Entity.Potion_Vida));
}
// Inimigo_1!
else if (pixelAtual == 0xffe90505) {
Inimigos IN = new Inimigos(xx*64,yy*64,64,64,Entity.Inimigo_1);
Game.entities.add(IN);
Game.inimigosLista.add(IN);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static boolean caminhoLivre(int xNext, int yNext) {
int x1 = xNext / TILE_size;
int y1 = yNext / TILE_size;
int x2 = (xNext + TILE_size-1) / TILE_size;
int y2 = yNext / TILE_size;
int x3 = xNext / TILE_size;
int y3 = (yNext + TILE_size-1)/TILE_size;
int x4 = (xNext + TILE_size-1)/TILE_size;
int y4 = (yNext + TILE_size-1)/TILE_size;
return !(tiles[x1+(y1*World.WIDTH)]instanceof TileParede
|| tiles[x2+(y2*World.WIDTH)]instanceof TileParede
|| tiles[x3+(y3*World.WIDTH)]instanceof TileParede
|| tiles[x4+(y4*World.WIDTH)]instanceof TileParede);
}
public void render(Graphics g) {
int xstart = Camera.x >>6;
int ystart = Camera.y >>6;
int xfinal = xstart+(Game.WIDTH >>6)+1;
int yfinal = ystart+(Game.HEIGHT >>6);
for (int xx = xstart; xx <=xfinal; xx++) {
for (int yy = ystart; yy <= yfinal; yy++) {
if(xx<0 || yy< 0 || xx>= WIDTH || yy >= HEIGHT)
continue;
Tile tile = tiles[xx+(yy*WIDTH)];
tile.render(g);
}
}
}
}
ClASE PLAYER====
public class Player extends Entity {
public boolean right, up, left, down;
public int right_dir = 0, up_dir = 1, left_dir = 3, down_dir = 4;
public int dir = down_dir;
public double speed = 3.0;
private int frames = 0, maxFrame = 7, index = 1, maxIndex = 2;
private boolean muved = false;
public double vidaPlayer = 100, vidaMaxima = 100;
public static int muniçao = 0;
public boolean tomandoDano = false;
private int danoFrames = 0;
//private int mascaraX = 16, mascaraY = 16, mascaraW = 30, mascaraH = 30;
private BufferedImage[] right_Player;
private BufferedImage[] left_Player;
private BufferedImage[] up_Player;
private BufferedImage[] down_Player;
private BufferedImage[] right_PlayerDano;
private BufferedImage[] left_PlayerDano;
private BufferedImage[] up_PlayerDano;
private BufferedImage[] down_PlayerDano;
public Player(int x, int y, int widtht, int height, BufferedImage sprite) {
super(x, y, widtht, height, sprite);
this.right_Player = new BufferedImage[3];
this.left_Player = new BufferedImage[3];
this.up_Player = new BufferedImage[3];
this.down_Player = new BufferedImage[3];
for (int i = 0; i < 3; i++) {
this.right_Player[i] = Game.spriteSheet.getSprite(0 + (i * 64), 128, 64, 64);
this.left_Player[i] = Game.spriteSheet.getSprite(0 + (i * 64), 64, 64, 64);
this.up_Player[i] = Game.spriteSheet.getSprite(0 + (i * 64), 192, 64, 64);
this.down_Player[i] = Game.spriteSheet.getSprite(0 + (i * 64), 0, 64, 64);
}
// Player toma dano
this.right_PlayerDano = new BufferedImage[3];
this.left_PlayerDano = new BufferedImage[3];
this.up_PlayerDano = new BufferedImage[3];
this.down_PlayerDano = new BufferedImage[3];
for (int i = 0; i < 3; i++) {
this.right_PlayerDano[i] = Game.spriteSheet.getSprite(0 + (i * 64), 64 * 6, 64, 64);
this.left_PlayerDano[i] = Game.spriteSheet.getSprite(0 + (i * 64), 64 * 5, 64, 64);
this.up_PlayerDano[i] = Game.spriteSheet.getSprite(0 + (i * 64), 64 * 7, 64, 64);
this.down_PlayerDano[i] = Game.spriteSheet.getSprite(0 + (i * 64), 64 * 4, 64, 64);
}
}
public void tick() {
muved = false;
// se precisonasr right
if (right && World.caminhoLivre((int) (x + speed), this.getY())) {
muved = true;
dir = right_dir;
x += speed;
// System.out.println("valor"+x);
} else if (left && World.caminhoLivre((int) (x - speed), this.getY())) {
muved = true;
dir = left_dir;
x -= speed;
} else if (up && World.caminhoLivre(this.getX(), (int) (y - speed))) {
muved = true;
dir = up_dir;
y -= speed;
} else if (down && World.caminhoLivre(this.getX(), (int) (y + speed))) {
muved = true;
dir = down_dir;
y += speed;
}
//
if (muved) {
frames++;
if (frames == maxFrame) {
frames = 0;
index++;
if (index > maxIndex) {
index = 0;
}
}
}
checarColisao_PVida();
checarColisao_Muniçao();
//playColideComParede();
if (tomandoDano) {
danoFrames++;
if (danoFrames == 8) {
danoFrames = 0;
tomandoDano = false;
}
}
if (this.vidaPlayer <= 0) {
Game.entities = new ArrayList<Entity>();
Game.inimigosLista = new ArrayList<Inimigos>();
Game.spriteSheet = new SpreteSheet("/sprites.png");
Game.player = new Player(0, 0, 64, 64, Game.spriteSheet.getSprite(0, 0, 64, 64));
Game.entities.add(Game.player);
Game.world = new World("/MiniMapa.png");
return;
}
Camera.x = Camera.clamp(this.getX() - (Game.WIDTH / 2), 0, World.WIDTH * 64 - Game.WIDTH);
Camera.y = Camera.clamp(this.getY() - (Game.HEIGHT / 2), 0, World.HEIGHT * 64 - Game.HEIGHT);
}