O jogo funciona basicamente dentro de duas funções:
tick()
e render()
é responsavel por atualizar a todo instante o jogo.
é responsavel por renderizar todo o gráfico do jogo.
Bibliotecas mais importantes:
- java.awt.Color
- java.awt.Graphics
- java.awt.Graphics2D
- java.awt.event.KeyListener
- java.awt.event.MouseListener
- java.awt.image.DataBuffer
- java.awt.image.BufferedImage
O mapa do jogo é carregado por uma imagem com alguns pixels, e uma classe verifica as cores e correspondentes por uma imagem do spritesheet.
public World(String path) {
try {
BufferedImage map = ImageIO.read(getClass().getResource(path));
int[] pixels = new int[map.getWidth() * map.getHeight()];
tiles = new Tile[map.getWidth() * map.getHeight()];
WIDTH = map.getWidth();
HEIGHT = map.getHeight();
map.getRGB(0, 0, map.getWidth(), map.getHeight(), pixels, 0, map.getWidth());
for (int xx = 0; xx < map.getWidth(); xx++) {
for (int yy = 0; yy < map.getHeight(); yy++) {
int pixel_atual = pixels[xx + (yy * map.getWidth())];
tiles[xx + (yy * WIDTH)] = new FloorTile(xx * 16, yy * 16, Tile.TILE_FLOOR);
if(pixel_atual == 0xFF000000){
// Floor (chao)
tiles[xx + (yy * WIDTH)] = new FloorTile(xx * 16, yy * 16, Tile.TILE_FLOOR);
} else if(pixel_atual == 0xFFFFFFFF){
// Wall (parede)
tiles[xx + (yy * WIDTH)] = new WallTile(xx * 16, yy * 16, Tile.TILE_WALL);
} else if(pixel_atual == 0xFF0026FF){
// player
Game.player.setX(xx * 16);
Game.player.setY(yy * 16);
} else if(pixel_atual == 0xFFFF0000){
// enemy
Enemy en = new Enemy(xx * 16, yy * 16, 16, 16, Entity.ENEMY_EN);
Game.entities.add(en);
Game.enemies.add(en);
} else if(pixel_atual == 0xFFFF6A00){
// weapon
Game.entities.add(new Weapon(xx * 16, yy * 16, 16, 16, Entity.WEAPON_EN));
} else if(pixel_atual == 0xFFFF7F7F){
// life pack
// Game.entities.add(new Lifepack(xx*16, yy*16, 16, 16, Entity.LIFEPACK_EN));
Lifepack pack = new Lifepack(xx * 16, yy * 16, 16, 16, Entity.LIFEPACK_EN);
pack.setMask(8, 8, 8, 8);
Game.entities.add(pack);
}else if(pixel_atual == 0xFFFFD800){
// bullet
Game.entities.add(new Bullet(xx * 16, yy * 16, 16, 16, Entity.BULLET_EN));
}else if(pixel_atual == 0xFF4800FF){
// enemy
Enemy2 ene = new Enemy2(xx * 16, yy * 16, 16, 16, Entity.ENEMY2_EN);
Game.entities.add(ene);
Game.enemies2.add(ene);
} else if(pixel_atual == 0xFFFF72FA){
// boss
Enemy_boss boss = new Enemy_boss(xx * 16, yy * 16, 32, 32, Entity.BOSS_EN);
Game.entities.add(boss);
Game.boss.add(boss);
}
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
O jogo ainda não foi terminado, ainda estou aprendendo e testando novas features!
Fábio Filho 🚀
Este projeto esta sobe a licença MIT.
Feito com ❤️ por Fábio Filho 👋🏽 Entre em contato!