Newer
Older
JumpingGame / src / main / java / models / JumpGameModel.java
package models;

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;
    private Move move;
    private Position position;
    private Velocity velocity;
    private Onground onground;

    //---------------------------------------------------------------
    private Time time;
    private Gameover gameover;
    private Clear clear;

    //---------------------------------------------------------------
    private Ground ground;

    //---------------------------------------------------------------
    private double jumpPower = 32;

    //---------------------------------------------------------------
    private ArrayList<Integer> flagTimings = new ArrayList<>(); // フラグ切り替え
    private boolean tileType = true;
    private int flag = 0;

    //---------------------------------------------------------------
    //---------------------------------------------------------------
    //
    public JumpGameModel() {
        ground = new Ground();
        position = new Position(new Pair<>(640d, 480d), ground);
        onground = new Onground(ground, position);
        velocity = new Velocity(position, onground);
        acceleration = new Acceleration(velocity, onground);
        force = new Force(acceleration);
        mass = new Mass(acceleration);
        move = new Move(velocity);
        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 Ground getGround() {
        return ground;
    }

    //---------------------------------------------------------------
    //---------------------------------------------------------------
    // ジャンプ
    public void jump() {
        this.move.moveY(jumpPower);
    }

    //---------------------------------------------------------------
    // マイフレーム更新処理
    public void updateGravity(double gravity) {
        this.time.gravity(gravity);
        this.force.gravity(gravity);
        System.out.println("swapWindow Gravity");
    }

    //---------------------------------------------------------------
    //
    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<Integer> loadText() {
        ArrayList<Integer> flagTimings = new ArrayList<>();

        Path file = Paths.get("resources/stage.txt");
        String[] data = new String[1];

        try {
            List<String> 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;
    }


    //---------------------------------------------------------------
}