Files
2026-09-16 14:07:40 +08:00

61 lines
1.3 KiB
C++

#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<NumberNode, 9, 9> _vecNum;
int _diff; // 难度
int _curNumber; // 当前选择数字
time_t _tStart; // 开始局时
int _gameState; // 状态 0.未开始 1.进行中 2.完成
void _update_time();
};