changed tile array to three-dimensional array (i0=map; i1=col; i2=row)

This commit is contained in:
2025-12-12 12:52:50 +01:00
parent 5dd43b6f9d
commit 67309a6e28
9 changed files with 161 additions and 16 deletions

View File

@@ -1,6 +1,7 @@
package de.miaurizius.jgame2d.core;
import de.miaurizius.jgame2d.core.enums.GameState;
import de.miaurizius.jgame2d.core.enums.Map;
import de.miaurizius.jgame2d.core.handlers.*;
import de.miaurizius.jgame2d.entity.Entity;
import de.miaurizius.jgame2d.entity.Player;
@@ -37,7 +38,7 @@ public class GamePanel extends JPanel implements Runnable {
// WORLD SETTINGS
public final int maxWorldCol = 50;
public final int maxWorldRow = 50;
public final String currentMap = "testmap2";
public final Map currentMap = Map.OVERWORLD;
//FPS
final int FPS = 60;

View File

@@ -0,0 +1,23 @@
package de.miaurizius.jgame2d.core.enums;
public enum Map {
OVERWORLD("world3", 0),
HUT("hut", 1);
private final String name;
private final int index;
Map(String name, int index) {
this.name = name;
this.index = index;
}
public String getName() {
return name;
}
public int getIndex() {
return index;
}
}

View File

@@ -84,6 +84,18 @@ public class AssetSetter {
panel.iTile[i] = new DryTreeTI(panel,31,12);i++;
panel.iTile[i] = new DryTreeTI(panel,32,12);i++;
panel.iTile[i] = new DryTreeTI(panel,33,12);i++;
panel.iTile[i] = new DryTreeTI(panel,18,40);i++;
panel.iTile[i] = new DryTreeTI(panel,17,40);i++;
panel.iTile[i] = new DryTreeTI(panel,16,40);i++;
panel.iTile[i] = new DryTreeTI(panel,15,40);i++;
panel.iTile[i] = new DryTreeTI(panel,14,40);i++;
panel.iTile[i] = new DryTreeTI(panel,13,40);i++;
panel.iTile[i] = new DryTreeTI(panel,13,41);i++;
panel.iTile[i] = new DryTreeTI(panel,12,41);i++;
panel.iTile[i] = new DryTreeTI(panel,11,41);i++;
panel.iTile[i] = new DryTreeTI(panel,10,41);i++;
panel.iTile[i] = new DryTreeTI(panel,10,40);i++;
}
}

View File

@@ -28,26 +28,26 @@ public class CollisionHandler {
switch(entity.direction) {
case UP:
entityTopRow = (entityTopWorldY - entity.speed)/panel.tileSize;
tileNum1 = panel.tileM.mapTileNum[entityLeftCol][entityTopRow];
tileNum2 = panel.tileM.mapTileNum[entityRightCol][entityTopRow];
tileNum1 = panel.tileM.mapTileNum[panel.currentMap.getIndex()][entityLeftCol][entityTopRow];
tileNum2 = panel.tileM.mapTileNum[panel.currentMap.getIndex()][entityRightCol][entityTopRow];
if(panel.tileM.tile[tileNum1].collision || panel.tileM.tile[tileNum2].collision) entity.collisionOn = true;
break;
case DOWN:
entityBottomRow = (entityBottomWorldY + entity.speed)/panel.tileSize;
tileNum1 = panel.tileM.mapTileNum[entityLeftCol][entityBottomRow];
tileNum2 = panel.tileM.mapTileNum[entityRightCol][entityBottomRow];
tileNum1 = panel.tileM.mapTileNum[panel.currentMap.getIndex()][entityLeftCol][entityBottomRow];
tileNum2 = panel.tileM.mapTileNum[panel.currentMap.getIndex()][entityRightCol][entityBottomRow];
if(panel.tileM.tile[tileNum1].collision || panel.tileM.tile[tileNum2].collision) entity.collisionOn = true;
break;
case LEFT:
entityLeftCol = (entityLeftWorldX - entity.speed)/panel.tileSize;
tileNum1 = panel.tileM.mapTileNum[entityLeftCol][entityTopRow];
tileNum2 = panel.tileM.mapTileNum[entityLeftCol][entityBottomRow];
tileNum1 = panel.tileM.mapTileNum[panel.currentMap.getIndex()][entityLeftCol][entityTopRow];
tileNum2 = panel.tileM.mapTileNum[panel.currentMap.getIndex()][entityLeftCol][entityBottomRow];
if(panel.tileM.tile[tileNum1].collision || panel.tileM.tile[tileNum2].collision) entity.collisionOn = true;
break;
case RIGHT:
entityRightCol = (entityRightWorldX + entity.speed)/panel.tileSize;
tileNum1 = panel.tileM.mapTileNum[entityRightCol][entityTopRow];
tileNum2 = panel.tileM.mapTileNum[entityRightCol][entityBottomRow];
tileNum1 = panel.tileM.mapTileNum[panel.currentMap.getIndex()][entityRightCol][entityTopRow];
tileNum2 = panel.tileM.mapTileNum[panel.currentMap.getIndex()][entityRightCol][entityBottomRow];
if(panel.tileM.tile[tileNum1].collision || panel.tileM.tile[tileNum2].collision) entity.collisionOn = true;
break;
}

View File

@@ -172,6 +172,7 @@ public class KeyHandler implements KeyListener {
case KeyEvent.VK_SPACE:
if(panel.ui.commandNum == 0) {
panel.gameState = GameState.PLAY;
panel.playMusic(0);
panel.retry();
}
if(panel.ui.commandNum == 1) {