diff --git a/res/levels/test.txt b/res/levels/test.txt new file mode 100644 index 0000000..0d9df1a --- /dev/null +++ b/res/levels/test.txt @@ -0,0 +1,7 @@ +test +1 1 1 1 1 1 +1 1 1 1 1 1 +1 1 1 1 1 1 +1 1 1 1 1 1 +1 1 1 1 1 1 +1 1 1 1 1 1 \ No newline at end of file diff --git a/src/Game.java b/src/Game.java deleted file mode 100644 index 61eb139..0000000 --- a/src/Game.java +++ /dev/null @@ -1,3 +0,0 @@ -public class Game { - -} diff --git a/src/entities/Entity.java b/src/entities/Entity.java new file mode 100644 index 0000000..2c8ff67 --- /dev/null +++ b/src/entities/Entity.java @@ -0,0 +1,6 @@ +package entities; + +public abstract class Entity { + + public abstract void tick(); +} diff --git a/src/entities/EntityHandler.java b/src/entities/EntityHandler.java new file mode 100644 index 0000000..a6c517b --- /dev/null +++ b/src/entities/EntityHandler.java @@ -0,0 +1,5 @@ +package entities; + +public class EntityHandler { + +} diff --git a/src/game/Game.java b/src/game/Game.java new file mode 100644 index 0000000..690af3c --- /dev/null +++ b/src/game/Game.java @@ -0,0 +1,22 @@ +package game; + +import javax.swing.JFrame; +import gfx.Screen; +import level.LevelHandler; + +public class Game extends JFrame{ + + private Screen screen; + + public Game() { + setSize(800, 600); + setTitle(screen.getLevelName()); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLocationRelativeTo(null); + setVisible(true); + } + + public void setLevel(LevelHandler newLevel) { + screen = new Screen(newLevel); + } +} diff --git a/src/InputHandler.java b/src/game/InputHandler.java similarity index 68% rename from src/InputHandler.java rename to src/game/InputHandler.java index 7c918da..37b854e 100644 --- a/src/InputHandler.java +++ b/src/game/InputHandler.java @@ -1,3 +1,4 @@ +package game; public class InputHandler { } diff --git a/src/game/Launcher.java b/src/game/Launcher.java new file mode 100644 index 0000000..502c9ea --- /dev/null +++ b/src/game/Launcher.java @@ -0,0 +1,13 @@ +package game; + +import level.LevelHandler; + +public class Launcher { + + public static void main(String[] args) { + //new Menu().run(); + + // Testing file loading + LevelHandler test = new LevelHandler("res/levels/test.txt"); + } +} diff --git a/src/MouseHandler.java b/src/game/MouseHandler.java similarity index 68% rename from src/MouseHandler.java rename to src/game/MouseHandler.java index 8c02268..520cfca 100644 --- a/src/MouseHandler.java +++ b/src/game/MouseHandler.java @@ -1,3 +1,4 @@ +package game; public class MouseHandler { } diff --git a/src/WindowHandler.java b/src/game/WindowHandler.java similarity index 69% rename from src/WindowHandler.java rename to src/game/WindowHandler.java index f04ea83..4e24ec3 100644 --- a/src/WindowHandler.java +++ b/src/game/WindowHandler.java @@ -1,3 +1,4 @@ +package game; public class WindowHandler { } diff --git a/src/gfx/Screen.java b/src/gfx/Screen.java new file mode 100644 index 0000000..45ee275 --- /dev/null +++ b/src/gfx/Screen.java @@ -0,0 +1,23 @@ +package gfx; + +import java.awt.Dimension; +import javax.swing.JPanel; +import level.LevelHandler; + +// This class will contain and render a specific level/entities +// The game.Game class will contain one screen at a time to display that level. +public class Screen extends JPanel { + + private String levelName; + private LevelHandler level; + + public Screen(LevelHandler level) { + this.level = level; + this.setPreferredSize(new Dimension(700, 600)); + } + + public String getLevelName() { + return levelName; + } + +} diff --git a/src/level/LevelHandler.java b/src/level/LevelHandler.java index e9d3fa0..628c206 100644 --- a/src/level/LevelHandler.java +++ b/src/level/LevelHandler.java @@ -1,11 +1,20 @@ package level; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.List; +import entities.Entity; +import level.tiles.Tile; + +// Creates and manages the level when the game is running. public class LevelHandler { - private Integer[] tiles; + private Tile[][] tiles; + private List entities; private int width; private int height; - + private String levelName; private String levelPath; public LevelHandler(String levelPath) { @@ -15,7 +24,32 @@ public class LevelHandler { } } + // TODO: Change this to use and XML file instead of a text file private void loadLevelFromFile() { - + try { + FileReader fileReader = new FileReader(levelPath); + BufferedReader bufferedReader = new BufferedReader(fileReader); + levelName = bufferedReader.readLine(); + + bufferedReader.close(); + } catch (IOException e) { + System.err.println(e.getMessage()); + } + } + + public void tick() { + for (Tile[] tileArray : tiles) { + for (Tile t : tileArray) { + t.tick(); + } + } + + for (Entity e : entities) { + e.tick(); + } + } + + public String getLevelName() { + return levelName; } } diff --git a/src/level/tiles/SmoothFloor.java b/src/level/tiles/SmoothFloor.java new file mode 100644 index 0000000..9695e8b --- /dev/null +++ b/src/level/tiles/SmoothFloor.java @@ -0,0 +1,25 @@ +package level.tiles; + +import java.awt.Color; + +public class SmoothFloor extends Tile{ + + private float friction = 1; + + public SmoothFloor() { + super(1, true, false, Color.gray); + } + + public void tick() { + + } + + public void render() { + + } + + public float getFriction() { + return friction; + } + +} diff --git a/src/level/tiles/Tile.java b/src/level/tiles/Tile.java index b198b11..20504c1 100644 --- a/src/level/tiles/Tile.java +++ b/src/level/tiles/Tile.java @@ -1,17 +1,25 @@ package level.tiles; +import java.awt.Color; + public abstract class Tile { protected int id; protected boolean isFloor; protected boolean isWall; - private int color; - - public Tile(int id, boolean isFloor, boolean isWall, int color) { + private Color color; + + // Contains all tiles in the game, where the index is the tile ID. + private Tile[] gameTiles = new Tile[32]; + + public Tile(int id, boolean isFloor, boolean isWall, Color color) { this.id = id; this.isFloor = isFloor; this.isWall = isWall; this.color = color; + + // Populate this with all tiles that exist +// gameTiles[1] = } public int getId() { @@ -26,8 +34,11 @@ public abstract class Tile { return isWall; } +// public Tile getTile(int tileID) { +// +// } + public abstract void tick(); - //Not sure what needs to be passed in here just yet, will become apparent when the rendering is closer to being done. public abstract void render(); } diff --git a/src/menu/Menu.java b/src/menu/Menu.java new file mode 100644 index 0000000..83d9bc9 --- /dev/null +++ b/src/menu/Menu.java @@ -0,0 +1,24 @@ +package menu; + +import java.io.FileNotFoundException; +import java.io.IOException; + +import game.Game; +import level.LevelHandler; + +public class Menu { + + // Will display options. This is the main menu. + // Currently jumps right to a game. + public void run() throws IOException{ + Game game = new Game(); + // Show menu options here + + // Control flow to select level, game modes, etc. + + // Pretend a test level was selected + LevelHandler chosenLevel = new LevelHandler("/res/test.txt"); + game.setLevel(chosenLevel); + } + +}