Prechádzať zdrojové kódy

Custom maps and size adjustments

frans 8 rokov pred
rodič
commit
6173be7401

+ 1 - 1
pom.xml

@@ -3,7 +3,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>eu.tankernn.breakout</groupId>
 	<artifactId>breakout</artifactId>
-	<version>0.0.1-SNAPSHOT</version>
+	<version>0.0.1</version>
 	<name>Breakout</name>
 	<description>A simple Breakout-clone.</description>
 

+ 8 - 0
res/maps/0.map

@@ -0,0 +1,8 @@
+XXXXXXXXXXXXXX
+XXXXXXXXXXXXXX
+XXXXXXXXXXXXXX
+XXXXXXXXXXXXXX
+XXXXXXXXXXXXXX
+XXXXXXXXXXXXXX
+XXXXXXXXXXXXXX
+XXXXXXXXXXXXXX

+ 8 - 0
res/maps/1.map

@@ -0,0 +1,8 @@
+00000000000000
+XX000000000000
+XXXX0000000000
+XXXXXX00000000
+XXXXXXXX000000
+XXXXXXXXXX0000
+XXXXXXXXXXXX00
+SSSSSSSSSSSSSXX

+ 1 - 1
src/main/java/eu/tankernn/breakout/Ball.java

@@ -19,7 +19,7 @@ public class Ball extends Entity2D {
 	private int unlockKey;
 
 	public Ball(Texture texture, Pad p1, List<Block> blocks, int unlockKey) {
-		super(texture, new Vector2f(0, 0), new Vector2f(0.03f, 0.03f));
+		super(texture, new Vector2f(0, 0), new Vector2f(0.01f, 0.01f));
 		this.pad = p1;
 		this.blocks = blocks;
 		locked = true;

+ 44 - 10
src/main/java/eu/tankernn/breakout/Breakout.java

@@ -3,7 +3,9 @@ package eu.tankernn.breakout;
 import static org.lwjgl.opengl.GL11.glClear;
 import static org.lwjgl.opengl.GL11.glClearColor;
 
+import java.io.BufferedReader;
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -17,6 +19,7 @@ import eu.tankernn.gameEngine.TankernnGame;
 import eu.tankernn.gameEngine.loader.textures.Texture;
 import eu.tankernn.gameEngine.renderEngine.gui.GuiRenderer;
 import eu.tankernn.gameEngine.renderEngine.gui.GuiTexture;
+import eu.tankernn.gameEngine.util.InternalFile;
 
 public class Breakout extends TankernnGame {
 
@@ -29,10 +32,11 @@ public class Breakout extends TankernnGame {
 	private Texture steel;
 
 	private List<Block> blocks = new ArrayList<Block>();
-
 	private Ball ball;
 	private Pad pad;
 
+	private int mapIndex = 1;
+
 	public Breakout() {
 		super(GAME_NAME);
 
@@ -55,25 +59,22 @@ public class Breakout extends TankernnGame {
 			return;
 		}
 
-		// Setup blocks
-		// TODO Load custom maps from files
-		int i = 0;
-		for (int x = 0; x < Block.COLUMNS; x++)
-			for (int y = 0; y < Block.ROWS; y++) {
-				blocks.add(new Block(colors[i++], x, y));
-				i %= colors.length;
-			}
-
 		// Ball + pad
 
 		pad = new Pad(white, new Vector2f(0, -0.8f), Keyboard.KEY_LEFT, Keyboard.KEY_RIGHT);
 		ball = new Ball(white, pad, blocks, Keyboard.KEY_SPACE);
 
+		// Setup blocks
+		nextMap();
+
 	}
 
 	public void update() {
 		blocks.removeIf(b -> !b.isAlive());
 
+		if (blocks.isEmpty())
+			nextMap();
+
 		pad.update();
 		ball.update();
 	}
@@ -95,6 +96,39 @@ public class Breakout extends TankernnGame {
 		super.render();
 	}
 
+	private void nextMap() {
+		try {
+			loadMap(new InternalFile("/maps/" + mapIndex++ + ".map"));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	private void loadMap(InternalFile file) throws IOException {
+		blocks.clear();
+		BufferedReader read = file.getReader();
+		int colorCount = 0;
+		for (int y = Block.ROWS; 0 < y; y--) {
+			String row = read.readLine();
+			for (int x = 0; x < Block.COLUMNS; x++) {
+				Block blk;
+				switch (row.charAt(x)) {
+				case 'X':
+					blk = new Block(colors[colorCount++], x, y);
+					colorCount %= colors.length;
+					break;
+				case 'S':
+					blk = new Block(steel, x, y).setHealth(2);
+					break;
+				case '0':
+				default:
+					continue;
+				}
+				blocks.add(blk);
+			}
+		}
+	}
+
 	public void cleanUp() {
 		renderer.cleanUp();
 		super.cleanUp();

+ 1 - 1
src/main/java/eu/tankernn/breakout/Pad.java

@@ -13,7 +13,7 @@ public class Pad extends Entity2D {
 	private int leftKey, rightKey;
 
 	public Pad(Texture texture, Vector2f position, int leftKey, int rightKey) {
-		super(texture, position, new Vector2f(0.3f, 0.02f));
+		super(texture, position, new Vector2f(0.15f, 0.02f));
 		this.leftKey = leftKey;
 		this.rightKey = rightKey;
 	}