diff --git a/.idea/libraries/org_junit_jupiter_junit_jupiter_5_4_2.xml b/.idea/libraries/org_junit_jupiter_junit_jupiter_5_4_2.xml new file mode 100644 index 0000000..32de0a2 --- /dev/null +++ b/.idea/libraries/org_junit_jupiter_junit_jupiter_5_4_2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jumpGame.iml b/jumpGame.iml index 13770d9..6ba17f4 100644 --- a/jumpGame.iml +++ b/jumpGame.iml @@ -24,5 +24,6 @@ + \ No newline at end of file diff --git a/src/main/java/JumpGame.java b/src/main/java/JumpGame.java index 9927138..6596763 100644 --- a/src/main/java/JumpGame.java +++ b/src/main/java/JumpGame.java @@ -7,10 +7,7 @@ import java.util.ArrayList; public class JumpGame { - //--------------------------------------------------------------- - //--------------------------------------------------------------- - // new private ArrayList views = new ArrayList<>(); private IModel model = new JumpGameModel(); @@ -18,7 +15,6 @@ //--------------------------------------------------------------- // public void gravity(double y) { -// this.time.gravity(y); JumpGameModel jumpGameModel = (JumpGameModel) model; jumpGameModel.updateGravity(y); } @@ -27,7 +23,7 @@ // 初期化 public void init() { // view - views.add(new TileMapRenderer()); + views.add(new TileMapRenderer(((JumpGameModel) model).getFlags())); views.add(new PlayerRenderer("resources/chicken.png")); } @@ -36,7 +32,7 @@ public void update() { // Viewの更新 - for (IView view : views){ + for (IView view : views) { view.update(model); view.display(); } diff --git a/src/main/java/entities/Image2D.java b/src/main/java/entities/Image2D.java index bbbc877..641b827 100644 --- a/src/main/java/entities/Image2D.java +++ b/src/main/java/entities/Image2D.java @@ -7,7 +7,7 @@ public class Image2D { private int id; // テクスチャのID - private Pair wh; // スプライトの幅高 + private Pair spriteSize; // スプライトの幅高 private Pair position; // スプライトの座標(画面座標) private Color color; // スプライトの色 private double rotation; // 回転(度) @@ -27,9 +27,9 @@ this.color = new Color(1, 1, 1, 1); if (tex != null) - wh = new Pair<>((double) tex.getWidth(), (double) tex.getHeight()); + spriteSize = new Pair<>((double) tex.getWidth(), (double) tex.getHeight()); else - wh = new Pair<>(32d, 20d); + spriteSize = new Pair<>(32d, 20d); rotation = 0.0; scale = 1.0; alpha = 1.0; @@ -83,13 +83,13 @@ // ポリゴンの作成とテクスチャの適応 glBegin(GL_TRIANGLE_STRIP); glTexCoord2d(0, 0); - glVertex2d(-wh.getFirst() / 2, wh.getSecond() / 2); + glVertex2d(-spriteSize.getFirst() / 2, spriteSize.getSecond() / 2); glTexCoord2d(0, 1); - glVertex2d(-wh.getFirst() / 2, -wh.getSecond() / 2); + glVertex2d(-spriteSize.getFirst() / 2, -spriteSize.getSecond() / 2); glTexCoord2d(1, 0); - glVertex2d(wh.getFirst() / 2, wh.getSecond() / 2); + glVertex2d(spriteSize.getFirst() / 2, spriteSize.getSecond() / 2); glTexCoord2d(1, 1); - glVertex2d(wh.getFirst() / 2, -wh.getSecond() / 2); + glVertex2d(spriteSize.getFirst() / 2, -spriteSize.getSecond() / 2); glEnd(); // 行列の破棄 diff --git a/src/main/java/entities/TileType.java b/src/main/java/entities/TileType.java index 178adc0..c1b45c9 100644 --- a/src/main/java/entities/TileType.java +++ b/src/main/java/entities/TileType.java @@ -4,16 +4,8 @@ // タイルの種類の定数クラス public enum TileType { - CLOSE(true), - OPEN(false); - - private final boolean isClose; - - //--------------------------------------------------------------- - //--------------------------------------------------------------- - private TileType(boolean isClose) { - this.isClose = isClose; - } + CLOSE, + OPEN; //--------------------------------------------------------------- } 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..95ade5e 100644 --- a/src/main/java/models/JumpGameModel.java +++ b/src/main/java/models/JumpGameModel.java @@ -3,13 +3,20 @@ 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; //--------------------------------------------------------------- // public class JumpGameModel implements IModel { - //--------------------------------------------------------------- - // + private Acceleration acceleration; private Force force; private Mass mass; @@ -28,7 +35,11 @@ //--------------------------------------------------------------- private double jumpPower = 32; - private ArrayList flagTimings = new ArrayList<>(); // フラグ切り替え + + //--------------------------------------------------------------- + private ArrayList flagTimings; // フラグ切り替え + private boolean tileType = true; + private int flag = 0; //--------------------------------------------------------------- //--------------------------------------------------------------- @@ -45,28 +56,38 @@ time = new Time(); gameover = new Gameover(position); clear = new Clear(position); + + flagTimings = loadText(); } //--------------------------------------------------------------- //--------------------------------------------------------------- // getter + public boolean getTileType() { + return tileType; + } + public Position getPosition() { return position; } + public ArrayList getFlags() { + return flagTimings; + } + public Ground getGround() { return ground; } //--------------------------------------------------------------- //--------------------------------------------------------------- - // + // ジャンプ public void jump() { this.move.moveY(jumpPower); } //--------------------------------------------------------------- - // + // マイフレーム更新処理 public void updateGravity(double gravity) { this.time.gravity(gravity); this.force.gravity(gravity); @@ -74,4 +95,33 @@ } //--------------------------------------------------------------- + //--------------------------------------------------------------- + // ステージデータの読み込み + 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; + } + + //--------------------------------------------------------------- + // + private void init() { + + } + + + //--------------------------------------------------------------- } diff --git a/src/main/java/views/TileMapRenderer.java b/src/main/java/views/TileMapRenderer.java index 71aff43..ea006b9 100644 --- a/src/main/java/views/TileMapRenderer.java +++ b/src/main/java/views/TileMapRenderer.java @@ -1,6 +1,5 @@ package views; -import entities.GLConfigVariable; import entities.Pair; import entities.TileType; import models.IModel; @@ -14,12 +13,11 @@ private double offsetY = 256d; private TileRenderer newTile = new TileRenderer("resources/tile.png", null, 2); private ArrayList tiles = new ArrayList<>(); - private int tileLen = 150; // //--------------------------------------------------------------- //--------------------------------------------------------------- - public TileMapRenderer() { - initTiles(); + public TileMapRenderer(ArrayList flags) { + initTiles(flags); } //--------------------------------------------------------------- @@ -48,33 +46,48 @@ //-------------------------------------------------------------- //--------------------------------------------------------------- // 初期タイル作成 - private void initTiles() { + private void initTiles(ArrayList flags) { + boolean isOpen = false; + int space = 20; - for (int i = 0; i < tileLen; i++) { + for (int i = 0; i < space; i++) { double x = 32 * newTile.getScaleValue() * i; + addNewTile(x, TileType.CLOSE); + } - newTile = new TileRenderer("resources/tile.png", new Pair<>(x, offsetY)); - newTile.setScaleValue(2); - tiles.add(newTile); + for (int i = 0; i < 100; i++) { + double x = 32 * newTile.getScaleValue() * (i + space); + + // フラグのチェック + if (isFlag(i, flags)) isOpen = !isOpen; + if (isOpen) addNewTile(x, TileType.OPEN); + else addNewTile(x, TileType.CLOSE); + } } //-------------------------------------------------------------- // タイルをフラグに応じて生成する - private void createTile(TileType tileType) { + private void addNewTile(double x, TileType tileType) { switch (tileType) { case CLOSE: - newTile = new TileRenderer("resources/tile.png", new Pair<>((double) GLConfigVariable.WIDTH, 0d), 2); + newTile = new TileRenderer("resources/tile.png", new Pair<>(x, offsetY), 2); break; - case OPEN: - newTile = new TileRenderer("resources/hole.png", new Pair<>((double) GLConfigVariable.WIDTH, 0d), 2); + newTile = new TileRenderer("resources/hole.png", new Pair<>(x, offsetY), 2); break; } - tiles.add(newTile); + System.out.println("New tile created."); } //--------------------------------------------------------------- + //--------------------------------------------------------------- + // フラグのタイミングと一致しているかをチェック + private boolean isFlag(int timing, ArrayList flags) { + for (int flag : flags) return (timing == flag); + return false; + } + //--------------------------------------------------------------- } \ No newline at end of file diff --git a/src/test/java/TextLoadTest.java b/src/test/java/TextLoadTest.java new file mode 100644 index 0000000..366316f --- /dev/null +++ b/src/test/java/TextLoadTest.java @@ -0,0 +1,12 @@ +import models.JumpGameModel; +import org.junit.jupiter.api.Test; + +public class TextLoadTest { + @Test + public void Test() { + JumpGameModel model = new JumpGameModel(); + for (int i = 0; i < model.getFlags().size(); i++) System.out.println("flag: " + model.getFlags().get(i)); + + } + +}