diff --git a/resources/hole.png b/resources/hole.png new file mode 100644 index 0000000..21b7d76 --- /dev/null +++ b/resources/hole.png Binary files differ diff --git a/src/main/java/JumpGame.java b/src/main/java/JumpGame.java index 608970f..74404d0 100644 --- a/src/main/java/JumpGame.java +++ b/src/main/java/JumpGame.java @@ -1,10 +1,10 @@ -import entities.*; import models.GroundModel; import models.IModel; -import models.ModelType; +import entities.ModelType; import models.PlayerModel; import views.IView; import views.PlayerRenderer; +import views.TileMapRenderer; import views.TileRenderer; import java.util.ArrayList; @@ -27,7 +27,7 @@ public void gravity(double y) { // this.force.gravity(y); // this.time.gravity(y); - PlayerModel playerModel = (PlayerModel) models.get(ModelType.PlayerModel); + PlayerModel playerModel = (PlayerModel) models.get(ModelType.PLAYER_MODEL); playerModel.updateGravity(y); } @@ -38,12 +38,12 @@ // model models.add(new GroundModel()); - GroundModel groundModel = (GroundModel) models.get(ModelType.GroundModel); + GroundModel groundModel = (GroundModel) models.get(ModelType.GROUND_MODEL); models.add(new PlayerModel(groundModel.getGround())); // view - views.add(new TileRenderer("resources/tile.png", 1)); - views.add(new PlayerRenderer("resources/chicken.png", 1)); + views.add(new TileMapRenderer()); + views.add(new PlayerRenderer("resources/chicken.png")); } //--------------------------------------------------------------- diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 296f047..10c462a 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,4 +1,4 @@ -import entities.Const; +import entities.WindowConfig; import org.lwjgl.glfw.*; import org.lwjgl.opengl.*; @@ -71,7 +71,7 @@ glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); // ウィンドウの作成 - hWnd = glfwCreateWindow(Const.WIDTH, Const.HEIGHT, Const.TITLE_NAME, fullScreen ? glfwGetPrimaryMonitor() : NULL, NULL); + hWnd = glfwCreateWindow(WindowConfig.WIDTH, WindowConfig.HEIGHT, WindowConfig.TITLE_NAME, fullScreen ? glfwGetPrimaryMonitor() : NULL, NULL); if (hWnd == NULL) throw new RuntimeException("Failed to create the window."); diff --git a/src/main/java/entities/Const.java b/src/main/java/entities/Const.java deleted file mode 100644 index a45780f..0000000 --- a/src/main/java/entities/Const.java +++ /dev/null @@ -1,11 +0,0 @@ -package entities; - -public class Const { - private Const() { - } - - public static final String TITLE_NAME = "JumpGame"; - public static final int WIDTH = 1280; - public static final int HEIGHT = 960; - public static final int DEPTH = 100; // 追加。深度 -} \ No newline at end of file diff --git a/src/main/java/entities/Image2D.java b/src/main/java/entities/Image2D.java index b992457..e089d0a 100644 --- a/src/main/java/entities/Image2D.java +++ b/src/main/java/entities/Image2D.java @@ -1,7 +1,5 @@ package entities; -import org.lwjgl.system.CallbackI; - import static org.lwjgl.opengl.GL11.*; //--------------------------------------------------------------- @@ -74,10 +72,10 @@ glMatrixMode(GL_PROJECTION); // 行列の設定 glLoadIdentity(); // 単位行列化 - glOrtho(0, Const.WIDTH, 0, Const.HEIGHT, -Const.DEPTH, Const.DEPTH); // 正射影投影 + glOrtho(0, WindowConfig.WIDTH, 0, WindowConfig.HEIGHT, -WindowConfig.DEPTH, WindowConfig.DEPTH); // 正射影投影 // ビューポートの範囲 - glViewport(0, 0, Const.WIDTH, Const.HEIGHT); + glViewport(0, 0, WindowConfig.WIDTH, WindowConfig.HEIGHT); // ポリゴンの色 glColor4d(color.getR(), color.getG(), color.getB(), alpha); diff --git a/src/main/java/entities/ModelType.java b/src/main/java/entities/ModelType.java new file mode 100644 index 0000000..193b2e6 --- /dev/null +++ b/src/main/java/entities/ModelType.java @@ -0,0 +1,17 @@ +package entities; + +//--------------------------------------------------------------- +// モデルのタイプ識別 +public class ModelType { + + public static final int GROUND_MODEL = 0; + public static final int PLAYER_MODEL = 1; + public static final int GAME_MODEL = 2; + + //--------------------------------------------------------------- + //--------------------------------------------------------------- + private ModelType() { + + } + //--------------------------------------------------------------- +} diff --git a/src/main/java/entities/Sprite.java b/src/main/java/entities/Sprite.java index 37421b6..239e96d 100644 --- a/src/main/java/entities/Sprite.java +++ b/src/main/java/entities/Sprite.java @@ -22,6 +22,12 @@ //--------------------------------------------------------------- //--------------------------------------------------------------- + // getter + public double getScaleValue(){ + return this.scaleValue; + } + + //--------------------------------------------------------------- // setter public void setPositionValue(Pair positionValue) { this.positionValue = positionValue; diff --git a/src/main/java/entities/TileType.java b/src/main/java/entities/TileType.java new file mode 100644 index 0000000..178adc0 --- /dev/null +++ b/src/main/java/entities/TileType.java @@ -0,0 +1,19 @@ +package entities; + +//--------------------------------------------------------------- +// タイルの種類の定数クラス +public enum TileType { + + CLOSE(true), + OPEN(false); + + private final boolean isClose; + + //--------------------------------------------------------------- + //--------------------------------------------------------------- + private TileType(boolean isClose) { + this.isClose = isClose; + } + + //--------------------------------------------------------------- +} diff --git a/src/main/java/entities/WindowConfig.java b/src/main/java/entities/WindowConfig.java new file mode 100644 index 0000000..0083497 --- /dev/null +++ b/src/main/java/entities/WindowConfig.java @@ -0,0 +1,11 @@ +package entities; + +public class WindowConfig { + private WindowConfig() { + } + + public static final String TITLE_NAME = "JumpGame"; + public static final int WIDTH = 1280; + public static final int HEIGHT = 720; + public static final int DEPTH = 100; // 追加。深度 +} \ No newline at end of file diff --git a/src/main/java/models/GroundModel.java b/src/main/java/models/GroundModel.java index 7e9f384..86a094c 100644 --- a/src/main/java/models/GroundModel.java +++ b/src/main/java/models/GroundModel.java @@ -2,11 +2,14 @@ import entities.Ground; +import java.util.ArrayList; + //--------------------------------------------------------------- // public class GroundModel implements IModel { //--------------------------------------------------------------- private Ground ground; + private ArrayList flagTimings = new ArrayList<>(); // フラグ切り替え //--------------------------------------------------------------- //--------------------------------------------------------------- diff --git a/src/main/java/models/ModelType.java b/src/main/java/models/ModelType.java deleted file mode 100644 index 7ffa695..0000000 --- a/src/main/java/models/ModelType.java +++ /dev/null @@ -1,17 +0,0 @@ -package models; - -//--------------------------------------------------------------- -// モデルのタイプ識別 -public class ModelType { - - public static final int GroundModel = 0; - public static final int PlayerModel = 1; - public static final int GameModel = 2; - - //--------------------------------------------------------------- - //--------------------------------------------------------------- - private ModelType() { - - } - //--------------------------------------------------------------- -} diff --git a/src/main/java/views/PlayerRenderer.java b/src/main/java/views/PlayerRenderer.java index 30329c8..20c1456 100644 --- a/src/main/java/views/PlayerRenderer.java +++ b/src/main/java/views/PlayerRenderer.java @@ -11,9 +11,9 @@ //--------------------------------------------------------------- //--------------------------------------------------------------- - public PlayerRenderer(String path, double scale) { + public PlayerRenderer(String path) { this.sprite = new Sprite(path); - this.sprite.setScaleValue(scale); + this.sprite.setScaleValue(1); } //--------------------------------------------------------------- diff --git a/src/main/java/views/TileMapRenderer.java b/src/main/java/views/TileMapRenderer.java index 478c182..803c731 100644 --- a/src/main/java/views/TileMapRenderer.java +++ b/src/main/java/views/TileMapRenderer.java @@ -1,4 +1,65 @@ package views; -public class TileMapRenderer { -} +import entities.WindowConfig; +import entities.Pair; +import entities.TileType; +import models.IModel; + +import java.util.ArrayList; + +//--------------------------------------------------------------- +// タイル生成 +public class TileMapRenderer implements IView { + + private double offsetY = 256d; + private TileRenderer newTile = new TileRenderer("resources/tile.png",null,2); + private ArrayList tiles = new ArrayList<>(); + + //--------------------------------------------------------------- + //--------------------------------------------------------------- + public TileMapRenderer() { + initTiles(); + } + + //--------------------------------------------------------------- + //--------------------------------------------------------------- + // + public void display(IModel model) { + for (TileRenderer tile : tiles) tile.display(model); + } + + //--------------------------------------------------------------- + // + public void delete() { + for (TileRenderer tile : tiles) tile.delete(); + } + + //-------------------------------------------------------------- + // タイルをフラグに応じて生成する + private void createTile(TileType tileType) { + + switch (tileType) { + case CLOSE: + newTile = new TileRenderer("resources/tile.png", new Pair<>((double) WindowConfig.WIDTH, 0d), 2); + break; + + case OPEN: + newTile = new TileRenderer("resources/hole.png", new Pair<>((double) WindowConfig.WIDTH, 0d),2); + break; + } + + tiles.add(newTile); + } + + //--------------------------------------------------------------- + // 初期タイル作成 + private void initTiles() { + + for (double x = 0; x <= WindowConfig.WIDTH; x += 32 * newTile.getScaleValue()) { + newTile = new TileRenderer("resources/tile.png", new Pair<>(x, offsetY)); + newTile.setScaleValue(2); + tiles.add(newTile); + } + } + //--------------------------------------------------------------- +} \ No newline at end of file diff --git a/src/main/java/views/TileRenderer.java b/src/main/java/views/TileRenderer.java index 90bfe8f..c839575 100644 --- a/src/main/java/views/TileRenderer.java +++ b/src/main/java/views/TileRenderer.java @@ -1,5 +1,6 @@ package views; +import entities.Pair; import entities.Sprite; import models.IModel; @@ -10,21 +11,44 @@ //--------------------------------------------------------------- //--------------------------------------------------------------- - public TileRenderer(String path, double scale){ + public TileRenderer(String path, Pair initPosition) { + this.sprite = new Sprite(path); + this.sprite.setScaleValue(1); + this.sprite.setPositionValue(initPosition); + } + + //--------------------------------------------------------------- + public TileRenderer(String path, Pair initPosition, double scale) { this.sprite = new Sprite(path); this.sprite.setScaleValue(scale); + this.sprite.setPositionValue(initPosition); } //--------------------------------------------------------------- //--------------------------------------------------------------- + // getter + public double getScaleValue() { + return this.sprite.getScaleValue(); + } + + //--------------------------------------------------------------- + //--------------------------------------------------------------- + // setter + public void setScaleValue(double scaleValue){ + this.sprite.setScaleValue(scaleValue); + } + + + //--------------------------------------------------------------- + //--------------------------------------------------------------- // - public void display(IModel model){ + public void display(IModel model) { sprite.draw(); } //--------------------------------------------------------------- // テクスチャの開放 - public void delete(){ + public void delete() { sprite.delete(); } //---------------------------------------------------------------