Extra2D/examples/push_box/PlayScene.h

114 lines
2.5 KiB
C
Raw Normal View History

// ============================================================================
// PlayScene.h - Push Box 游戏场景
// ============================================================================
2026-02-11 19:40:26 +08:00
#pragma once
#include "BaseScene.h"
2026-02-11 19:40:26 +08:00
#include "data.h"
#include <extra2d/extra2d.h>
#include <extra2d/utils/object_pool.h>
#include <stack>
2026-02-11 19:40:26 +08:00
namespace pushbox {
/**
* @brief Push Box
*/
class PlayScene : public BaseScene {
2026-02-11 19:40:26 +08:00
public:
/**
* @brief
* @param level
*/
2026-02-11 19:40:26 +08:00
explicit PlayScene(int level);
/**
* @brief
*/
2026-02-11 19:40:26 +08:00
void onEnter() override;
/**
* @brief
* @param dt
*/
2026-02-11 19:40:26 +08:00
void onUpdate(float dt) override;
private:
/**
* @brief
*/
2026-02-11 19:40:26 +08:00
void updateMenuColors();
/**
* @brief
*/
2026-02-11 19:40:26 +08:00
void executeMenuItem();
/**
* @brief
*/
2026-02-11 19:40:26 +08:00
void flush();
/**
* @brief
* @param level
*/
2026-02-11 19:40:26 +08:00
void setLevel(int level);
/**
* @brief
* @param step
*/
2026-02-11 19:40:26 +08:00
void setStep(int step);
/**
* @brief
* @param dx X方向偏移
* @param dy Y方向偏移
* @param direct 1=2=3=4=
*/
2026-02-11 19:40:26 +08:00
void move(int dx, int dy, int direct);
/**
* @brief
*/
2026-02-11 19:40:26 +08:00
void gameOver();
/**
* @brief 使
*/
void undoMove();
2026-02-11 19:40:26 +08:00
int step_ = 0;
int menuIndex_ = 0;
Map map_{};
extra2d::Ptr<extra2d::FontAtlas> font28_;
extra2d::Ptr<extra2d::FontAtlas> font20_;
extra2d::Ptr<extra2d::Text> levelText_;
extra2d::Ptr<extra2d::Text> stepText_;
extra2d::Ptr<extra2d::Text> bestText_;
extra2d::Ptr<extra2d::Text> restartText_;
extra2d::Ptr<extra2d::Text> soundToggleText_;
extra2d::Ptr<extra2d::Text> undoText_;
2026-02-11 19:40:26 +08:00
extra2d::Ptr<extra2d::Node> mapLayer_;
extra2d::Ptr<extra2d::Button> soundBtn_;
2026-02-11 19:40:26 +08:00
extra2d::Ptr<extra2d::Texture> texWall_;
extra2d::Ptr<extra2d::Texture> texPoint_;
extra2d::Ptr<extra2d::Texture> texFloor_;
extra2d::Ptr<extra2d::Texture> texBox_;
extra2d::Ptr<extra2d::Texture> texBoxInPoint_;
extra2d::Ptr<extra2d::Texture> texMan_[5];
extra2d::Ptr<extra2d::Texture> texManPush_[5];
// 对象池使用示例:使用智能指针管理 MoveRecord
std::stack<extra2d::Ptr<MoveRecord>> moveHistory_;
2026-02-11 19:40:26 +08:00
};
} // namespace pushbox