java-ascii-game/src/Tiles.java
2024-06-10 13:55:53 +02:00

133 lines
4.2 KiB
Java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
/**
* This keeps and creates the tiles and information around them. Basically the level builder.
*/
public class Tiles implements Drawable {
Fenster window;
Cell[][] tileMap;
float tilewidth;
Talkable old_dude;
Talkable item;
Random rand = new Random();
Character spot;
Character empty;
Character tree;
Character wall;
int num_enemies = 1;
Tiles(Fenster window, float tilewidth) {
this.window = window;
this.tilewidth = tilewidth;
spot = new Character(window, ".", 0, false);
empty = new Character(window, " ");
tree = new Character(window, "A", window.color(10, 200, 10), true);
wall = new Character(window, "#", window.color(132,86,60), true);
}
void settings() {
old_dude = new Talkable(window, "T", window.color(20,20,200), true, new Bubble(window, Arrays.asList("Hey Junge!", "Was machst du hier unten?", "Lass mich dich heilen...")), true);
item = new Talkable(window, "?", window.color(20,20,200), true, new Bubble(window, Arrays.asList("You found an item", "There is probably nothing", "you can do with it right now...")));
tileMap = new Cell[100][100];
for(int i = 0; i < tileMap.length; i++) {
for(int j = 0; j < tileMap[0].length; j++) {
tileMap[i][j] = new Cell(j, i, tilewidth, new Character(spot));//put whatever number you want in
//here and it will insert it instead of 0's
}
}
set(20, 14, new Character(tree));
set(25, 0, new Character(wall));
set(25, 1, new Character(wall));
set(25, 2, new Character(wall));
set(25, 3, new Character(wall));
set(25, 4, new Character(wall));
set(25, 5, new Character(wall));
set(25, 6, new Character(wall));
set(25, 7, new Character(wall));
set(25, 8, new Character(wall));
set(25, 9, new Character(wall));
set(25, 10, new Character(wall));
set(24, 0, new Character(wall));
set(23, 0, new Character(wall));
set(22, 0, new Character(wall));
set(21, 0, new Character(wall));
set(20, 0, new Character(wall));
set(20, 1, new Character(wall));
set(20, 2, new Character(wall));
tileMap[30][30].character = old_dude;
tileMap[10][10].character = new Enemy(window);
tileMap[rand.nextInt(50)][rand.nextInt(50)].character = item;
}
/**
* This will draw all cells and also redraw all talkable cells, to the bubble is displayed on top.
*/
public void draw() {
for(int i = 0; i < tileMap.length; i++) {
for(int j = 0; j < tileMap[0].length; j++) {
enemy_death_check(tileMap[i][j]);
tileMap[i][j].draw();
}
}
ArrayList<Cell> talkables = get(old_dude);
for (Cell i : talkables) {
i.draw();
}
spawn_zombie();
}
public ArrayList<Cell> get(Character type) {
ArrayList<Cell> returns = new ArrayList<Cell>();
for(int i = 0; i < tileMap.length; i++) {
for(int j = 0; j < tileMap[0].length; j++) {
if (tileMap[i][j].character.getClass().equals(type.getClass())) {
returns.add(tileMap[i][j]);
}
}
}
return returns;
}
void enemy_death_check(Cell cell) {
if (cell.character instanceof Enemy) {
if ( ((Enemy) cell.character).health < 1) {
cell.character = new Character(spot);
num_enemies--;
}
}
}
void spawn_zombie() {
if(num_enemies < 3) {
tileMap[rand.nextInt(100)][rand.nextInt(100)].character = new Enemy(window, 20);
num_enemies++;
System.out.println("Number of Zombies: " + num_enemies);
}
}
public Character get(int x,int y) {
return tileMap[y][x].character;
}
public Cell get_cell(int x, int y) {
return tileMap[y][x];
}
public Character set(int x, int y, Character character) {
tileMap[y][x].character = character;
return tileMap[y][x].character;
}
}