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));
+
+ }
+
+}