61 lines
1.3 KiB
C++
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();
|
|
}; |