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 612856d..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(); @@ -26,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")); } @@ -34,22 +31,12 @@ // 更新処理 public void update() { - JumpGameModel jumpGameModel = (JumpGameModel) model; - // Viewの更新 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/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/models/JumpGameModel.java b/src/main/java/models/JumpGameModel.java index 5ea8e35..95ade5e 100644 --- a/src/main/java/models/JumpGameModel.java +++ b/src/main/java/models/JumpGameModel.java @@ -16,8 +16,7 @@ //--------------------------------------------------------------- // public class JumpGameModel implements IModel { - //--------------------------------------------------------------- - // + private Acceleration acceleration; private Force force; private Mass mass; @@ -38,7 +37,7 @@ private double jumpPower = 32; //--------------------------------------------------------------- - private ArrayList flagTimings = new ArrayList<>(); // フラグ切り替え + private ArrayList flagTimings; // フラグ切り替え private boolean tileType = true; private int flag = 0; @@ -72,6 +71,10 @@ return position; } + public ArrayList getFlags() { + return flagTimings; + } + public Ground getGround() { return ground; } @@ -92,22 +95,6 @@ } //--------------------------------------------------------------- - // - 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() { @@ -118,8 +105,8 @@ 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 < 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) { @@ -129,6 +116,12 @@ return flagTimings; } + //--------------------------------------------------------------- + // + private void init() { + + } + //--------------------------------------------------------------- } diff --git a/src/main/java/views/TileMapRenderer.java b/src/main/java/views/TileMapRenderer.java index eca13d2..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; @@ -17,8 +16,8 @@ //--------------------------------------------------------------- //--------------------------------------------------------------- - public TileMapRenderer() { - initTiles(); + public TileMapRenderer(ArrayList flags) { + initTiles(flags); } //--------------------------------------------------------------- @@ -47,28 +46,48 @@ //-------------------------------------------------------------- //--------------------------------------------------------------- // 初期タイル作成 - private void initTiles() { - for (int i = 0; i < 20; i++) { - double x = 32 * newTile.getScaleValue() * i; + private void initTiles(ArrayList flags) { + boolean isOpen = false; + int space = 20; - newTile = new TileRenderer("resources/tile.png", new Pair<>(x, offsetY)); - newTile.setScaleValue(2); - tiles.add(newTile); + for (int i = 0; i < space; i++) { + double x = 32 * newTile.getScaleValue() * i; + addNewTile(x, TileType.CLOSE); + } + + 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); + } } //-------------------------------------------------------------- // タイルをフラグに応じて生成する - public void createTile(boolean tileType) { + private void addNewTile(double x, TileType tileType) { - 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); - + switch (tileType) { + case CLOSE: + newTile = new TileRenderer("resources/tile.png", new Pair<>(x, offsetY), 2); + break; + case OPEN: + 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)); + + } + +}