#pragma once #include "head.h" class GameSudo : public UI::Scene { public: GameSudo(); virtual void Update() override; virtual void Render() override; ~GameSudo() { delete _coor; } // 生成局面 void CreateSudo(int remove_num); // 检查是否可填入值 bool CheckVaild(int x, int y, int val); // 刷新ui void RefreshUI(); // 越界检查 bool IsInRange(int x, int y); // 检查局面是否有唯一解,0表示没有,其余表示求解次数 size_t CheckSole(); // 屏幕坐标 -> 格子坐标 Point Pos2Xy(const Position& pos); // 返回剩余未填格子数 size_t GetRemain(); // 推理当前格子应该填啥,无法判断返回0 int GetMustNumber(int x, int y); private: UI::Panel* _panelMenu; // 右侧按钮 UI::Panel* _panelNumber;// 数字按钮 UI::Panel* _panelDiff; // 难度生成 UI::Panel* _panelSeed; // 种子生成 Coor* _coor; UI::Text* _uiTxt; // 右侧信息 gcText _txtMouse; UI::ButtonSprite* _btnBack; size_t _countErr; struct NumberNode { int _number; bool _bFixed; gcText _txt; }; Array2 _vecNum; int _diff; // 难度 int _curNumber; // 当前选择数字 time_t _tStart; // 开始局时 int _gameState; // 状态 0.未开始 1.进行中 2.完成 void _update_time(); };