diff --git a/src/main/java/JumpGame.java b/src/main/java/JumpGame.java index 9927138..612856d 100644 --- a/src/main/java/JumpGame.java +++ b/src/main/java/JumpGame.java @@ -18,7 +18,6 @@ //--------------------------------------------------------------- // public void gravity(double y) { -// this.time.gravity(y); JumpGameModel jumpGameModel = (JumpGameModel) model; jumpGameModel.updateGravity(y); } @@ -35,12 +34,22 @@ // 更新処理 public void update() { + JumpGameModel jumpGameModel = (JumpGameModel) model; + // Viewの更新 - for (IView view : views){ + for (IView view : views) { view.update(model); view.display(); } + // ステージが排出する地形データを切り替える + if (jumpGameModel.isTimingOfChangeTile()) { + jumpGameModel.changeTileType(); + + TileMapRenderer tileMapRenderer = (TileMapRenderer) views.get(0); + tileMapRenderer.createTile(jumpGameModel.getTileType()); + } + // Modelの更新 // // Space キーのインプット diff --git a/src/main/java/entities/Time.java b/src/main/java/entities/Time.java index f08de37..0b96add 100644 --- a/src/main/java/entities/Time.java +++ b/src/main/java/entities/Time.java @@ -4,7 +4,7 @@ private double value; public void gravity(double y) { - this.value = (this.value + 0.01); + this.value = (this.value + 1); } public double getValue() { diff --git a/src/main/java/models/JumpGameModel.java b/src/main/java/models/JumpGameModel.java index b0617aa..5ea8e35 100644 --- a/src/main/java/models/JumpGameModel.java +++ b/src/main/java/models/JumpGameModel.java @@ -3,7 +3,15 @@ import entities.*; import entities.player.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; +import java.util.List; //--------------------------------------------------------------- // @@ -28,7 +36,11 @@ //--------------------------------------------------------------- private double jumpPower = 32; + + //--------------------------------------------------------------- private ArrayList flagTimings = new ArrayList<>(); // フラグ切り替え + private boolean tileType = true; + private int flag = 0; //--------------------------------------------------------------- //--------------------------------------------------------------- @@ -45,11 +57,17 @@ time = new Time(); gameover = new Gameover(position); clear = new Clear(position); + + flagTimings = loadText(); } //--------------------------------------------------------------- //--------------------------------------------------------------- // getter + public boolean getTileType() { + return tileType; + } + public Position getPosition() { return position; } @@ -60,13 +78,13 @@ //--------------------------------------------------------------- //--------------------------------------------------------------- - // + // ジャンプ public void jump() { this.move.moveY(jumpPower); } //--------------------------------------------------------------- - // + // マイフレーム更新処理 public void updateGravity(double gravity) { this.time.gravity(gravity); this.force.gravity(gravity); @@ -74,4 +92,43 @@ } //--------------------------------------------------------------- + // + public boolean isTimingOfChangeTile() { + if (time.getValue() <= 0) return false; + return (time.getValue() % 32 == 0); + } + + //--------------------------------------------------------------- + // タイルの種類を切り替える + public void changeTileType() { + if(flagTimings.size() <= flag)return; + if (flagTimings.get(flag) % 2 == 0) tileType = !tileType; + + if (flag < flagTimings.size()) flag++; + } + + //--------------------------------------------------------------- + //--------------------------------------------------------------- + // ステージデータの読み込み + private ArrayList loadText() { + ArrayList flagTimings = new ArrayList<>(); + + Path file = Paths.get("resources/stage.txt"); + String[] data = new String[1]; + + try { + List lines = Files.readAllLines(file, Charset.forName("Shift-JIS")); + for (int i = 0; i < lines.size(); i++) data = lines.get(i).split(","); + + for (int i = 0; i < data.length; i++) flagTimings.add(Integer.parseInt(data[i])); + + } catch (IOException e) { + System.out.println("Failed to load stage.txt"); + } + + return flagTimings; + } + + + //--------------------------------------------------------------- } diff --git a/src/main/java/views/TileMapRenderer.java b/src/main/java/views/TileMapRenderer.java index 71aff43..eca13d2 100644 --- a/src/main/java/views/TileMapRenderer.java +++ b/src/main/java/views/TileMapRenderer.java @@ -14,7 +14,6 @@ private double offsetY = 256d; private TileRenderer newTile = new TileRenderer("resources/tile.png", null, 2); private ArrayList tiles = new ArrayList<>(); - private int tileLen = 150; // //--------------------------------------------------------------- //--------------------------------------------------------------- @@ -49,8 +48,7 @@ //--------------------------------------------------------------- // 初期タイル作成 private void initTiles() { - - for (int i = 0; i < tileLen; i++) { + for (int i = 0; i < 20; i++) { double x = 32 * newTile.getScaleValue() * i; newTile = new TileRenderer("resources/tile.png", new Pair<>(x, offsetY)); @@ -61,20 +59,16 @@ //-------------------------------------------------------------- // タイルをフラグに応じて生成する - private void createTile(TileType tileType) { + public void createTile(boolean tileType) { - switch (tileType) { - case CLOSE: - newTile = new TileRenderer("resources/tile.png", new Pair<>((double) GLConfigVariable.WIDTH, 0d), 2); - break; - - case OPEN: - newTile = new TileRenderer("resources/hole.png", new Pair<>((double) GLConfigVariable.WIDTH, 0d), 2); - break; - } + if (tileType) + newTile = new TileRenderer("resources/tile.png", new Pair<>((double) GLConfigVariable.WIDTH, offsetY), 2); + else + newTile = new TileRenderer("resources/hole.png", new Pair<>((double) GLConfigVariable.WIDTH, offsetY), 2); tiles.add(newTile); + System.out.println("New tile created."); } - //--------------------------------------------------------------- +//--------------------------------------------------------------- } \ No newline at end of file