コード例 #1
0
ファイル: g_nervous.cpp プロジェクト: RoDoRiTos/PS14B_Repo
// 神経衰弱 リザルト
void result_nervous(AppEnv& app_env, Texture& sys, Texture& frm,
  bool& isCont, bool& g_set, short& chain, short p_score, short r_score) {

  // システムメッセージの表示位置
  float sys_x, sys_y;

  // スコアを一時的に保存
  short score[] = {p_score, r_score};

  while (1) {
    if (!app_env.isOpen()) { return; }

    // 左クリックで終了
    if (app_env.isPushButton(Mouse::LEFT)) { app_env.flushInput(); break; }

    app_env.setupDraw();

    // システムメッセージの表示
    NV_disp_message(sys, frm, isCont, g_set, chain, score);

    // スコアの表示
    {
      sys_x = (-Window::WIDTH / 2) + Card_W + Icon_W * 2;
      sys_y = (-Window::HEIGHT / 2) + (Telop_H * 4) - 2;

      CO_disp_number(sys, p_score, sys_x, sys_y);                   // プレイヤーの点数
      CO_disp_number(sys, r_score, sys_x, sys_y - (Telop_H + 2));   // 対戦相手の点数
    }

    app_env.update();
  }
}
コード例 #2
0
void game_main(AppEnv& app_env) {

  while (1) {
    if (!app_env.isOpen()) { return; }
    app_env.setupDraw();
    app_env.update();
  }
}
コード例 #3
0
ファイル: game_title.hpp プロジェクト: RoDoRiTos/PS14B_Repo
// タイトル画面
void game_title(AppEnv& app_env) {
  // 画像読み込み
  Texture title("res/png/sys01_logo.png");    // タイトルロゴ
  Texture start("res/png/sys02_start.png");   // スタートボタン
  Texture BG("res/png/bg01_gradation.png");   // 背景

  // この処理内だけで使う変数
  const short One_Second = 60;   // 1秒 = 60.frame
  const short Logo_Line = 8;     // 描画サイズ

  const short Draw_Limit = Logo_Ha - Logo_Line;   // 描画アニメの終了判定

  short time_count = 0;   // タイマー
  short blink = 0;        // 点滅アニメーション
  float draw_y = 0;       // ロゴ変化アニメ:描画位置

  while (1) {
    if (!app_env.isOpen()) { return; }

    // 左クリックでループ終了
    if (app_env.isPushButton(Mouse::LEFT)) { app_env.flushInput(); return; }

    // 画像の点滅処理
    {
      blink = (time_count / 30) % 2;
      time_count++;
      if (time_count == One_Second) { time_count = 0; }   // 1秒カウントしたらリセット
    }

    // タイトルロゴに変化をつける処理
    {
      draw_y += 1.5;
      if (draw_y >= Draw_Limit) { draw_y = 0; }   // 描画位置をリセット
    }

    app_env.setupDraw();

    // 背景表示
    drawTextureBox((-Window::WIDTH / 2), (-Window::HEIGHT / 2), Window::WIDTH, Window::HEIGHT,
      0, 0, Bg_W, Bg_H,
      BG, Color(0, 0, 0, 0.5));

    // タイトルロゴ表示
    drawTextureBox((-Logo_W * 1), (Logo_Ha * 1), Logo_W * 2, Logo_Ha,
      0, 0, Logo_W, Logo_Ha,
      title, Color(1, 0.75, 0.5));
    drawTextureBox((-Logo_W * 1), (Logo_Ha * 1) + draw_y, Logo_W * 2, Logo_Line,
      0, (Logo_Ha - Logo_Line) - draw_y, Logo_W, Logo_Line,
      title, Color(1, 1, 1));

    // クリックスタート
    drawTextureBox((-Logo_W * 0.5), (-Logo_Hb * 2), Logo_W, Logo_Hb,
      0, 0, Logo_W, Logo_Hb,
      start, Color(1, 1, 0.5, blink));

    app_env.update();
  }
}
コード例 #4
0
ファイル: main.cpp プロジェクト: ooHIROoo/Review
	void Update(AppEnv& env){
		const Vec2f SUPREMUM = Vec2f(env.viewSize().x() * .5f - origin.x(), env.viewSize().y() * .5f - origin.y());
		const Vec2f INFIMUM = Vec2f(-env.viewSize().x() * .5f + origin.x(), -env.viewSize().y() * .5f + origin.y());
		
		std::cout << env.viewSize() << std::endl;

		if(env.isPressKey('W')){
			pos.y() += speed.y();
			pos.y() = std::min(pos.y(), SUPREMUM.y());
		}
		if (env.isPressKey('S')){
			pos.y() += -speed.y();
			pos.y() = std::max(pos.y(), INFIMUM.y());
		}
		if (env.isPressKey('D')){
			scale.x() = 1;
			pos.x() += speed.x();
			pos.x() = std::min(pos.x(), SUPREMUM.x());
		}
		if (env.isPressKey('A')){
			scale.x() = -1;
			pos.x() += -speed.x();
			pos.x() = std::max(pos.x(), INFIMUM.x());
		}
	}
コード例 #5
0
void Menu::disp_menu(AppEnv& app,Vec2f mouse, Player& player){
  drawTextureBox(-400, -200, 800, 400, 0, 0, 800, 400, textures[1], Color(1, 1, 1));
  drawTextureBox(-350, 100, 200, 50, 0, 0, 200, 50, textures[2], Color(1, 1, 1));
  drawTextureBox(-350, 35, 200, 50, 0, 0, 200, 50, textures[2], Color(1, 1, 1));
  drawTextureBox(-350, -30, 200, 50, 0, 0, 200, 50, textures[2], Color(1, 1, 1));
  drawTextureBox(-350, -95, 200, 50, 0, 0, 200, 50, textures[2], Color(1, 1, 1));
  if (Mouse_Sq(-350, -160, 200, 50, mouse)){
    drawTextureBox(-350, -160, 200, 50, 0, 0, 200, 50, textures[2], Color(0.5,0.5,0.5));
    if (app.isPushButton(Mouse::LEFT)){
      player.copy_params(save_data);
    }
    ofstream save("res/Saves/test_data.txt");
    save << "1" << endl;
    save << endl;
    save << "Map_ID " << save_data.Map_ID << endl;
    save << "LV " << save_data.LV << endl;
    save << "STR " << save_data.STR << endl;
    save << "VIT " << save_data.VIT << endl;
    save << "ENDUR " << save_data.ENDUR << endl;
    save << "DEX " << save_data.DEX << endl;
  }
  else{
    drawTextureBox(-350, -160, 200, 50, 0, 0, 200, 50, textures[2], Color(1, 1, 1));
  }
}
コード例 #6
0
ファイル: SceneManager.cpp プロジェクト: totopizza/Backup
void SceneManager::Update(AppEnv& env)
{
	ChanageScene();

	if (env.isPushKey(GLFW_KEY_S)){
		sceneType = GameMain_;
	}

	scene->Update();
}
コード例 #7
0
ファイル: game_main.cpp プロジェクト: Lacty/Jum7_27
void gameMainUpdate(AppEnv& env) {
  using namespace GameMainVar;
  state.update();
  stage.Update();
  enemy_manager.Update();
  gimic_manager.Update(player);
  player.Update(env);

  Getter::get().patern = player.gimic_patern;
  if (stage.isClear()) {
    Getter::get().isClear = true;
    setSceneState(SceneState::Result);
  }

  if (env.isPushKey('R')) {
    Getter::get().isClear = true;
    setSceneState(SceneState::Result);
  }
}
コード例 #8
0
ファイル: result.cpp プロジェクト: zun-ferrum/Jum7_27
void resultUpdate(AppEnv& env) {
  using namespace ResultVar;
  if (env.isPushKey('T')) {
    setSceneState(SceneState::Title);
  }
}
コード例 #9
0
ファイル: g_nervous.cpp プロジェクト: RoDoRiTos/PS14B_Repo
// 神経衰弱 本編
void game_nervous(AppEnv& app_env) {
  // 乱数の基準値設定
  Random random; random.setSeed((u_int)time(nullptr));

  // 画像の読み込み
  Texture t_card("res/png/c01_standard.png");   // カードの画像
  Texture system("res/png/m01_nv.png");         // システムメッセージ
  Texture wframe("res/png/sys04_frame.png");    // テロップ用フレーム

  // BGM と SE の読み込み
  Media thema(M_THEMA); thema.gain(0.5); thema.looping(true);
  Media intro(M_INTRO); intro.gain(0.5);   // イントロ

  Media click(SE_CLICK); click.gain(0.5);         // クリックしたとき
  Media success(SE_SUCCESS); success.gain(0.25);   // カードのペアを作れた
  Media failure(SE_FAILURE); failure.gain(0.25);   // カードのペアを作れなかった
  Media finish(SE_FINISH); finish.gain(0.25);      // ゲーム終了

  // このゲーム内専用の変数
  short i;                  // 繰り返し処理用
  short open_count = 0;     // カードをめくった回数
  short open_chain = 0;     // 連続でペアを見つけた回数
  short hist_count = 0;     // 履歴に情報を保存した回数
  short field_count = 0;    // 場に残っているカードの枚数

  float card_x, card_y;     // カードの表示位置(始点)
  float sys_x, sys_y;       // システムメッセージの表示位置

  bool isContinue = true;   // 続けてカードをめくれるか
  bool isCheck = false;     // 対戦相手のAI用:履歴の確認
  bool isRandom = false;    // 対戦相手のAI用:検索で見つからないとき、ランダムで選択
  bool game_turn = true;    // 誰のターンか:true = プレイヤー、false = 対戦相手
  bool game_set = true;     // ゲーム終了判定

  // このゲーム内専用の変数:マウス判定用
  Vec2f mouse_pos;   // マウスカーソルの座標
  bool on_mouse;     // マウスカーソルの判定

  // 場に配置されるカードの情報
  struct Card {
    short number;   // カードの数字
    short mark;     // カードの記号
    bool isOpen;    // 表向きになっているか
  };

  // カード情報の生成
  Card field[JOKER_NG] = {};        // 場のカード情報
  short open_hist[MAX_HIST] = {};   // 表にしたカードの履歴
  short prev_1, prev_2;             // 表にしたカードの比較用
  short game_score[] = {0, 0};      // プレイヤーと対戦相手の点数

  // ゲームの初期化
  {
    // 履歴の初期化
    for (i = 0; i < MAX_HIST; i++) { open_hist[i] = -1; }

    // カード情報の初期化
    for (i = 0; i < JOKER_NG; i++) { field[i] = {i % CARD_NUM, i / CARD_NUM, false}; }

    // カードのシャッフル
    for (i = 0; i < JOKER_NG; i++) { std::swap(field[i], field[random.fromZeroToLast(JOKER_NG)]); }

    intro.play();   // イントロ再生
  }


  /* 本編 */
  ////////////////////////////////////////////////////////////////////////////////
  while (1) {
    if (!app_env.isOpen()) { return; }

    // BGM再生:イントロが終わったらループ部分の再生
    if (!intro.isPlaying()) { if (!thema.isPlaying()) { thema.play(); } }

    // カードの残り枚数を確認、2枚未満なら強制的に終了する
    if (game_set) {
      open_count = 0;    // めくった回数をリセット
      field_count = 0;   // カードの残り枚数をリセット

      // 残り枚数をカウント
      for (i = 0; i < JOKER_NG; i++) { if (!field[i].isOpen) { field_count++; } }

      // 2枚未満なら強制終了
      if (field_count < OPEN_ACT) { thema.stop(); break; }
      game_set = false;
    }

    app_env.setupDraw();

    // システムメッセージの表示
    {
      // メッセージ全体
      NV_disp_message(system, wframe, isContinue, game_set, open_chain, game_score);

      // スコアの表示
      {
        sys_x = (-Window::WIDTH / 2) + Card_W + Icon_W * 2;
        sys_y = (-Window::HEIGHT / 2) + (Telop_H * 4) - 2;

        CO_disp_number(system, game_score[DEF_PLAYER], sys_x, sys_y);                  // プレイヤーの点数
        CO_disp_number(system, game_score[DEF_RIVAL], sys_x, sys_y - (Telop_H + 2));   // 対戦相手の点数
      }
    }

    switch (game_turn) {
        // プレイヤーのターン
      case true:
        // マウス座標の取得
        mouse_pos = app_env.mousePosition();

        // カードごとの処理
        for (i = 0; i < JOKER_NG; i++) {
          // カードの表示位置設定
          card_x = (Card_W + 8) * ((i % CARD_NUM) - 6.5);
          card_y = (Card_H + 8) * ((i / CARD_NUM) - 1);

          // カードの上にマウスカーソルがあるか判定
          on_mouse = CO_on_mouse(mouse_pos, card_x, card_y, Card_W, Card_H);
          if (on_mouse && open_count < OPEN_ACT) {
            // まだ表向きになってないカードだったとき
            if (!field[i].isOpen) {
              // 左クリックしたときの処理
              if (app_env.isPushButton(Mouse::LEFT)) {
                app_env.flushInput();
                if (open_count == 0) { click.play(); }   // 1枚目をめくったときだけ SE再生

                field[i].isOpen = true;      // 選んだカードを表にする
                open_count++;                // めくった回数をカウント
                open_hist[hist_count] = i;   // めくったカードの場所を履歴に保存
                hist_count++;                // 履歴を保存した回数をカウント
              }
            }
          }
        }

        // カードを2枚めくったとき
        if (open_count == OPEN_ACT) {
          // カードを続けて選択できるとき
          if (isContinue) {
            // 表にしたカードの情報を取得
            prev_2 = open_hist[hist_count - OPEN_ACT];       // 最初にめくったカード
            prev_1 = open_hist[hist_count - OPEN_ACT + 1];   // 次にめくったカード

            // 表にしたカードの数字が同じだったとき
            if (field[prev_2].number == field[prev_1].number) {
              success.play();   // SE再生

              game_score[DEF_PLAYER]++;   // 点数を加算
              open_chain++;               // ペアを見つけた回数をカウント
              hist_count -= OPEN_ACT;     // 履歴に保存した回数をめくった回数だけ戻す
              game_set = true;            // 残り枚数が変化するので、もう一度確認する
            }

            // 違う数字だったとき、カードを選択できないようにする
            else {
              failure.play();   // SE再生
              isContinue = false;

              // 履歴が埋まったらカウンタをリセット
              if (hist_count >= MAX_HIST) { hist_count = 0; }
            }
          }

          // カードが選択できなくなったとき
          else {
            // 左クリックで相手のターンにする
            if (app_env.isPushButton(Mouse::LEFT)) {
              app_env.flushInput();
              click.play();
              game_turn = false;   // 対戦相手のターンに設定

              // 数字が違うので、表にしたカードを元に戻す
              field[prev_2].isOpen = false;
              field[prev_1].isOpen = false;

              // 各種カウンタのリセット
              open_chain = 0;
              isContinue = true;
              game_set = true;
            }
          }
        }

        break;   // プレイヤーのターン 終了

        // 対戦相手のターン
      case false:
        // カードを選択できなくなるまで処理を実行
        if (isContinue) {
          switch (open_count) {
              // 1枚目:裏向きのカードをランダムに選択
            case 0:
              prev_2 = random.fromZeroToLast(JOKER_NG);

              // ランダムに選択されたカードが裏向きなら決定
              if (!field[prev_2].isOpen) {
                open_count++;   // 2枚目の選択を開始

                // フラグをリセット
                isCheck = false;
                isRandom = true;
              }
              break;

              // 2枚目:履歴を検索、同じ数字が見つからなければランダムに選択
            case 1:
              // 1回だけ履歴を検索する
              if (!isCheck) {
                for (i = 0; i < MAX_HIST; i++) {
                  // 履歴に1枚目と同じ数字があれば「とりあえず」決定、ランダム選択を回避
                  if (field[open_hist[i]].number == field[prev_2].number) {
                    prev_1 = open_hist[i];
                    isRandom = false;
                    break;
                  }
                }

                isCheck = true;   // 履歴を確認したので、次の自分のターンまで確認しない
              }

              // 履歴検索に失敗していたら、ランダムにカードを選択
              if (isRandom) { prev_1 = random.fromZeroToLast(JOKER_NG); }

              // 選択されたカードが裏向き、かつ1枚目と違うカードなら確定、そうでなければランダム選択開始
              if (!field[prev_1].isOpen && prev_1 != prev_2) { open_count++; }
              else { isRandom = true; }
              break;

              // カードを2枚選択したとき
            case 2:
              // 選択されたカードを表向きにする
              field[prev_2].isOpen = true;
              field[prev_1].isOpen = true;

              // 選択された2枚が同じ数字だったら点数を加算して、もう一度選択する
              if (field[prev_1].number == field[prev_2].number) {
                game_score[DEF_RIVAL]++;   // 点数を加算
                game_set = true;           // 残り枚数が変化するので、もう一度確認する
              }

              // 同じ数字ではなかったとき、カードを選択できないように設定
              else { isContinue = false; }
              break;
          }
        }

        // カードを選択できなくなったとき
        else {
          // 左クリックでプレイヤーのターンにする
          if (app_env.isPushButton(Mouse::LEFT)) {
            app_env.flushInput();
            click.play();

            // 選択されたカードを元に戻す
            field[prev_2].isOpen = false;
            field[prev_1].isOpen = false;

            // 各種フラグのリセット
            game_turn = true;
            game_set = true;
            isContinue = true;
            isRandom = false;
          }
        }

        break;   // 対戦相手のターン 終了
    }

    // カード画像の表示
    for (i = 0; i < JOKER_NG; i++) {
      // カードの表示位置設定
      card_x = (Card_W + 8) * ((i % CARD_NUM) - 6.5);
      card_y = (Card_H + 8) * ((i / CARD_NUM) - 1);

      // カードの上にマウスカーソルがあるか判定
      on_mouse = CO_on_mouse(mouse_pos, card_x, card_y, Card_W, Card_H);
      if (field[i].isOpen || (app_env.isPressKey('O') && app_env.isPressKey('P'))) {
        // カードが表側のとき
        drawTextureBox(card_x, card_y, Card_W, Card_H,
          Card_W * field[i].number, Card_H * field[i].mark, Card_W, Card_H,
          t_card, Color(1, 1, 1));
      }
      else {
        // カードが裏側のとき
        drawTextureBox(card_x, card_y, Card_W, Card_H,
          Card_W * 1, Card_H * 4, Card_W, Card_H,
          t_card, NV_set_cardcolor(on_mouse));
      }
    }

    app_env.update();
  } // 本編 終了

  // リザルト画面
  finish.play();
  result_nervous(app_env, system, wframe,
    isContinue, game_set, open_chain,
    game_score[DEF_PLAYER], game_score[DEF_RIVAL]);
}
コード例 #10
0
ファイル: Player.cpp プロジェクト: ryou62525/practice_code
float PlayerMover(AppEnv& env, Player& player)
{
	if (env.isPressKey('S')){ return player.pos.x()++; }
	if (env.isPressKey('A')){ return player.pos.x()--; }
}
コード例 #11
0
ファイル: game_main.cpp プロジェクト: zun-ferrum/Jum7_27
void gameMainUpdate(AppEnv& env) {
  using namespace GameMainVar;
  if (env.isPushKey('R')) {
    setSceneState(SceneState::Result);
  }
}
コード例 #12
0
ファイル: title.cpp プロジェクト: Lacty/Jum7_27
void titleUpdate(AppEnv& env) {
  using namespace TitleVar;
  if (env.isPushButton(Mouse::LEFT)) {
    setSceneState(SceneState::GameMain);
  }
}
コード例 #13
0
// タイトル画面の処理
void game_title(AppEnv& app_env) {

  // 画像の読み込み
  Texture titleBG("res/png/BG04_title.png");        // タイトルの背景
  Texture titleLG("res/png/BG04_title_logo.png");   // タイトルロゴ
  Texture result("res/png/BG05_result.png");        // リザルト画面の背景
  Texture window("res/png/SYS01_window.png");       // ウィンドウ
  Texture button("res/png/SYS03_button.png");       // ボタンの画像

  // BGMの設定

  // この画面だけで使う変数
  bool click = false;   // クリックの真偽判定
  Vec2f mouse_pos;      // マウスカーソルの位置

  // ボタン画像の表示位置
  float button_x, button_y;

  while (1) {
    if (!app_env.isOpen()) { return; }

    // 開始ボタンを押したらループ終了
    if (click) {
      break;
    }

    // マウスの座標を取得
    mouse_pos = app_env.mousePosition();

    app_env.setupDraw();

    // 背景画像の表示
    drawTextureBox(-BG_hW, -(BG_H / 2), BG_W, BG_H,
      0, 0, BG_W, BG_H,
      titleBG, Color(1, 1, 1));

    // ロゴ用フレームの表示
    drawTextureBox(-(TitleLG_W / 2), TitleLG_H, TitleLG_W * 1.1, TitleLG_H * 2,
      0, 0, TitleLG_W, TitleLG_H * 0.5,
      window, Color(1, 1, 1));

    // タイトルロゴの表示
    drawTextureBox(-(TitleLG_W / 2), TitleLG_H, TitleLG_W, TitleLG_H * 2,
      0, 0, TitleLG_W, TitleLG_H * 2,
      titleLG, Color(1, 1, 1));

    // ボタンの処理
    for (short i = 0; i < 2; i++) {
      button_x = (-Button_W * 1.5) + (Button_W * 2) * i;
      button_y = -Button_H;

      // クリック判定
      if (mouse_on_texture(button_x, button_y, Button_W, Button_H, mouse_pos)) {
        if (app_env.isPushButton(Mouse::LEFT)) {
          app_env.flushInput();

          // 開始ボタンの処理
          if (i == 0) { click = true; }
          // 番付ボタンの処理
          else { game_ranking(app_env, result, button); }

          break;
        }
      }

      // ボタン画像の表示
      drawTextureBox(button_x, button_y, Button_W, Button_H,
        0, Button_H * i, Button_W, Button_H,
        button, Color(1, 1, 1));
    }

    app_env.update();
  }
}
コード例 #14
0
ファイル: character.cpp プロジェクト: RoDoRiTos/DRepo_Origin
void Player::hitcheck(AppEnv& app,int& map_id,bool& change){
  /*
  //右側の判定
  if (Square_Hit(this->x,this->y,this->tex_x,this->tex_y,X_MIN + x*CHIP_X,Y_MAX - (y+1)*CHIP_Y,CHIP_X,CHIP_Y)){
  if (this->x>X_MIN + CHIP_X * x + CHIP_X - 6){
  if (this->y + this->tex_y>Y_MAX - (y + 1)*CHIP_Y + 6 && this->y < Y_MAX - (y + 1)*CHIP_Y + CHIP_Y - 6){
  this->x = X_MIN + CHIP_X * x + CHIP_X;
  }
  }
  //左側の判定
  if (this->x + this->tex_x < X_MIN + CHIP_X * x + 6){
  if (this->y + this->tex_y>Y_MAX - (y + 1)*CHIP_Y + 6 && this->y < Y_MAX - (y + 1)*CHIP_Y + CHIP_Y - 6){
  this->x = X_MIN + CHIP_X*x - this->tex_x;
  }
  }
  //上部の判定
  if (this->y>Y_MAX - y * CHIP_Y - 10){
  this->y = Y_MAX - y * CHIP_Y;
  if (!jumping){
  on_foot = true;
  }
  }
  //下部の判定
  if (this->y + this->tex_y <Y_MAX - (y+1) * CHIP_Y + 6){
  if (this->x>X_MIN + CHIP_X * x + 6 && this->x + this->tex_x < X_MIN + CHIP_X * x + CHIP_X){
  this->y = Y_MAX - (y+1) * CHIP_Y - this->tex_y;
  }
  }
  }*/
  for (int y = 0; y < 20; y++){
    for (int x = 0; x < 32; x++){
      //ワープチップ
      if (map[y][x] == 8){
        if (Square_Hit(this->x, this->y, this->tex_x, this->tex_y, X_MIN + x*CHIP_X, Y_MAX - (y + 1)*CHIP_Y, CHIP_X, CHIP_Y)){
          on_platform = false;
          on_foot = false;
          if (app.isPushKey('Z')){
            warp(app, map_id,x,y);
          /*switch (this->map_id){
            case ALPHA01:
              map_id = ALPHA02;
              break;
            case ALPHA02:
              if (x >= 0 && x <= 3){
                map_id = ALPHA03;
              }
              if (x >= 29 && x <= 31){
                map_id = ALPHA04;
              }
              break;
            case ALPHA03:
            case ALPHA04:
              map_id = ALPHA01;
              break;
            }*/
            change = true;
          }
        }
      }
      //上辺のみ当り判定チップ
      else if (map[y][x] == 2){
        if (Square_Hit(this->x, this->y, this->tex_x, this->tex_y, X_MIN + x*CHIP_X, Y_MAX - (y + 1)*CHIP_Y, CHIP_X, CHIP_Y)){
          if (this->y > Y_MAX - CHIP_Y * y - 15){
            if (!jumping){
              on_foot = true;
              on_platform = true;
            }
            this->y = Y_MAX - CHIP_Y * y;
          }
        }
      }
      //上辺&左当り判定チップ
      else if (map[y][x] == 3){
        if (Square_Hit(this->x, this->y, this->tex_x, this->tex_y, X_MIN + x*CHIP_X, Y_MAX - (y + 1)*CHIP_Y, CHIP_X, CHIP_Y)){
          if (this->x + this->tex_x < X_MIN + CHIP_X * x + 10){
            if (this->y + this->tex_y > Y_MAX - (y + 1)*CHIP_Y - 6 && this->y < Y_MAX - (y + 1)*CHIP_Y + CHIP_Y + 6){
              this->x = X_MIN + CHIP_X*x - this->tex_x;
              on_platform = true;
            }
          }
          else if (this->y > Y_MAX - CHIP_Y * y - 15){
            if (!jumping){
              on_foot = true;
              on_platform = true;
            }
            this->y = Y_MAX - CHIP_Y * y;
          }
        }
      }
      //上辺&右当り判定チップ
      else if (map[y][x] == 4){
        if (Square_Hit(this->x, this->y, this->tex_x, this->tex_y, X_MIN + x*CHIP_X, Y_MAX - (y + 1)*CHIP_Y, CHIP_X, CHIP_Y)){
          if (this->x>X_MIN + CHIP_X * x + CHIP_X - 10){
            if (this->y + this->tex_y > Y_MAX - (y + 1)*CHIP_Y - 6 && this->y < Y_MAX - (y + 1)*CHIP_Y + CHIP_Y + 6){
              this->x = X_MIN + CHIP_X * x + CHIP_X;
            }
          }
          else if (this->y > Y_MAX - CHIP_Y * y - 15){
            if (!jumping){
              on_foot = true;
              on_platform = true;
            }
            this->y = Y_MAX - CHIP_Y * y;
          }
        }
      }
      //上辺、下辺当り判定チップ
      else if (map[y][x] == 5){
        if (Square_Hit(this->x, this->y, this->tex_x, this->tex_y, X_MIN + x*CHIP_X, Y_MAX - (y + 1)*CHIP_Y, CHIP_X, CHIP_Y)){
          if (this->y > Y_MAX - CHIP_Y * y - 15){
            if (!jumping){
              on_foot = true;
              on_platform = true;
            }
            this->y = Y_MAX - CHIP_Y * y;
          }
          if (this->y + this->tex_y < Y_MAX - CHIP_Y * (y+1) + 15){
            jumping = false;
            on_platform = false;
            y_speed = 0;
            this->y = Y_MAX - CHIP_Y*(y + 1) -1 - this->tex_y;
          }
        }
      }
      //上辺&左当り判定チップ
      else if (map[y][x] == 6){
        if (Square_Hit(this->x, this->y, this->tex_x, this->tex_y, X_MIN + x*CHIP_X, Y_MAX - (y + 1)*CHIP_Y, CHIP_X, CHIP_Y)){
          if (this->x + this->tex_x < X_MIN + CHIP_X * x + 10){
            if (this->y + this->tex_y > Y_MAX - (y + 1)*CHIP_Y - 6 && this->y < Y_MAX - (y + 1)*CHIP_Y + CHIP_Y + 6){
              this->x = X_MIN + CHIP_X*x - this->tex_x;
              on_platform = true;
            }
          }
          else if (this->y > Y_MAX - CHIP_Y * y - 15){
            if (!jumping){
              on_foot = true;
              on_platform = true;
            }
            this->y = Y_MAX - CHIP_Y * y;
          }
        }
      }
      //上辺&右当り判定チップ
      else if (map[y][x] == 7){
        if (Square_Hit(this->x, this->y, this->tex_x, this->tex_y, X_MIN + x*CHIP_X, Y_MAX - (y + 1)*CHIP_Y, CHIP_X, CHIP_Y)){
          if (this->x>X_MIN + CHIP_X * x + CHIP_X - 10){
            if (this->y + this->tex_y > Y_MAX - (y + 1)*CHIP_Y - 6 && this->y < Y_MAX - (y + 1)*CHIP_Y + CHIP_Y + 6){
              this->x = X_MIN + CHIP_X * x + CHIP_X;
            }
          }
          else if (this->y > Y_MAX - CHIP_Y * y - 15){
            if (!jumping){
              on_foot = true;
              on_platform = true;
            }
            this->y = Y_MAX - CHIP_Y * y;
          }
        }
      }
      //ステージベースチップ
      else if (map[y][x] == 1){
        if (Square_Hit(this->x, this->y, this->tex_x, this->tex_y, X_MIN + x*CHIP_X, Y_MAX - (y + 1)*CHIP_Y, CHIP_X, CHIP_Y)){
          if (!jumping){
            on_foot = true;
            on_platform = true;
          }
          this->y = Y_MAX - (y + 1)*CHIP_Y + CHIP_Y;
        }
      }
      //チップ無し
      else if (map[y][x] == 0){
        if (Square_Hit(this->x, this->y, this->tex_x, this->tex_y, X_MIN + x*CHIP_X, Y_MAX - (y + 1)*CHIP_Y, CHIP_X, CHIP_Y)){
          on_platform = false;
          on_foot = false;
        }
      }
    }
  }
}
コード例 #15
0
ファイル: character.cpp プロジェクト: RoDoRiTos/DRepo_Origin
//移動処理
void Player::move(AppEnv& app){
  this->y += y_speed;
  
  /*---上---*/
  if (app.isPushKey(GLFW_KEY_UP) && on_foot){
    y_speed = 20;
    on_foot = false;
    jumping = true;
  }
  if (!on_platform){
    y_speed -= 0.75;
  }
  if (y_speed < 0){
    jumping = false;
  }
  if (y_speed <= -10){
    y_speed = -10;
  }
  if (on_foot){
    y_speed = 0;
  }

  if (!c_ex.UP && this->y >= UP_X){
    this->y = UP_X;
    ex.UP = true;
  }
  else ex.UP = false;

  if (!c_ex.UP && ex.UP){
    cam_y += 10;
  }

  if (cam_y >= 800){
    cam_y = 800;
    c_ex.UP = true;
    if (y + tex_y >= 400){
      y = 400 - tex_y;
      y_speed = -0.75;
    }
  }

  if (c_ex.UP && this->y<UP_X){
    c_ex.UP = false;
  }

  /*///--左--///*/
  //!カメラのx軸最少値(左) && ボタン判定 && 動ける範囲内
  if (!c_ex.LEFT && app.isPressKey(GLFW_KEY_LEFT) && x > LEFT_X){
    x -= speed;
    if (x <= LEFT_X){
      x = LEFT_X;
    }
  }

  //ボタン判定 && 動ける範囲のx軸最小値(左)
  if (app.isPressKey(GLFW_KEY_LEFT) && x <= LEFT_X){
    ex.LEFT = true;
  }
  else ex.LEFT = false;//それ以外はfalse


  //!カメラx軸最小値(左) && 動ける範囲のx軸最小値(左)
  if (!c_ex.LEFT && ex.LEFT){
    //カメラが動く
    cam_x -= speed;
    if (cam_x < 0){     //最小値により小さくなれば、カメラ固定
      cam_x = 0;
      c_ex.LEFT = true; //カメラのx軸最少値(左)に居る判定
    }
  }

  //カメラのx軸最小値(左)に居る判定
  if (c_ex.LEFT && app.isPressKey(GLFW_KEY_LEFT)){
    //カメラが固定されたら、カメラ方向に行ける
    x -= speed;
    if (x <= -640){
      x = -640;
    }
  }

  //フラグがtrue && 動ける範囲に戻った
  if (c_ex.LEFT && x > LEFT_X){
    c_ex.LEFT = false;//カメラの最小値には居ない
  }

  /*---下---*/

  if (!c_ex.DOWN && this->y <= DOWN_X){
    this->y = DOWN_X;
    ex.DOWN = true;
  }
  else ex.DOWN = false;

  if (!c_ex.DOWN && ex.DOWN){
    cam_y -= 10;
  }

  if (cam_y <= 0){
    cam_y = 0;
    c_ex.DOWN = true;
  }

  if (c_ex.DOWN && this->y > DOWN_X){
    c_ex.DOWN = false;
  }

  /*///--右--///*/
  //!カメラのx軸最大値(右) && ボタン判定 && 動ける範囲内
  if (!c_ex.RIGHT && app.isPressKey(GLFW_KEY_RIGHT) && x < RIGHT_X){
    x += speed;
    if (x >= RIGHT_X){
      x = RIGHT_X;
    }
  }

  //ボタン判定 && 動ける範囲のx軸最大値(右)
  if (app.isPressKey(GLFW_KEY_RIGHT) && x >= RIGHT_X){
    ex.RIGHT = true;
  }
  else ex.RIGHT = false;//それ以外はfalse

  //!カメラのx軸最大値(右) && 動ける範囲のx軸最大値(右)
  if (!c_ex.RIGHT && ex.RIGHT){
    //カメラが動く
    cam_x += speed;
    if (cam_x > 1280){  //最小値により小さくなれば、カメラ固定
      cam_x = 1280;
      c_ex.RIGHT = true;//カメラのx軸最大値(右)に居る判定
    }
  }

  //カメラのx軸最大値(右)に居る判定
  if (c_ex.RIGHT && app.isPressKey(GLFW_KEY_RIGHT)){
    //カメラが固定されたら、カメラ方向に行ける
    x += speed;
    if (x + tex_x >= 640){
      x = 640 - tex_x;
    }
  }

  //フラグがtrue && 動ける範囲に戻った
  if (c_ex.RIGHT && x < RIGHT_X){
    c_ex.RIGHT = false;//カメラの最大値には居ない
  }

  std::cout << "X " << this->x << std::endl;
  std::cout << "Y " << this->y << std::endl;
  std::cout << "cam_X " << this->cam_x << std::endl;
  std::cout << "cam_Y " << this->cam_y << std::endl;
  std::cout << "ex " << this->ex.UP << this->ex.LEFT << this->ex.DOWN << this->ex.RIGHT << std::endl;
  std::cout << "c_ex " << this->c_ex.UP << this->c_ex.LEFT << this->c_ex.DOWN << this->c_ex.RIGHT << std::endl;
}
コード例 #16
0
ファイル: Map.cpp プロジェクト: nunosan12/jin
void Map::drawMap(AppEnv& env) {

	Player player;

	int map[56][32];

	int x, y;

	

	std::ifstream mapfile("res/mapchip.txt");
	for (y = 0; y < 56; y += 1) {
		for (x = 0; x < 32; x += 1) {
			mapfile >> map[y][x];
			
		}
	}

	bool map_flag = true;
	if (map_flag) {


		const char* mapfile = "res/mapchip.txt";
		std::ifstream* list = new std::ifstream(mapfile);

		for (y = 0; y < 56; y += 1) {
			for (x = 0; x < 32; x += 1) {
				*list >> map[y][x];
				//map[y][x] = 0, 1;
				std::cout << map[y][x];
				
			}
			std::cout << std::endl;
		}

		if (!env.isOpen()) exit(0);
		{
			std::fstream file;
			file.open("res/mapchip.txt", std::ios::out | std::ios::binary);
			for (y = 0; y < 56; y += 1) {
				for (x = 0; x < 32; x += 1) {
					float x_offset = (map[y][x] % 1) * CHIP_SIZE;
					float y_offset = (map[y][x] / 1) * CHIP_SIZE;

					file << map[y][x] << ' ';

					if (map[y][x] == 0) {
						drawTextureBox(map_pos.x() + (x * CHIP_SIZE), map_pos.y() - (y * CHIP_SIZE), CHIP_SIZE, CHIP_SIZE,
							x_offset, y_offset, 64, 64, yuka, Color::white, 0.0, Vec2f(1.0, 1.0), Vec2f(32, 32));
					}
					if (map[y][x] == 1) {
						drawTextureBox(map_pos.x() + (x * CHIP_SIZE), map_pos.y() - (y * CHIP_SIZE), CHIP_SIZE, CHIP_SIZE,
							x_offset, y_offset, 64, 64, block, Color::white, 0.0, Vec2f(1.0, 1.0), Vec2f(32, 32));

						player.HitBlocks(map_pos.x() + (x * CHIP_SIZE), map_pos.y() - (y * CHIP_SIZE), CHIP_SIZE, CHIP_SIZE);

					}
					
					
				}
				file << std::endl;
			}
			file.close();

			
			


		}
		
		player.Move(env, map_pos);

	}
	env.flushInput();
}