package de.numpad.demo;
import de.numpad.framework.Frapp;
import de.numpad.framework.gui.Display;
import de.numpad.framework.gui.Fonts;
import de.numpad.framework.gui.elements.Button;
public class LevelNoStates extends Frapp {
private static final long serialVersionUID = 10L;
public Level level; // Very important: Instance of the abstract class
// Since TestLevel1 and TestLevel2 both extend Level, they are in _general_ the same.
public void start() {
Display.size(20 * (Level.TILESIZE+1), 10 * (Level.TILESIZE +1) + 100);
level = new TestLevel1(); // Instantiate level as TestLevel1
GUI.add(new Button(10, Display.height - 90, 210, 60, "Change World", 2) {
public void onCreate() {
this.font = Fonts.thin_dark;
}
public void onClick(int button) {
if (level.id == 1) { // If the current level is 1
level = new TestLevel2(); // change it to 2
} else if (level.id == 2) { // If the current level is 2
level = new TestLevel1(); // change it to 1
}
}
});
}
public void render() {
Display.background(51);
Display.smooth();
level.display(); // render the level, both levels could be rendered totally different, if you want to do so.
Display.GUI();
}
public static void main(String[] args) {
Frapp.build(new LevelNoStates(), "Levels");
}
}
abstract class Level { // An abstract class is important, it is the base frame of the level
public int[][] block; // hold a 2 dimensional array of ints representing blocks
public int width, height; // how wide and high the level is
public int id = -1; // the current id of the level, used to differentiate the levels
public static final int TILESIZE = 32; // the normal size per tile, change it if you want to ;)
public static final int BLOCK_AIR = 0, BLOCK_SOLID = 1; // the block types
public Level(int width, int height) { // a basic constructor
this.width = width;
this.height = height;
block = new int[width][height]; // initialize the array
}
public void display() {
for (int x = 0; x < width; x++) { // for every row...
for (int y = 0; y < height; y++) { // ...check each part in the column...
Display.color(45 + 200 * block[x][y]); // ...and set the color depending on the tile id.
Display.fill();
Display.rect(x * (TILESIZE +1), y * (TILESIZE +1), TILESIZE, TILESIZE); // draw a rect for each block.
}
}
}
}
class TestLevel1 extends Level { // important! the Level needs to extend the base frame, or "use its form"
public TestLevel1() {
super(20, 10); // call the constructor -> set width and height and initialize the blocks
this.id = 1; // id for each level: TestLevel1 has the id 1, and I think you can guess about TestLevel2. Right, 2!
for (int x = 0; x < width; x++) {
block[x][4] = BLOCK_SOLID; // Set every block in the 4th row solid.
}
}
}
class TestLevel2 extends Level { // extend again, same form, you know
public TestLevel2() {
super(20, 10); // constructor again
this.id = 2; // id = 2 to differentiate them
for (int x = 0; x < width; x++) {
block[x][1] = BLOCK_SOLID; // every block in the first(actually second, because we start counting at 0) row shall be solid!
}
for (int y = 0; y < height; y++) {
block[1][y] = BLOCK_SOLID; // every block in the first...
block[5][y] = BLOCK_SOLID; // and fifth column shall be solid.
}
}
}