// ============================================================================ // PlayScene.h - Push Box 游戏场景 // ============================================================================ #pragma once #include "BaseScene.h" #include "data.h" #include #include #include namespace pushbox { /** * @brief Push Box 游戏场景 */ class PlayScene : public BaseScene { public: /** * @brief 构造函数 * @param level 关卡编号 */ explicit PlayScene(int level); /** * @brief 场景进入时调用 */ void onEnter() override; /** * @brief 每帧更新 * @param dt 帧间隔时间 */ void onUpdate(float dt) override; private: /** * @brief 更新菜单颜色 */ void updateMenuColors(); /** * @brief 执行选中的菜单项 */ void executeMenuItem(); /** * @brief 刷新地图显示 */ void flush(); /** * @brief 设置关卡 * @param level 关卡编号 */ void setLevel(int level); /** * @brief 设置步数 * @param step 步数 */ void setStep(int step); /** * @brief 移动玩家 * @param dx X方向偏移 * @param dy Y方向偏移 * @param direct 方向(1=上,2=下,3=左,4=右) */ void move(int dx, int dy, int direct); /** * @brief 游戏通关 */ void gameOver(); /** * @brief 撤销上一步移动(对象池使用示例) */ void undoMove(); int step_ = 0; int menuIndex_ = 0; Map map_{}; extra2d::Ptr font28_; extra2d::Ptr font20_; extra2d::Ptr levelText_; extra2d::Ptr stepText_; extra2d::Ptr bestText_; extra2d::Ptr restartText_; extra2d::Ptr soundToggleText_; extra2d::Ptr undoText_; extra2d::Ptr mapLayer_; extra2d::Ptr soundBtn_; extra2d::Ptr texWall_; extra2d::Ptr texPoint_; extra2d::Ptr texFloor_; extra2d::Ptr texBox_; extra2d::Ptr texBoxInPoint_; extra2d::Ptr texMan_[5]; extra2d::Ptr texManPush_[5]; // 对象池使用示例:使用智能指针管理 MoveRecord std::stack> moveHistory_; }; } // namespace pushbox