完善关卡逻辑
This commit is contained in:
BIN
assets/atlas/comp/icon_clock.png
Normal file
BIN
assets/atlas/comp/icon_clock.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 589 B |
6
assets/atlas/comp/icon_clock.png.meta
Normal file
6
assets/atlas/comp/icon_clock.png.meta
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"uuid": "2b4d26c7-ae87-47a3-8084-29a243441634",
|
||||||
|
"importer": {
|
||||||
|
"textureType": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,17 +20,31 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_$child": [
|
"_$child": [
|
||||||
|
{
|
||||||
|
"_$id": "4udntov4",
|
||||||
|
"_$type": "Image",
|
||||||
|
"name": "mask",
|
||||||
|
"width": 1080,
|
||||||
|
"height": 1920,
|
||||||
|
"alpha": 0.4,
|
||||||
|
"left": 0,
|
||||||
|
"right": 0,
|
||||||
|
"top": 0,
|
||||||
|
"bottom": 0,
|
||||||
|
"skin": "res://a98f334e-ce04-4cd0-8fc5-bbdf9b048609",
|
||||||
|
"color": "#000000"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"_$id": "jzxgx41i",
|
"_$id": "jzxgx41i",
|
||||||
"_$type": "Box",
|
"_$type": "Box",
|
||||||
"name": "offset",
|
"name": "offset",
|
||||||
"y": 560,
|
"y": 3000,
|
||||||
"width": 1080,
|
"width": 1080,
|
||||||
"height": 1360,
|
"height": 1360,
|
||||||
"_mouseState": 2,
|
"_mouseState": 2,
|
||||||
"left": 0,
|
"left": 0,
|
||||||
"right": 0,
|
"right": 0,
|
||||||
"bottom": 0,
|
"bottom": -2440,
|
||||||
"_$child": [
|
"_$child": [
|
||||||
{
|
{
|
||||||
"_$id": "bd1s5tvm",
|
"_$id": "bd1s5tvm",
|
||||||
@@ -130,6 +144,14 @@
|
|||||||
"x": 72,
|
"x": 72,
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"_$comp": [
|
||||||
|
{
|
||||||
|
"_$type": "8857686b-9b2c-4e9c-af0f-0164c0994e46",
|
||||||
|
"scriptPath": "../src/views/CommonData.ts",
|
||||||
|
"intValue": 0,
|
||||||
|
"strValue": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
"_$child": [
|
"_$child": [
|
||||||
{
|
{
|
||||||
"_$id": "590euu2q",
|
"_$id": "590euu2q",
|
||||||
@@ -137,6 +159,7 @@
|
|||||||
"name": "Sprite",
|
"name": "Sprite",
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"mouseThrough": true,
|
||||||
"_gcmds": [
|
"_gcmds": [
|
||||||
{
|
{
|
||||||
"_$type": "DrawRoundRectCmd",
|
"_$type": "DrawRoundRectCmd",
|
||||||
@@ -179,6 +202,14 @@
|
|||||||
"y": 194,
|
"y": 194,
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"_$comp": [
|
||||||
|
{
|
||||||
|
"_$type": "8857686b-9b2c-4e9c-af0f-0164c0994e46",
|
||||||
|
"scriptPath": "../src/views/CommonData.ts",
|
||||||
|
"intValue": 0,
|
||||||
|
"strValue": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
"_$child": [
|
"_$child": [
|
||||||
{
|
{
|
||||||
"_$id": "yjk1xq2a",
|
"_$id": "yjk1xq2a",
|
||||||
@@ -186,6 +217,7 @@
|
|||||||
"name": "Sprite",
|
"name": "Sprite",
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"mouseThrough": true,
|
||||||
"_gcmds": [
|
"_gcmds": [
|
||||||
{
|
{
|
||||||
"_$type": "DrawRoundRectCmd",
|
"_$type": "DrawRoundRectCmd",
|
||||||
@@ -228,6 +260,14 @@
|
|||||||
"y": 388,
|
"y": 388,
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"_$comp": [
|
||||||
|
{
|
||||||
|
"_$type": "8857686b-9b2c-4e9c-af0f-0164c0994e46",
|
||||||
|
"scriptPath": "../src/views/CommonData.ts",
|
||||||
|
"intValue": 0,
|
||||||
|
"strValue": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
"_$child": [
|
"_$child": [
|
||||||
{
|
{
|
||||||
"_$id": "nfk6pjgd",
|
"_$id": "nfk6pjgd",
|
||||||
@@ -235,6 +275,7 @@
|
|||||||
"name": "Sprite",
|
"name": "Sprite",
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"mouseThrough": true,
|
||||||
"_gcmds": [
|
"_gcmds": [
|
||||||
{
|
{
|
||||||
"_$type": "DrawRoundRectCmd",
|
"_$type": "DrawRoundRectCmd",
|
||||||
@@ -277,6 +318,14 @@
|
|||||||
"y": 582,
|
"y": 582,
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"_$comp": [
|
||||||
|
{
|
||||||
|
"_$type": "8857686b-9b2c-4e9c-af0f-0164c0994e46",
|
||||||
|
"scriptPath": "../src/views/CommonData.ts",
|
||||||
|
"intValue": 0,
|
||||||
|
"strValue": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
"_$child": [
|
"_$child": [
|
||||||
{
|
{
|
||||||
"_$id": "nogfpbyx",
|
"_$id": "nogfpbyx",
|
||||||
@@ -284,6 +333,7 @@
|
|||||||
"name": "Sprite",
|
"name": "Sprite",
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"mouseThrough": true,
|
||||||
"_gcmds": [
|
"_gcmds": [
|
||||||
{
|
{
|
||||||
"_$type": "DrawRoundRectCmd",
|
"_$type": "DrawRoundRectCmd",
|
||||||
@@ -326,6 +376,14 @@
|
|||||||
"y": 776,
|
"y": 776,
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"_$comp": [
|
||||||
|
{
|
||||||
|
"_$type": "8857686b-9b2c-4e9c-af0f-0164c0994e46",
|
||||||
|
"scriptPath": "../src/views/CommonData.ts",
|
||||||
|
"intValue": 0,
|
||||||
|
"strValue": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
"_$child": [
|
"_$child": [
|
||||||
{
|
{
|
||||||
"_$id": "2unm1bxx",
|
"_$id": "2unm1bxx",
|
||||||
@@ -333,6 +391,7 @@
|
|||||||
"name": "Sprite",
|
"name": "Sprite",
|
||||||
"width": 936,
|
"width": 936,
|
||||||
"height": 144,
|
"height": 144,
|
||||||
|
"mouseThrough": true,
|
||||||
"_gcmds": [
|
"_gcmds": [
|
||||||
{
|
{
|
||||||
"_$type": "DrawRoundRectCmd",
|
"_$type": "DrawRoundRectCmd",
|
||||||
|
|||||||
@@ -14,9 +14,15 @@
|
|||||||
{
|
{
|
||||||
"_$type": "f2970e4d-7a09-4a9b-aef3-45d330c86f4f",
|
"_$type": "f2970e4d-7a09-4a9b-aef3-45d330c86f4f",
|
||||||
"scriptPath": "../src/views/Home.ts",
|
"scriptPath": "../src/views/Home.ts",
|
||||||
"btn_start": {
|
"btn_new_blue": {
|
||||||
"_$ref": "6irhm6t7"
|
"_$ref": "6irhm6t7"
|
||||||
},
|
},
|
||||||
|
"btn_continue": {
|
||||||
|
"_$ref": "9rcb0wtp"
|
||||||
|
},
|
||||||
|
"btn_new_white": {
|
||||||
|
"_$ref": "n4ggvqc0"
|
||||||
|
},
|
||||||
"btn_clean": {
|
"btn_clean": {
|
||||||
"_$ref": "mdqfz48j"
|
"_$ref": "mdqfz48j"
|
||||||
}
|
}
|
||||||
@@ -36,16 +42,34 @@
|
|||||||
"skin": "res://a98f334e-ce04-4cd0-8fc5-bbdf9b048609",
|
"skin": "res://a98f334e-ce04-4cd0-8fc5-bbdf9b048609",
|
||||||
"color": "#f5f7fb"
|
"color": "#f5f7fb"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"_$id": "vxgd702p",
|
||||||
|
"_$type": "Label",
|
||||||
|
"name": "Label",
|
||||||
|
"x": 144,
|
||||||
|
"y": 760,
|
||||||
|
"width": 792,
|
||||||
|
"height": 400,
|
||||||
|
"centerX": 0,
|
||||||
|
"centerY": 0,
|
||||||
|
"text": "Classic\nSudoku",
|
||||||
|
"fontSize": 100,
|
||||||
|
"color": "rgba(123, 129, 140, 1)",
|
||||||
|
"bold": true,
|
||||||
|
"align": "center",
|
||||||
|
"valign": "middle",
|
||||||
|
"padding": "0,0,0,0"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"_$id": "6irhm6t7",
|
"_$id": "6irhm6t7",
|
||||||
"_$type": "Box",
|
"_$type": "Box",
|
||||||
"name": "btn_start",
|
"name": "btn_new_blue",
|
||||||
"x": 144,
|
"x": 144,
|
||||||
"y": 1464,
|
"y": 1488,
|
||||||
"width": 792,
|
"width": 792,
|
||||||
"height": 168,
|
"height": 168,
|
||||||
"centerX": 0,
|
"centerX": 0,
|
||||||
"centerY": 588,
|
"centerY": 612,
|
||||||
"_$child": [
|
"_$child": [
|
||||||
{
|
{
|
||||||
"_$id": "ry13plzy",
|
"_$id": "ry13plzy",
|
||||||
@@ -88,6 +112,142 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"_$id": "9rcb0wtp",
|
||||||
|
"_$type": "Box",
|
||||||
|
"name": "btn_continue",
|
||||||
|
"x": 144,
|
||||||
|
"y": 1376,
|
||||||
|
"width": 792,
|
||||||
|
"height": 168,
|
||||||
|
"centerX": 0,
|
||||||
|
"centerY": 500,
|
||||||
|
"_$child": [
|
||||||
|
{
|
||||||
|
"_$id": "vfod7fmk",
|
||||||
|
"_$type": "Sprite",
|
||||||
|
"name": "Sprite",
|
||||||
|
"width": 792,
|
||||||
|
"height": 168,
|
||||||
|
"_gcmds": [
|
||||||
|
{
|
||||||
|
"_$type": "DrawRoundRectCmd",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"lt": 20,
|
||||||
|
"rt": 20,
|
||||||
|
"lb": 20,
|
||||||
|
"rb": 20,
|
||||||
|
"percent": true,
|
||||||
|
"lineWidth": 1,
|
||||||
|
"fillColor": "rgba(29, 92, 220, 1)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_$id": "f8ylua31",
|
||||||
|
"_$type": "Label",
|
||||||
|
"name": "Label",
|
||||||
|
"y": -32,
|
||||||
|
"width": 792,
|
||||||
|
"height": 168,
|
||||||
|
"centerX": 0,
|
||||||
|
"centerY": -32,
|
||||||
|
"text": "Continue",
|
||||||
|
"fontSize": 80,
|
||||||
|
"color": "#FFFFFF",
|
||||||
|
"bold": true,
|
||||||
|
"align": "center",
|
||||||
|
"valign": "middle",
|
||||||
|
"padding": "0,0,0,0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_$id": "pr17wcli",
|
||||||
|
"_$type": "Image",
|
||||||
|
"name": "time",
|
||||||
|
"x": 227,
|
||||||
|
"y": 107,
|
||||||
|
"width": 35,
|
||||||
|
"height": 35,
|
||||||
|
"centerX": -152,
|
||||||
|
"centerY": 40,
|
||||||
|
"skin": "res://2b4d26c7-ae87-47a3-8084-29a243441634",
|
||||||
|
"useSourceSize": true,
|
||||||
|
"color": "#ffffff",
|
||||||
|
"_$child": [
|
||||||
|
{
|
||||||
|
"_$id": "2l5pfddm",
|
||||||
|
"_$type": "Label",
|
||||||
|
"name": "label_time",
|
||||||
|
"x": 55,
|
||||||
|
"y": -2,
|
||||||
|
"width": 400,
|
||||||
|
"height": 35,
|
||||||
|
"text": "99:00:00-Hard",
|
||||||
|
"fontSize": 40,
|
||||||
|
"color": "rgba(255, 255, 255, 0.6078431372549019)",
|
||||||
|
"bold": true,
|
||||||
|
"valign": "middle",
|
||||||
|
"padding": "0,0,0,0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_$id": "n4ggvqc0",
|
||||||
|
"_$type": "Box",
|
||||||
|
"name": "btn_new_white",
|
||||||
|
"x": 144,
|
||||||
|
"y": 1598,
|
||||||
|
"width": 792,
|
||||||
|
"height": 168,
|
||||||
|
"centerX": 0,
|
||||||
|
"centerY": 722,
|
||||||
|
"_$child": [
|
||||||
|
{
|
||||||
|
"_$id": "sez4l9sx",
|
||||||
|
"_$type": "Sprite",
|
||||||
|
"name": "Sprite",
|
||||||
|
"width": 792,
|
||||||
|
"height": 168,
|
||||||
|
"_gcmds": [
|
||||||
|
{
|
||||||
|
"_$type": "DrawRoundRectCmd",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"lt": 20,
|
||||||
|
"rt": 20,
|
||||||
|
"lb": 20,
|
||||||
|
"rb": 20,
|
||||||
|
"percent": true,
|
||||||
|
"lineWidth": 1,
|
||||||
|
"fillColor": "rgba(255, 255, 255, 1)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_$id": "ihe7vkr1",
|
||||||
|
"_$type": "Label",
|
||||||
|
"name": "Label",
|
||||||
|
"width": 792,
|
||||||
|
"height": 168,
|
||||||
|
"centerX": 0,
|
||||||
|
"centerY": 0,
|
||||||
|
"text": "New Game",
|
||||||
|
"fontSize": 100,
|
||||||
|
"color": "rgba(29, 92, 220, 1)",
|
||||||
|
"bold": true,
|
||||||
|
"align": "center",
|
||||||
|
"valign": "middle",
|
||||||
|
"padding": "0,0,0,0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"_$id": "mdqfz48j",
|
"_$id": "mdqfz48j",
|
||||||
"_$type": "Box",
|
"_$type": "Box",
|
||||||
|
|||||||
15
src/Main.ts
15
src/Main.ts
@@ -1,9 +1,20 @@
|
|||||||
|
|
||||||
|
|
||||||
|
import { StorageManager } from "./models/StorageManager";
|
||||||
|
import { LevelManager } from "./models/LevelManager";
|
||||||
const { regClass, property } = Laya;
|
const { regClass, property } = Laya;
|
||||||
|
|
||||||
@regClass()
|
@regClass()
|
||||||
export class Main extends Laya.Script {
|
export class Main extends Laya.Script {
|
||||||
|
|
||||||
onStart() {
|
onAwake() {
|
||||||
console.log("Game start");
|
console.log("Game awake");
|
||||||
|
|
||||||
|
LevelManager.getInstance().init()
|
||||||
|
StorageManager.getInstance().init()
|
||||||
|
}
|
||||||
|
|
||||||
|
onLateUpdate(): void {
|
||||||
|
StorageManager.getInstance().saveStage()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,17 +4,25 @@ export const config = {
|
|||||||
|
|
||||||
BREAK_POINT: 1, // 竖版和横版的分界宽度
|
BREAK_POINT: 1, // 竖版和横版的分界宽度
|
||||||
|
|
||||||
DEBUG: false,
|
DEBUG: true,
|
||||||
OPEN_GUIDE: true,
|
OPEN_GUIDE: true,
|
||||||
|
|
||||||
MISTAKE_MAX: 3,//最大错误数
|
MISTAKE_MAX: 3,//最大错误数
|
||||||
|
|
||||||
|
STAGE_TYPE: {//关卡类型
|
||||||
|
MAIN: 1,//主线
|
||||||
|
DC: 2,//每日挑战
|
||||||
|
},
|
||||||
|
|
||||||
|
DEFAULT_STAGE_ID: "main",//主线关卡标识
|
||||||
|
|
||||||
|
|
||||||
DIFFICULTY_TYPE: {//难度
|
DIFFICULTY_TYPE: {//难度
|
||||||
Easy: 1,
|
Easy: "Easy",
|
||||||
Medium: 2,
|
Medium: "Medium",
|
||||||
Hard: 3,
|
Hard: "Hard",
|
||||||
Expert: 4,
|
Expert: "Expert",
|
||||||
Extreme: 5,
|
Extreme: "Extreme",
|
||||||
},
|
},
|
||||||
|
|
||||||
BLOCK_COLOR: {
|
BLOCK_COLOR: {
|
||||||
|
|||||||
@@ -7,5 +7,6 @@ export const respath = {
|
|||||||
gamedone_ui_res: "resources/GameDone.lh",
|
gamedone_ui_res: "resources/GameDone.lh",
|
||||||
|
|
||||||
score_add_ui_res: "resources/ScoreAdd.lh",
|
score_add_ui_res: "resources/ScoreAdd.lh",
|
||||||
|
difficulty_ui_res: "resources/Difficulty.lh",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { StorageManager } from "./StorageManager"
|
import { StorageManager } from "./StorageManager"
|
||||||
import { DOBlock } from "./DOBlock"
|
import { DOBlock } from "./DOBlock"
|
||||||
import { DataBlock, DataUndo, DataStage } from "../types/global"
|
import { DataBlock, DataUndo, DataStage } from "../types/global"
|
||||||
|
import { LevelManager } from "./LevelManager"
|
||||||
|
|
||||||
|
|
||||||
export class DOStage {
|
export class DOStage {
|
||||||
@@ -13,7 +14,7 @@ export class DOStage {
|
|||||||
private letterToNumber: Map<string, number>;
|
private letterToNumber: Map<string, number>;
|
||||||
private numberToLetter: Map<number, string>;
|
private numberToLetter: Map<number, string>;
|
||||||
|
|
||||||
constructor(dataStage: DataStage, levelStr: string) {
|
constructor(dataStage: DataStage) {
|
||||||
this.data = dataStage
|
this.data = dataStage
|
||||||
|
|
||||||
this.letterToNumber = new Map();
|
this.letterToNumber = new Map();
|
||||||
@@ -44,8 +45,9 @@ export class DOStage {
|
|||||||
blockMap.set(dataBlock.index, dataBlock)
|
blockMap.set(dataBlock.index, dataBlock)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (levelStr.length != 81) {
|
var levelStr = LevelManager.getInstance().getLevelStr(this.data.difficulty, this.data.index)
|
||||||
console.log("levelStr error", levelStr.length)
|
if (!levelStr || levelStr.length != 81) {
|
||||||
|
console.log("levelStr error", this.data.difficulty, this.data.index, levelStr)
|
||||||
}
|
}
|
||||||
var list = new Map();
|
var list = new Map();
|
||||||
for (var i=0; i<levelStr.length; i++) {
|
for (var i=0; i<levelStr.length; i++) {
|
||||||
@@ -79,12 +81,26 @@ export class DOStage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public getData(): DataStage {
|
||||||
|
return this.data
|
||||||
|
}
|
||||||
|
|
||||||
//====================================持久化数据
|
//====================================持久化数据
|
||||||
public get_difficulty(): number {
|
public get_stageID(): string {
|
||||||
|
return this.data.id
|
||||||
|
}
|
||||||
|
public get_stageType(): number {
|
||||||
|
return this.data.type
|
||||||
|
}
|
||||||
|
public get_stageName(): string {
|
||||||
|
return this.data.name
|
||||||
|
}
|
||||||
|
public get_difficulty(): string {
|
||||||
return this.data.difficulty
|
return this.data.difficulty
|
||||||
}
|
}
|
||||||
|
public get_stageIndex(): number {
|
||||||
|
return this.data.index
|
||||||
|
}
|
||||||
|
|
||||||
public get_mistake(): number {
|
public get_mistake(): number {
|
||||||
return this.data.mistake
|
return this.data.mistake
|
||||||
@@ -99,7 +115,7 @@ export class DOStage {
|
|||||||
}
|
}
|
||||||
public set_duration(duration: number): void {//关卡计时
|
public set_duration(duration: number): void {//关卡计时
|
||||||
this.data.duration = duration
|
this.data.duration = duration
|
||||||
// StorageManager.getInstance().onChanged()
|
StorageManager.getInstance().onChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
public get_note_open(): boolean {
|
public get_note_open(): boolean {
|
||||||
|
|||||||
70
src/models/DOUser.ts
Normal file
70
src/models/DOUser.ts
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
import { DataProgress, DataUser } from "../types/global";
|
||||||
|
import { StorageManager } from "./StorageManager"
|
||||||
|
|
||||||
|
|
||||||
|
export class DOUser {
|
||||||
|
|
||||||
|
private data: DataUser
|
||||||
|
|
||||||
|
|
||||||
|
constructor(dataUser: DataUser) {
|
||||||
|
this.data = dataUser
|
||||||
|
}
|
||||||
|
public getData(): DataUser {
|
||||||
|
return this.data
|
||||||
|
}
|
||||||
|
|
||||||
|
//====================================持久化数据
|
||||||
|
public get_isCompletedMain(): boolean {
|
||||||
|
return this.data.isCompletedMain
|
||||||
|
}
|
||||||
|
public set_isCompletedMain(isCompletedMain: boolean): void {
|
||||||
|
this.data.isCompletedMain = isCompletedMain
|
||||||
|
StorageManager.getInstance().saveUser()
|
||||||
|
}
|
||||||
|
|
||||||
|
public get_dones(): Array<string> {
|
||||||
|
return this.data.dones
|
||||||
|
}
|
||||||
|
public add_done(stageID: string): void {
|
||||||
|
if (this.data.dones.indexOf(stageID) < 0) {
|
||||||
|
this.data.dones.push(stageID)
|
||||||
|
StorageManager.getInstance().saveUser()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public get_progress(difficulty: string): number {
|
||||||
|
var find: DataProgress
|
||||||
|
for (var i=0; i<this.data.progresses.length; i++) {
|
||||||
|
var obj = this.data.progresses[i]
|
||||||
|
if (obj.difficulty == difficulty) {
|
||||||
|
find = obj
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (find) {
|
||||||
|
return find.index
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
public update_progress(difficulty: string, index: number): void {
|
||||||
|
var find: DataProgress
|
||||||
|
for (var i=0; i<this.data.progresses.length; i++) {
|
||||||
|
var obj = this.data.progresses[i]
|
||||||
|
if (obj.difficulty == difficulty) {
|
||||||
|
find = obj
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (find) {
|
||||||
|
find.index = index
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
find = {difficulty: difficulty, index: index}
|
||||||
|
this.data.progresses.push(find)
|
||||||
|
}
|
||||||
|
StorageManager.getInstance().saveUser()
|
||||||
|
}
|
||||||
|
|
||||||
|
//====================================持久化数据
|
||||||
|
}
|
||||||
3
src/models/DOUser.ts.meta
Normal file
3
src/models/DOUser.ts.meta
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"uuid": "fc4cb9cd-3bc4-47e8-bfd4-6adbaea331b8"
|
||||||
|
}
|
||||||
151
src/models/LevelManager.ts
Normal file
151
src/models/LevelManager.ts
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
import { config } from "../constants/config"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const Easy = [
|
||||||
|
"aBCeIGFhdEDFcAHBGIhigBdfecAgHDiFBCaeBEAGHCIdffcIdEAHbgcABfGEdiHIFHaCDGEBDGEHbiaFC",
|
||||||
|
"abecfIgdhdICGhbAFEHGfeAdIcBCFAbigEHDGDhFeABICIEbHdCFGAFaGDBHcEIbCDIGehAFeHIaCFdbG",
|
||||||
|
"AbIGdeHFCHFDbCieaGgEcfaHbDIEiAdBFGcHFHGcEAIBddCBHIGFEaCdfiGBAHEbgeAHCDIfIaHefdCgB",
|
||||||
|
"ACEdBIGHFBHGFacDEIdiFheGAbCcEiBdFHaGhfBGIAecDGadcHeIfBIgCaFHbDEFdAegbcIHEBHICDfGa",
|
||||||
|
"acEIhbgFDFIDAgEBHCBGHfCdeaIDEaBFgicHcFGHAidebIHbDecaGFeBFCIAHdGGDCebHfIAHAiGdfCBE",
|
||||||
|
"aCfDbGHIEGHBIcEFdaedIAFhbCGDFahGiebCHbecaDIGFiGCbEFdAHBEHGIcAfDFiGedACHBCAdFHBgei",
|
||||||
|
"ACGBfIHDeHEBCdgFAIfdIHaegcBDgEAHCIBFIbhFEdaGCcAFGIbDEHgIDebHcfabHADcFEiGEfcigABHd",
|
||||||
|
"AcGFdihBEdHEbGCAifBFIEhaGDCEgADIBfcHhibGcfDEaFDChaEigbGBHCFdEAIIEdabHCFGcAfIEGbHD",
|
||||||
|
"ACGIFbEhdbFEDGhaCIIHDCAEBGFFAIHBDceggdbecfIahHEcAIGdFBeIHFDAGBcdGFbeCHIacbAgHifdE",
|
||||||
|
]
|
||||||
|
const Medium = [
|
||||||
|
"achEDIBFGgeIHbFaDCFDBaCGHeIbHaceDGiFCIFGHBeadeGDIFAChbDAGbIeFCHhfEdGCIbaiBcFAhdGE",
|
||||||
|
"ADBeIGhFCGhCDFabiefiECHBgDACGDbaFieHEBIHGCFADhFAIedCbGdAFGbheCIbEhaciDGFIcGFDeaHb",
|
||||||
|
"aDBIEcHFGEGHbDFcaiIFCAGHeDbgHdEIafBCCIaHFbdGeBefGcdIHADCGFbeAIHhbedAIGcFFaIcHgBEd",
|
||||||
|
"AdEGCHfibHGbefIacdCIFABdehgICgHDAbFefahbecDgIEBDIGFCAHbeICAGHDFGFCDheIbADHAFIBGec",
|
||||||
|
"ADeIBFgHCIHFcgabdebGCeDhaIfHfaDeIcGbgIBFacHEdECdBHGFaiFBHAIEDcGDeGHcBiFaCAIgFDEBH",
|
||||||
|
"aDFIEHbcGciHaGbFDEeGBcdFHIAbeadhCgfIGHIfBEcAdFCdGAIeHBDAeHcgibFHFGbIDaECIBcEFADGh",
|
||||||
|
"aDgEICFBHHCFdGBAeIIEBFHacdgcAEgBIdhFDGhCFEiabBFIADHEGCGbciaDHfEEHdbcFgiAFiAHeGbcd",
|
||||||
|
"adHEbCIfGegBfHIDAcIcfgDaHEBDFABIGcHEHIcdfegbaBEGcAHFdIFAdIgBeCHCbihEFAGdghEACDBIF",
|
||||||
|
"aecDbHIGFDGHCFIBEAfiBEGaHCdgAFBIedHcHCEaDFGBIbDIghCFAeibahcdeFGcHdfeGAIBefGIAbCDH",
|
||||||
|
]
|
||||||
|
const Hard = [
|
||||||
|
"AEdfiHgCBIFGECbahdcbHGADeIFGIFCDaBeHHDCbGEIFAeabhfICdgbCIAHFDGeFGadEcHBiDHeIBgFac",
|
||||||
|
"aEFGBihCdHcIefdGBAGdbcahIfeIBAFDcegHDHEAGBCiFFgcHIEadBeFHDCGBaicidBHAFEGbAGIeFDHC",
|
||||||
|
"AEGIdchFBFICbehgAdbHDFAGeIchdEgBaFCiGbfchIadeCAIefdbGHdfBaIeChGEGHdCFibAIcaHGbDEf",
|
||||||
|
"afbCGDehiIGhEaFCdBECDIbHAFGhEGADbfICdbifechGAFACHIGbeDgDFBHAIcEcIaDFeGBHBHegCIdaF",
|
||||||
|
"AFhIgCdEBcEGDBHAFIiDbfaeGCHhGIEcfbdafcdBIAHGEBaeHdGCIfEBACFdIHggHcAeiFbDdiFGHBEAC",
|
||||||
|
"agcfdHbEIHBDEIGCaFFiecBAhGDBEghcFIdaDHiAGbEfCCAFiEdGBHGCabfIdHeIDHgAEFCbEFBdHcAIg",
|
||||||
|
"agibdeFchcHDGIfeBAEFbHAcDIgiDCAEBGHFHBeDFGCaIFAGICHBdEgEaCBihfdbIfeHDAGCdCHFGaIeb",
|
||||||
|
"AHbIEDcGFCifgHBAdeGEDAfcIHBBdGHCEFaiIFcbdaHeGHaeFIGBCDeBAcGFdIhFGHDaieBcDcIebhGFA",
|
||||||
|
"AHEbCIGfdiBGDEFHCAdfcHGaBIEBGICfdaeHhCFEAbIdGEAdihgFbcFIAgDECHbcdBAIHegfGEHFbcdAI",
|
||||||
|
"AHECBgFdIBIGDAfhCECfDHIEagbIGHEDcBFAEBFAGichddCaBFHeigFEIgHadbChDcIeBGaFGabFcdiEH",
|
||||||
|
]
|
||||||
|
const Expert = [
|
||||||
|
"AHEIDCFGBiBFGaedchcdghbfIEADfHEIACBgbeADCGHfiGCibFHaDEeaBcHDGIFHIdFgBeAcFGCaeIBhD",
|
||||||
|
"AHEIFGcbDDgBacefhIFIcBdHGeACbdHIFAgehfgEAcIDbEaIGBDHFCIEAFGbdcHBDFchaeiGgCHDEIbAF",
|
||||||
|
"aIBCFDeHGcGFHaeIdbdHEIGBafCFDGahcbieBeaGDIHcFICHEBfdGAHADFEgcbIgBIdcaFEHEFCbiHGAd",
|
||||||
|
"AIBHEFDcGEFcaDGihbHDGBCIAefGHFiadEBCBCAeFHGIdIEDGBcHFaCAiFGebdhfbHdIaCgedgECHbfAi",
|
||||||
|
"aiDHBEfCGCGEFIdhBABFHCaGEdiIDGEHbcAfHABifcdgeECFgDaIHBFBaDEHGiCdECbGIafHGhiacFBed",
|
||||||
|
"aIgdfbhcEdBEHCiGFAFCHEGaBdIIFbCAGDEHcHABDeFigegdIHFCabBDiFEHAGcHACGIDEBFGefabcihd",
|
||||||
|
"AIGdFebCHBfHiaCdGEEDcgHbIaFgcBfeAHIdiHecgDfBAfaDbIhgeccbfaDIeHGhGIECFadbdeAHBGCFI",
|
||||||
|
"baDEHGIFCGIHDCfABEceFAIBgdhfdchGIEABIgAbdEHcFEHbfaCDGIABeGFhciddFiCEabhGHCgIBdFEA",
|
||||||
|
"baicHdegFHEdIFGcABGFCaebhidfbadGCIHEICEfAhBDGdGHBIeaFCAHBEDfGCICDGHBifEaeiFGCADBh",
|
||||||
|
"BaiGFcdEHdFCHEAIGBhEgbDIcfaCidFAeBHGFBACGhEIdghEDibAcfEdBIHFgAcaGHECdFBIICfabGHDe",
|
||||||
|
"bCFIGHADeHAGdFebCIDIEaBcFGHEbHGAFDIcgdCbhieFaafiCEDHBGCEBHdGIafIHAFcbgeDfgDeiACHb",
|
||||||
|
"BdaHFIEGCicHDgEafBEGFBACDIHfbDcEgIHAHAIFBdgceCeGihAbDFDIbEchFaggFCadbHEIaHEGIfcBD",
|
||||||
|
"BDCEFiGAHIHacGBeDFGEFHADIBcEIdfHACgBhCGbDEaFIFABgicdHeaFhiEgbCdDbiaChfeGCGEdbFHIa",
|
||||||
|
"bdEcFAHIGCAIegHFBDFGHBDICaEehfaBDIGCDCgiHeaFBIBAFcgedhaicgEbDHFGeDhAFbcIHFbDiCGEa",
|
||||||
|
"BEaihfcdgCFIGEDAHBgDHACBIFeFIdhaeGbcAHGcBIDEfebcdFGHAIDgeBIHFCaHCbFGAeiDIAfEdcbGH",
|
||||||
|
"BehdIcaFgCfGeAHIbdaIdfBGCheEgcIDFHAbdAFHeBGCiIHBGcaDefFCIBHdeGAHbeaGIFDCGDACfEBIH",
|
||||||
|
"BfHCEGADIIdchAFGbeGaEiBdCHFFBigCADEHHEGBdIfaCDCafhEiGBeGFDIHbCacHdaFBEiGaIbegcHFd",
|
||||||
|
]
|
||||||
|
const Extreme = [
|
||||||
|
"BGDiEAfchahcFBDIGEEIFhgCDabFAHGibedcDEGACHbIFCbIEdfGHagDACfEHBihFBDAIcegICEbHGaFd",
|
||||||
|
"BGFAIHDCEDHicegBAfEACFDbIGHidhbCEgFAaEGIhfcDBFCbgadeHIHIedGafBCcbdhFiAEGGFAEbcHID",
|
||||||
|
"BGFHIAdECaiCdBEFGHhDeFcgbaiGFBeAICHdICAGdHEFbdeHCFBGIAFhIBGDACEeBGaHcIDfcadiefhbg",
|
||||||
|
"BhAcGEIDFIGdBaFCHefeCHiDGbaeaBFcIdGHcDGEHAFIBhifgdBEACAcIDFHbEGGbHIEcaFDdFeabGhcI",
|
||||||
|
"BHeadfiCGICAgbHDEFdFgIEcHabgEHdFabICcadBHIfGEFBICGEAdHeiBFAGcHdHdCeIBGfAaGfHcDEBI",
|
||||||
|
"BHFcEdgaigIDAfbEHcCEaIGHBfDdfIGHCAeBhCBeIADGFAGedbFcihFdHBaGIceIacfDEHBGEbGHCIFdA",
|
||||||
|
"biADChGFEEHFIagbDCcGDBFEAHIIaeFHDCGBFBHgIcdEadcGebAhIFHfBAGIECDgDICEbFahaechdFibg",
|
||||||
|
"bICEGDHFAHFeaICdbGaDGbFHEcIEadfcgIHbFGHIbECAdICBhdAfGEcHiDAbgefGBFceiadhDEAGHFBIC",
|
||||||
|
"bieDFaGHcgcaeHiDbFHfDGcBiAECHIBgEFdaDGBHafEciAEFIDcbghFBcaIdheGIdHCEGAFBEAGFBHCID",
|
||||||
|
"BIFCAdhGeDhAEbgFCICEgFHiBDaFBEGDAIHCADHicBEfggciHFeDabHGDBicaefiacdeFGbHEFBaGHCID",
|
||||||
|
"bihCGEADfFAGIbDchEedCfahbigCFDEIGHbaIbEHdaFGCHGaBCfIEdGcFdHbeAIAEBGFIDcHdhIAEcGFB",
|
||||||
|
"CaBhedgfiidHcFGAEbEFGbiahCDAEIGDbFHcFGdIhcebahBCFaEDiGDHAECIBGFbCEdGFIAHGIfaBhCDE",
|
||||||
|
"cbFDEGiAHGIacFHdebdeHibAgFcfdIBCehGABHgAIFECdACEgHdfBIIGbFDCahEeAdHGBCIFHfceAIBDG",
|
||||||
|
"cbgHEaFdIaIdcbfGEHEHFigDBACbFEAIHdCGhcAEDGIBFDGIBFCehaGDCFABHIEiabGHecfdFehdcIaGB",
|
||||||
|
"CbhdAEIGfaEFgibCdhIGDHCFBEafDEBHaGICGibcfdhAehcAIeGFbddFIEbHAcGEHCagIDFBBAGfDCEHI",
|
||||||
|
"CDabGEHIFeFhIaCGDbbgIHdFcAEAcEGhbifdGIbCFdaEHdHfaEiBGciaDFCHEbghEgDbafCIFbceiGDha",
|
||||||
|
"cdgeAIBfhhbFDCgIAeAiEHbFcDGBFICGEdHAdGhBFaECIeACIdHGbfIedFHcagBGhbaEdficfCagiBHed",
|
||||||
|
"cDgIbFEAHehbdGaFICiafecHgDBACIGEBhfdgbdfhiCeAHFECAdbGIBIHAFedcgfGABdCIheDechIGabF",
|
||||||
|
"CEBIAFHGDIhAdEgbcfgFdCbheaIFGHACIDEbeBCGFdIhADaIbHEcFgBIEFGcAdHHdGEiaFbcAcFHDBgie",
|
||||||
|
"cEHGfdIABFIgCAbhedAbDeIHcGfeABFcGdHIHDFBEIACGigChdafbEbFaDHEgIcGCIAbfeDHDHeIGcBFA",
|
||||||
|
"ceIBaDGfhHaGcfiDEbBdFhGEIaCAHbFICEgDGiCdEahbFEfDGhbACIfbhEDGcIAiCeabHFdgdgaIcFBhe",
|
||||||
|
"CeiBaGHDfADGfeHIBCbFHidcegAdHCeFagIBIGECHBAFDFBAgIdcHEEaFHBIDcGgidacfBEHHCBdGefaI",
|
||||||
|
"cEIDAGFHbgDBEFhICAFHAIBCeGdbGFhIeadCACDBGFHIehIecDAGBFdacGEiBfHIfHAcbDEgEbgfhdCai",
|
||||||
|
"CFeabGHIDGBdHEIfcaihACDFBegEGIBadcHFbDcGFHEAIHAFEICgDBAcGihbDFEFIHdgeabcdebfCAIGH",
|
||||||
|
"CFEIAdbgHaHicbgDeFGDBEFhcIAeGHADCIfBIcFghbAdEBADFIEhcGFbcHGIeaDHEADCFGbidigBEaFHc",
|
||||||
|
"CGaBfHIdEHEiacDFBGDbFIgEHcaadcFBgEIHfhECDIGaBBiGHEadFcgCdEIBAHFiAbgHfCEdEFHdacBGI",
|
||||||
|
"CGhAIbfEDFAIEdhcBgDEBCGfHaIIDgbheACFHFcDaIbgeebAGFcIDHGCFibdEHABHDFEaGicaIeHcgDFB",
|
||||||
|
"cHbEFDGAIAdIcgBEFHegfhIAcbDHACbDGfieIbEACFDHgGFdIheACBBCaGEHidfdEhfaIBGcFIGDbCHEa",
|
||||||
|
"cidGHEBFAFaeBDcIGHbHgAFIECdgeIHafdbcAdfecbHIGHbCDIGAEFEFaCBHgDIDCbIGaFheighFEDCAB",
|
||||||
|
"cIFDHAEbgebHgicAfdaGDEFbhCIBDacGFIEHFHIABEGDCgcehdIFABdeGBAHCIFhfciEdbgAIABFCGDhe",
|
||||||
|
"CIFeBahdGHGDIcFebabaegDHIcfdhAbEcFGiIfcaHgdEbEBGDFIcAHFcbhaEgidaEIfGDBhCGdHciBAFE",
|
||||||
|
"DAeFBIHGcFiCHGeBadhGBadCFeIabgIHDECFIEDGCFabhChFBEAdIGbcadfGIHEEdhCiBgFAGfiEAHCdb",
|
||||||
|
"dafibcGHEHIEFdgcbaBCGAHEDIfeHcDgbfaIGBAHIFECDIFdEcAHGbaGBceDIfHFehGaIBdCCdIBfHAEG",
|
||||||
|
"DaFIcbHgebeHGDFAiccgiEAHDFBEBcAHgFDIGHdCfibEaIFabEdGcHHIGfBeCAdFCbDIAehGAdEHGcIBF",
|
||||||
|
"DaibFEGHCGHECIDaBFcFbGHaIDeHiAedbFcGEgFicHBAdBCDAgFheIIEHdAGcfBFDchBIEGAabgFecDiH",
|
||||||
|
"DaIbGFHeCFChaiebdGGeBdCHIFaCbGFADEHIHFAIEbGCdIDEcHgAbFBGcHDafiEEIFGbcdahahdEFiCGB",
|
||||||
|
"dAIcebGFHgBEHFaCiDhcFdgIAbeIDBFaGeHcCeAIDHFgBfGhBcEIdABFgAHCDEIAHdeIFBcGeICGbDhaf",
|
||||||
|
"dbFECIAgHIGaFDHBCeHEcAGbDiFFDBgheiacECGIAFHBDaIHDbceFGcHEbfaGDibfdHIGCEAgaiCEDFhb",
|
||||||
|
"DbgiCFaehcaehbdIGFHIfAEGCBDgfCeIHDABIHAbDCGFEEdbFGAhCIBEDcaiFHGaGHDfBEIcFciGhEbdA",
|
||||||
|
"DEbfcgaHIFaIHDbCegcHGaiEFbDAfebhdIGcidCEGABFHgBHcFIdAEhgfibceDaeIdGafHcBBCaDEhGIF",
|
||||||
|
"dEGHAfIbCBIHcEGFDACFABDIEGhFhbagCdIEEDCfibhAGGAIeHdBCFIGfdcHaEbHCeibaGFDAbdgFechI",
|
||||||
|
"DFACBhGIEgchaIeFDbBEIFDGaChAHFbgidEcedcHAfbGIIGbdecHAFFBGECDIHAcadIHbefGHiEgFACBD",
|
||||||
|
"dfbeahiCgECgiDbfHAAihGFCdeBGbFHCDEAihDIAgecBFcaEBIFgDHFGDCHaBIEIeADBGHFcBHcFEIaGd",
|
||||||
|
"dfeGchaIBICAFbeHgdgBHdAIfceCHIAeBGdfAGBIFDEHcFEDHGCIBaEDgcIFBAHHIfbdAceGbACehGDFi",
|
||||||
|
"dGaICHBFEFBIAedHcGCEhgBFIADHcEdfagBiaIbeHGCDfgDFciBEHAEAdHGCFIbbhgFdIaEcIFcbAEDGh",
|
||||||
|
"dGeihbaCFHFBCADgIECiaeFGBDHEDIgBHcfAbACFDiHEGGHFaEcibdaehBIFDGcFBGdcaEhIICDHgEfaB",
|
||||||
|
"dHcIFGABEIegCABFdHFbADHEIgCaGFebdCHIEDHaCIBFgciBHGFEadbaDGechiFhCIFDageBGfEBiHDca",
|
||||||
|
"dHGaicbeFEacFHBIDgIbFeDghcAHeIDcAFGBFdbHgECaIGcABFIDHeaIHcEFgbDBfDGAHEiCCGEIbdAFh",
|
||||||
|
"DICbAEhgfFaGIHDBCEbEHFCGADIEcBGDIFAhaDFCeHibggHiAFBdECIbehGAcFdcGadIFEhBhFDebcGia",
|
||||||
|
"diGbCEaHFAfCIdhEBghBeAGFCdiCEbDHGFIAIgdfEaBcHFaHcIBgedgcAhBdIFEEDiGfchabbHFEaidgc",
|
||||||
|
"diGEHFBCAHcaIBGEdfeFbCadIhgiGEDFAHBCaHFBcEDGICBDHGIfAegdcFEBAIHbehAIcGfDFaIGdhceb",
|
||||||
|
"eaBdfIHGcIGdCHbFAEfHCAGEDBigcebdHAIFhFAiECGdBBdifAGECHabFecdIHGDiHGBFCeaCEgHIabFD",
|
||||||
|
"EABFHiGcDHdICgaebfcGFBdeAHIaCDHIgBFEbFeaCDIGHiHGEFBdACfbaDECHIGgEHiBfcdadICGahFeB",
|
||||||
|
"eacIBFhdgGHBecDaFIDIfgAhCBECFGHDEiabIdHaGBECFabeCFIGHDfCiBHGdeAHgdFEabIcBEADiCFGh",
|
||||||
|
"EadCFbIhGbGCiahdeffhiGedcABGDbEiFHCACEadhgbFIIfHBcAeGddCfabegiHaBEHGIFDChIGFDcaBE",
|
||||||
|
]
|
||||||
|
|
||||||
|
export class LevelManager {
|
||||||
|
|
||||||
|
private static instance: LevelManager
|
||||||
|
public static getInstance(): LevelManager {
|
||||||
|
if (!LevelManager.instance) {
|
||||||
|
LevelManager.instance = new LevelManager()
|
||||||
|
}
|
||||||
|
return LevelManager.instance
|
||||||
|
}
|
||||||
|
|
||||||
|
private levelMap: Map<string, Array<string>> = new Map()
|
||||||
|
|
||||||
|
public init(): void {
|
||||||
|
this.levelMap.set(config.DIFFICULTY_TYPE.Easy, Easy)
|
||||||
|
this.levelMap.set(config.DIFFICULTY_TYPE.Medium, Medium)
|
||||||
|
this.levelMap.set(config.DIFFICULTY_TYPE.Hard, Hard)
|
||||||
|
this.levelMap.set(config.DIFFICULTY_TYPE.Expert, Expert)
|
||||||
|
this.levelMap.set(config.DIFFICULTY_TYPE.Extreme, Extreme)
|
||||||
|
//检查关卡配置
|
||||||
|
this.levelMap.forEach((list, key)=>{
|
||||||
|
for (var i=0; i<list.length; i++) {
|
||||||
|
if (list[i].length != 81) {
|
||||||
|
console.error("关卡配置有误>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", key, i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public getLevelStr(difficulty: string, index: number): string {
|
||||||
|
var list = this.levelMap.get(difficulty)
|
||||||
|
if (list) {
|
||||||
|
return list[index]
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
3
src/models/LevelManager.ts.meta
Normal file
3
src/models/LevelManager.ts.meta
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"uuid": "4b2967ad-786a-4ad1-8b1d-22b093d62575"
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
import { config } from "../constants/config"
|
|
||||||
|
|
||||||
import { DataStage, createDataStage } from "../types/global"
|
import { DataStage, createDataStage } from "../types/global"
|
||||||
import { DOStage } from "./DOStage"
|
import { DOStage } from "./DOStage"
|
||||||
|
import { DOUser } from "./DOUser"
|
||||||
|
|
||||||
|
|
||||||
export class StorageManager {
|
export class StorageManager {
|
||||||
@@ -13,58 +15,96 @@ export class StorageManager {
|
|||||||
return StorageManager.instance
|
return StorageManager.instance
|
||||||
}
|
}
|
||||||
|
|
||||||
private changed = false
|
private user: DOUser;
|
||||||
|
|
||||||
private stageID: string = "";
|
private stageID: string = "";
|
||||||
private stageMap: Map<string, DataStage> = new Map();
|
private stageChanged = false
|
||||||
|
private stageMap: Map<string, DOStage> = new Map();
|
||||||
|
|
||||||
|
|
||||||
public init(): void {
|
public init(): void {
|
||||||
this.changed = false
|
if (!this.user) {
|
||||||
|
var jsonStr = Laya.LocalStorage.getItem("user")
|
||||||
|
if (jsonStr) {
|
||||||
|
this.user = new DOUser(JSON.parse(jsonStr))
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.user = new DOUser({isCompletedMain: true, dones: new Array(), progresses: new Array()})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.stageID = ""
|
||||||
|
this.stageChanged = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public getUser(): DOUser {
|
||||||
|
return this.user
|
||||||
|
}
|
||||||
|
public saveUser(): void {
|
||||||
|
if (this.user) {
|
||||||
|
var jsonStr = JSON.stringify(this.user.getData())
|
||||||
|
Laya.LocalStorage.setItem("user", jsonStr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public cleanStage(stageID: string): void {
|
||||||
|
if (this.stageMap.has(stageID)) {
|
||||||
|
this.stageMap.delete(stageID)
|
||||||
|
}
|
||||||
|
Laya.LocalStorage.removeItem(stageID)
|
||||||
|
this.stageID = ""
|
||||||
|
this.stageChanged = false
|
||||||
|
}
|
||||||
|
public newStage(stageID: string, type: number, name: string, difficulty: string, index: number): DOStage {
|
||||||
|
this.stageID = stageID
|
||||||
|
this.stageChanged = false
|
||||||
|
var dataStage: DataStage = createDataStage(stageID, type, name, difficulty, index)
|
||||||
|
var doStage: DOStage = new DOStage(dataStage)
|
||||||
|
this.stageMap.set(stageID, doStage)
|
||||||
|
return doStage
|
||||||
|
}
|
||||||
public loadStage(stageID: string): DOStage {
|
public loadStage(stageID: string): DOStage {
|
||||||
this.stageID = stageID
|
this.stageID = stageID
|
||||||
var dataStage: DataStage
|
this.stageChanged = false
|
||||||
if (this.stageMap.has(stageID)) {
|
if (this.stageMap.has(stageID)) {
|
||||||
dataStage = this.stageMap.get(stageID)
|
var doStage: DOStage = this.stageMap.get(stageID)
|
||||||
|
return doStage
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var jsonStr = Laya.LocalStorage.getItem(stageID)
|
var jsonStr = Laya.LocalStorage.getItem(stageID)
|
||||||
if (jsonStr) {
|
if (jsonStr) {
|
||||||
dataStage = JSON.parse(jsonStr)
|
var dataStage: DataStage = JSON.parse(jsonStr)
|
||||||
this.stageMap.set(stageID, dataStage)
|
var doStage: DOStage = new DOStage(dataStage)
|
||||||
}
|
this.stageMap.set(stageID, doStage)
|
||||||
else {
|
return doStage
|
||||||
dataStage = createDataStage("first", "", config.DIFFICULTY_TYPE.Easy)
|
|
||||||
this.stageMap.set(stageID, dataStage)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var levelStr = "aBCeIGFhdEDFcAHBGIhigBdfecAgHDiFBCaeBEAGHCIdffcIdEAHbgcABfGEdiHIFHaCDGEBDGEHbiaFC"
|
return null
|
||||||
return new DOStage(dataStage, levelStr)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public cleanStage(): void {
|
|
||||||
if (this.stageID && this.stageID.length > 0) {
|
|
||||||
if (this.stageMap.has(this.stageID)) {
|
|
||||||
this.stageMap.delete(this.stageID)
|
|
||||||
}
|
|
||||||
Laya.LocalStorage.removeItem(this.stageID)
|
|
||||||
this.stageID = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public saveStage(): void {
|
public saveStage(): void {
|
||||||
if (this.changed) {
|
if (this.stageChanged) {
|
||||||
this.changed = false
|
this.stageChanged = false
|
||||||
if (this.stageMap.has(this.stageID)) {
|
if (this.stageMap.has(this.stageID)) {
|
||||||
var dataStage = this.stageMap.get(this.stageID)
|
var doStage = this.stageMap.get(this.stageID)
|
||||||
var jsonStr = JSON.stringify(dataStage)
|
var jsonStr = JSON.stringify(doStage.getData())
|
||||||
Laya.LocalStorage.setItem(this.stageID, jsonStr)
|
Laya.LocalStorage.setItem(this.stageID, jsonStr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public onChanged(): void {
|
public onChanged(): void {
|
||||||
this.changed = true
|
this.stageChanged = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public cleanAll(): void {
|
||||||
|
this.user = new DOUser({isCompletedMain: true, dones: new Array(), progresses: new Array()})
|
||||||
|
|
||||||
|
this.stageID = ""
|
||||||
|
this.stageChanged = false
|
||||||
|
this.stageMap.clear()
|
||||||
|
|
||||||
|
Laya.LocalStorage.clear()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -12,10 +12,10 @@ export class UIManager extends Laya.Script {
|
|||||||
private static _instance: UIManager
|
private static _instance: UIManager
|
||||||
onAwake(): void {
|
onAwake(): void {
|
||||||
UIManager._instance = this
|
UIManager._instance = this
|
||||||
|
}
|
||||||
|
|
||||||
StorageManager.getInstance().init()
|
onStart(): void {
|
||||||
|
this.loadHomeUI()
|
||||||
this.loadHome()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static getInstance(): UIManager {
|
public static getInstance(): UIManager {
|
||||||
@@ -24,51 +24,49 @@ export class UIManager extends Laya.Script {
|
|||||||
|
|
||||||
private stage: Stage
|
private stage: Stage
|
||||||
|
|
||||||
public loadHome(): void {
|
|
||||||
|
public getUIRoot(): Laya.Node {
|
||||||
|
return this.owner
|
||||||
|
}
|
||||||
|
|
||||||
|
public loadHomeUI(): void {
|
||||||
Laya.loader.load(respath.home_ui_res).then((go)=>{
|
Laya.loader.load(respath.home_ui_res).then((go)=>{
|
||||||
var prefab = go.create()
|
var prefab = go.create()
|
||||||
this.owner.addChild(prefab)
|
this.getUIRoot().addChild(prefab)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
public loadStage(stageID: string, clean: boolean=false): void {
|
public loadStageUI(stageID: string): void {
|
||||||
if (clean) {
|
|
||||||
StorageManager.getInstance().cleanStage()
|
|
||||||
}
|
|
||||||
if (this.stage) {
|
if (this.stage) {
|
||||||
this.stage.onLoadStage(StorageManager.getInstance().loadStage(stageID))
|
this.stage.onLoadStage(StorageManager.getInstance().loadStage(stageID))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Laya.loader.load(respath.stage_ui_res).then((go)=>{
|
Laya.loader.load(respath.stage_ui_res).then((go)=>{
|
||||||
var prefab = go.create()
|
var prefab = go.create()
|
||||||
this.stage = this.owner.addChild(prefab).getComponent(Stage)
|
this.stage = this.getUIRoot().addChild(prefab).getComponent(Stage)
|
||||||
this.stage.onLoadStage(StorageManager.getInstance().loadStage(stageID))
|
this.stage.onLoadStage(StorageManager.getInstance().loadStage(stageID))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public closeStage(): void {
|
public closeStageUI(): void {
|
||||||
if (this.stage) {
|
if (this.stage) {
|
||||||
this.stage.owner.destroy()
|
this.stage.owner.destroy()
|
||||||
this.stage = null
|
this.stage = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public loadGameOver(): void {
|
public loadGameOverUI(): void {
|
||||||
Laya.loader.load(respath.gameover_ui_res).then((go)=>{
|
Laya.loader.load(respath.gameover_ui_res).then((go)=>{
|
||||||
var prefab = go.create()
|
var prefab = go.create()
|
||||||
this.owner.addChild(prefab)
|
this.getUIRoot().addChild(prefab)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
public loadGameDone(): void {
|
public loadGameDoneUI(): void {
|
||||||
Laya.loader.load(respath.gamedone_ui_res).then((go)=>{
|
Laya.loader.load(respath.gamedone_ui_res).then((go)=>{
|
||||||
var prefab = go.create()
|
var prefab = go.create()
|
||||||
this.owner.addChild(prefab)
|
this.getUIRoot().addChild(prefab)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
onLateUpdate(): void {
|
|
||||||
StorageManager.getInstance().saveStage()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,10 @@ export interface DataUndo {
|
|||||||
//关卡数据
|
//关卡数据
|
||||||
export interface DataStage {
|
export interface DataStage {
|
||||||
id: string,
|
id: string,
|
||||||
|
type: number,
|
||||||
name: string,
|
name: string,
|
||||||
difficulty: number,
|
difficulty: string,
|
||||||
|
index: number,
|
||||||
mistake?: number,
|
mistake?: number,
|
||||||
duration?: number,
|
duration?: number,
|
||||||
note_open?: boolean,
|
note_open?: boolean,
|
||||||
@@ -28,8 +30,8 @@ export interface DataStage {
|
|||||||
blocks?: Array<DataBlock>,
|
blocks?: Array<DataBlock>,
|
||||||
undos?: Array<DataUndo>,
|
undos?: Array<DataUndo>,
|
||||||
}
|
}
|
||||||
export function createDataStage(id: string, name: string, difficulty: number): DataStage {
|
export function createDataStage(id: string, type: number, name: string, difficulty: string, index: number): DataStage {
|
||||||
var data: DataStage = {id: id, name: name, difficulty: difficulty}
|
var data: DataStage = {id: id, type: type, name: name, difficulty: difficulty, index: index}
|
||||||
data.mistake = 0
|
data.mistake = 0
|
||||||
data.duration = 0
|
data.duration = 0
|
||||||
data.note_open = false
|
data.note_open = false
|
||||||
@@ -38,4 +40,15 @@ export function createDataStage(id: string, name: string, difficulty: number): D
|
|||||||
data.blocks = new Array()
|
data.blocks = new Array()
|
||||||
data.undos = new Array()
|
data.undos = new Array()
|
||||||
return data
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface DataProgress {
|
||||||
|
difficulty: string,
|
||||||
|
index: number,
|
||||||
|
}
|
||||||
|
export interface DataUser {
|
||||||
|
isCompletedMain: boolean,//当前主线是否已完成 默认true
|
||||||
|
dones: Array<string>,//已完成关卡
|
||||||
|
progresses: Array<DataProgress>,//已经完成的进度
|
||||||
}
|
}
|
||||||
15
src/utils/utility.ts
Normal file
15
src/utils/utility.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export function Utility_ConvertSecondToString(second: number) {
|
||||||
|
var last = second
|
||||||
|
var hour = Math.floor(last/3600)
|
||||||
|
last = last - hour * 3600
|
||||||
|
var minite = Math.floor(last/60)
|
||||||
|
last = last - minite * 60
|
||||||
|
var second = Math.floor(last)
|
||||||
|
function format(value: number) {
|
||||||
|
return value>=10?value.toString():("0"+value)
|
||||||
|
}
|
||||||
|
return `${format(hour)}:${format(minite)}:${format(second)}`
|
||||||
|
}
|
||||||
3
src/utils/utility.ts.meta
Normal file
3
src/utils/utility.ts.meta
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"uuid": "d17f1a58-98e1-4a84-8bd0-8612a1662cea"
|
||||||
|
}
|
||||||
13
src/views/CommonData.ts
Normal file
13
src/views/CommonData.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
const { regClass, property } = Laya;
|
||||||
|
|
||||||
|
@regClass()
|
||||||
|
export class CommonData extends Laya.Script {
|
||||||
|
declare owner : Laya.Box;
|
||||||
|
|
||||||
|
@property(Number)
|
||||||
|
public intValue: number = 0;
|
||||||
|
|
||||||
|
@property(String)
|
||||||
|
public strValue: string = "";
|
||||||
|
|
||||||
|
}
|
||||||
3
src/views/CommonData.ts.meta
Normal file
3
src/views/CommonData.ts.meta
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"uuid": "8857686b-9b2c-4e9c-af0f-0164c0994e46"
|
||||||
|
}
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
import { config } from "../constants/config";
|
||||||
|
import { CommonData } from "./CommonData";
|
||||||
|
|
||||||
const { regClass, property } = Laya;
|
const { regClass, property } = Laya;
|
||||||
|
|
||||||
@regClass()
|
@regClass()
|
||||||
@@ -7,29 +10,45 @@ export class Difficulty extends Laya.Script {
|
|||||||
|
|
||||||
@property(Laya.Box)
|
@property(Laya.Box)
|
||||||
public obj_items: Laya.Box;
|
public obj_items: Laya.Box;
|
||||||
private items: Array<Laya.Box> = new Array()
|
|
||||||
|
|
||||||
//组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
|
//组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
|
||||||
//onAwake(): void {}
|
onAwake(): void {
|
||||||
|
var offset = this.owner.getChildByName("offset") as Laya.Box
|
||||||
|
var bg = offset.getChildByName("bg") as Laya.Sprite
|
||||||
|
bg.graphics.clear()
|
||||||
|
bg.graphics.drawRoundRect(0, 0, offset.width, offset.height, 20, 20, 0, 0, "#f5f7fb")
|
||||||
|
|
||||||
//组件被启用后执行,例如节点被添加到舞台后
|
Laya.Tween.to(offset, {y: 560}, 500)
|
||||||
//onEnable(): void {}
|
|
||||||
|
|
||||||
//组件被禁用时执行,例如从节点从舞台移除后
|
var mask = this.owner.getChildByName("mask")
|
||||||
//onDisable(): void {}
|
mask.on(Laya.Event.CLICK, this, ()=>{
|
||||||
|
Laya.Tween.to(offset, {y: 3000}, 500, null, Laya.Handler.create(this, () => {
|
||||||
|
this.owner.destroy()
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
//第一次执行update之前执行,只会执行一次
|
public onInit(callback: any): void {
|
||||||
//onStart(): void {}
|
var list: Array<string> = new Array()
|
||||||
|
list.push(config.DIFFICULTY_TYPE.Easy)
|
||||||
//手动调用节点销毁时执行
|
list.push(config.DIFFICULTY_TYPE.Medium)
|
||||||
//onDestroy(): void {}
|
list.push(config.DIFFICULTY_TYPE.Hard)
|
||||||
|
list.push(config.DIFFICULTY_TYPE.Expert)
|
||||||
//每帧更新时执行,尽量不要在这里写大循环逻辑或者使用getComponent方法
|
list.push(config.DIFFICULTY_TYPE.Extreme)
|
||||||
//onUpdate(): void {}
|
for (var i=0; i<list.length; i++) {
|
||||||
|
var obj = this.obj_items.getChildAt(i)
|
||||||
//每帧更新时执行,在update之后执行,尽量不要在这里写大循环逻辑或者使用getComponent方法
|
var Label = obj.getChildByName("Label") as Laya.Label
|
||||||
//onLateUpdate(): void {}
|
Label.text = list[i]
|
||||||
|
var data = obj.getComponent(CommonData)
|
||||||
//鼠标点击后执行。与交互相关的还有onMouseDown等十多个函数,具体请参阅文档。
|
data.strValue = list[i]
|
||||||
//onMouseClick(): void {}
|
obj.on(Laya.Event.CLICK, this, (evt: Laya.Event)=>{
|
||||||
|
var data = evt.target.getComponent(CommonData)
|
||||||
|
if (callback) {
|
||||||
|
callback(data.strValue)
|
||||||
|
}
|
||||||
|
this.owner.destroy()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,9 @@
|
|||||||
|
import { respath } from "../constants/respath";
|
||||||
|
import { config } from "../constants/config";
|
||||||
import { UIManager } from "../models/UIManager";
|
import { UIManager } from "../models/UIManager";
|
||||||
|
import { StorageManager } from "../models/StorageManager";
|
||||||
|
import { LevelManager } from "../models/LevelManager";
|
||||||
|
import { Difficulty } from "./Difficulty";
|
||||||
|
|
||||||
const { regClass, property } = Laya;
|
const { regClass, property } = Laya;
|
||||||
|
|
||||||
@@ -16,13 +21,35 @@ export class GameOver extends Laya.Script {
|
|||||||
//组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
|
//组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
|
||||||
onAwake(): void {
|
onAwake(): void {
|
||||||
this.btn_restart.on(Laya.Event.CLICK, this, (evt: Laya.Event) => {
|
this.btn_restart.on(Laya.Event.CLICK, this, (evt: Laya.Event) => {
|
||||||
UIManager.getInstance().loadStage("first", true);
|
var doStage = StorageManager.getInstance().loadStage(config.DEFAULT_STAGE_ID)
|
||||||
this.owner.destroy()
|
var difficulty = doStage.get_difficulty()
|
||||||
|
StorageManager.getInstance().cleanStage(config.DEFAULT_STAGE_ID)
|
||||||
|
var user = StorageManager.getInstance().getUser()
|
||||||
|
user.set_isCompletedMain(false)
|
||||||
|
StorageManager.getInstance().newStage(config.DEFAULT_STAGE_ID, config.STAGE_TYPE.MAIN, difficulty, difficulty, user.get_progress(difficulty))
|
||||||
|
UIManager.getInstance().loadStageUI(config.DEFAULT_STAGE_ID);
|
||||||
|
this.owner.destroy()
|
||||||
})
|
})
|
||||||
|
|
||||||
this.btn_new.on(Laya.Event.CLICK, this, (evt: Laya.Event) => {
|
this.btn_new.on(Laya.Event.CLICK, this, (evt: Laya.Event) => {
|
||||||
UIManager.getInstance().loadStage("first", true);
|
Laya.loader.load(respath.difficulty_ui_res).then((go)=>{
|
||||||
this.owner.destroy()
|
var prefab = go.create()
|
||||||
|
var d = UIManager.getInstance().getUIRoot().addChild(prefab).getComponent(Difficulty)
|
||||||
|
d.onInit((value: string)=> {
|
||||||
|
console.log("选择难度", value)
|
||||||
|
StorageManager.getInstance().cleanStage(config.DEFAULT_STAGE_ID)
|
||||||
|
var user = StorageManager.getInstance().getUser()
|
||||||
|
user.set_isCompletedMain(false)
|
||||||
|
var index = user.get_progress(value)
|
||||||
|
var levelStr = LevelManager.getInstance().getLevelStr(value, index)
|
||||||
|
if (!levelStr || levelStr.length <= 0) {//说明当前难度已经打通了,所以给他从头开始
|
||||||
|
user.update_progress(value, 0)
|
||||||
|
}
|
||||||
|
StorageManager.getInstance().newStage(config.DEFAULT_STAGE_ID, config.STAGE_TYPE.MAIN, value, value, user.get_progress(value))
|
||||||
|
UIManager.getInstance().loadStageUI(config.DEFAULT_STAGE_ID);
|
||||||
|
this.owner.destroy()
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
|
|
||||||
import { UIManager } from "../models/UIManager";
|
import { UIManager } from "../models/UIManager";
|
||||||
import { StorageManager } from "../models/StorageManager";
|
import { StorageManager } from "../models/StorageManager";
|
||||||
|
import { respath } from "../constants/respath";
|
||||||
|
import { Difficulty } from "./Difficulty";
|
||||||
|
import { LevelManager } from "../models/LevelManager";
|
||||||
|
import { config } from "../constants/config";
|
||||||
|
import { Utility_ConvertSecondToString } from "../utils/utility";
|
||||||
|
|
||||||
const { regClass, property } = Laya
|
const { regClass, property } = Laya
|
||||||
|
|
||||||
@@ -9,23 +14,71 @@ export class Home extends Laya.Script {
|
|||||||
declare owner : Laya.Box;
|
declare owner : Laya.Box;
|
||||||
|
|
||||||
@property(Laya.Box)
|
@property(Laya.Box)
|
||||||
public btn_start: Laya.Box;
|
public btn_new_blue: Laya.Box;
|
||||||
|
|
||||||
|
@property(Laya.Box)
|
||||||
|
public btn_continue: Laya.Box;
|
||||||
|
@property(Laya.Box)
|
||||||
|
public btn_new_white: Laya.Box;
|
||||||
|
|
||||||
@property(Laya.Box)
|
@property(Laya.Box)
|
||||||
public btn_clean: Laya.Box;
|
public btn_clean: Laya.Box;
|
||||||
|
|
||||||
//组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
|
//组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
|
||||||
onAwake(): void {
|
onAwake(): void {
|
||||||
this.btn_start.on(Laya.Event.CLICK, this, (evt: Laya.Event) => {
|
this.btn_new_blue.on(Laya.Event.CLICK, this, this.onClickNew)
|
||||||
console.log("btn_start=", evt);
|
this.btn_new_white.on(Laya.Event.CLICK, this, this.onClickNew)
|
||||||
UIManager.getInstance().loadStage("first");
|
this.btn_continue.on(Laya.Event.CLICK, this, (evt: Laya.Event)=>{
|
||||||
|
UIManager.getInstance().closeStageUI()
|
||||||
|
UIManager.getInstance().loadStageUI(config.DEFAULT_STAGE_ID);
|
||||||
this.owner.destroy()
|
this.owner.destroy()
|
||||||
})
|
})
|
||||||
|
var user = StorageManager.getInstance().getUser()
|
||||||
|
this.btn_new_blue.visible = user.get_isCompletedMain()
|
||||||
|
this.btn_new_white.visible = user.get_isCompletedMain() == false
|
||||||
|
this.btn_continue.visible = user.get_isCompletedMain() == false
|
||||||
|
if (user.get_isCompletedMain() == false) {
|
||||||
|
var label_time = this.btn_continue.getChildByName("time").getChildByName("label_time") as Laya.Label
|
||||||
|
var doStage = StorageManager.getInstance().loadStage(config.DEFAULT_STAGE_ID)
|
||||||
|
var duration = doStage.get_duration()
|
||||||
|
var timeStr = Utility_ConvertSecondToString(duration)
|
||||||
|
label_time.text = `${timeStr} - ${doStage.get_difficulty()}`
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//测试逻辑
|
||||||
this.btn_clean.on(Laya.Event.CLICK, this, (evt: Laya.Event) => {
|
this.btn_clean.on(Laya.Event.CLICK, this, (evt: Laya.Event) => {
|
||||||
console.log("btn_clean=", evt);
|
console.log("btn_clean=", evt);
|
||||||
StorageManager.getInstance().cleanStage()
|
StorageManager.getInstance().cleanAll()
|
||||||
Laya.LocalStorage.clear()
|
user = StorageManager.getInstance().getUser()
|
||||||
|
this.btn_new_blue.visible = user.get_isCompletedMain()
|
||||||
|
this.btn_new_white.visible = user.get_isCompletedMain() == false
|
||||||
|
this.btn_continue.visible = user.get_isCompletedMain() == false
|
||||||
|
})
|
||||||
|
this.btn_clean.visible = config.DEBUG
|
||||||
|
//======
|
||||||
|
}
|
||||||
|
|
||||||
|
public onClickNew(evt: Laya.Event): void {
|
||||||
|
Laya.loader.load(respath.difficulty_ui_res).then((go)=>{
|
||||||
|
var prefab = go.create()
|
||||||
|
var d = UIManager.getInstance().getUIRoot().addChild(prefab).getComponent(Difficulty)
|
||||||
|
d.onInit((value: string)=> {
|
||||||
|
console.log("选择难度", value)
|
||||||
|
UIManager.getInstance().closeStageUI()
|
||||||
|
|
||||||
|
StorageManager.getInstance().cleanStage(config.DEFAULT_STAGE_ID)
|
||||||
|
var user = StorageManager.getInstance().getUser()
|
||||||
|
user.set_isCompletedMain(false)
|
||||||
|
var index = user.get_progress(value)
|
||||||
|
var levelStr = LevelManager.getInstance().getLevelStr(value, index)
|
||||||
|
if (!levelStr || levelStr.length <= 0) {//说明当前难度已经打通了,所以给他从头开始
|
||||||
|
user.update_progress(value, 0)
|
||||||
|
}
|
||||||
|
StorageManager.getInstance().newStage(config.DEFAULT_STAGE_ID, config.STAGE_TYPE.MAIN, value, value, user.get_progress(value))
|
||||||
|
UIManager.getInstance().loadStageUI(config.DEFAULT_STAGE_ID);
|
||||||
|
this.owner.destroy()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import { Block } from "./Block";
|
|||||||
import { Candy } from "./Candy";
|
import { Candy } from "./Candy";
|
||||||
import { DOStage } from "../models/DOStage";
|
import { DOStage } from "../models/DOStage";
|
||||||
import { config } from "../constants/config";
|
import { config } from "../constants/config";
|
||||||
|
import { StorageManager } from "../models/StorageManager";
|
||||||
|
import { Utility_ConvertSecondToString } from "../utils/utility";
|
||||||
|
|
||||||
|
|
||||||
const { regClass, property } = Laya;
|
const { regClass, property } = Laya;
|
||||||
@@ -56,8 +58,8 @@ export class Stage extends Laya.Script {
|
|||||||
//组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
|
//组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
|
||||||
onAwake(): void {
|
onAwake(): void {
|
||||||
this.btn_back.on(Laya.Event.CLICK, this, ()=>{
|
this.btn_back.on(Laya.Event.CLICK, this, ()=>{
|
||||||
UIManager.getInstance().loadHome();
|
UIManager.getInstance().loadHomeUI();
|
||||||
UIManager.getInstance().closeStage();
|
UIManager.getInstance().closeStageUI();
|
||||||
})
|
})
|
||||||
for (var i=0; i<this.obj_blocks.numChildren; i++) {
|
for (var i=0; i<this.obj_blocks.numChildren; i++) {
|
||||||
var hbox = this.obj_blocks.getChildAt(i);
|
var hbox = this.obj_blocks.getChildAt(i);
|
||||||
@@ -101,6 +103,7 @@ export class Stage extends Laya.Script {
|
|||||||
this.data = doStage
|
this.data = doStage
|
||||||
|
|
||||||
this.onUpdateScore()
|
this.onUpdateScore()
|
||||||
|
this.label_diff.text = this.data.get_difficulty()
|
||||||
this.onUpdateMistake()
|
this.onUpdateMistake()
|
||||||
var begin = Date.now()
|
var begin = Date.now()
|
||||||
Laya.timer.loop(1000, this, ()=>{
|
Laya.timer.loop(1000, this, ()=>{
|
||||||
@@ -108,12 +111,7 @@ export class Stage extends Laya.Script {
|
|||||||
this.data.set_duration(this.data.get_duration() + Math.floor((now-begin)/1000))
|
this.data.set_duration(this.data.get_duration() + Math.floor((now-begin)/1000))
|
||||||
begin = now
|
begin = now
|
||||||
var last = this.data.get_duration()
|
var last = this.data.get_duration()
|
||||||
var hour = Math.floor(last/3600)
|
this.label_time.text = Utility_ConvertSecondToString(last)
|
||||||
last = last - hour * 3600
|
|
||||||
var minite = Math.floor(last/60)
|
|
||||||
last = last - minite * 60
|
|
||||||
var second = Math.floor(last)
|
|
||||||
this.label_time.text = `${hour>=10?hour:("0"+hour)}:${minite>=10?minite:("0"+minite)}:${second>10?second:("0"+second)}`
|
|
||||||
})
|
})
|
||||||
|
|
||||||
var blocks = doStage.get_blocks()
|
var blocks = doStage.get_blocks()
|
||||||
@@ -335,7 +333,16 @@ export class Stage extends Laya.Script {
|
|||||||
if (b) {
|
if (b) {
|
||||||
if (this.getIsComplete()) {
|
if (this.getIsComplete()) {
|
||||||
console.log("完成关卡")
|
console.log("完成关卡")
|
||||||
UIManager.getInstance().loadGameDone()
|
StorageManager.getInstance().cleanStage(this.data.get_stageID())//完成关卡清除关卡数据
|
||||||
|
var user = StorageManager.getInstance().getUser()
|
||||||
|
if (this.data.get_stageType() == config.STAGE_TYPE.MAIN) {
|
||||||
|
user.set_isCompletedMain(true)
|
||||||
|
user.update_progress(this.data.get_difficulty(), this.data.get_stageIndex()+1)
|
||||||
|
}
|
||||||
|
else if (this.data.get_stageType() == config.STAGE_TYPE.DC) {
|
||||||
|
user.add_done(this.data.get_stageID())
|
||||||
|
}
|
||||||
|
UIManager.getInstance().loadGameDoneUI()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {//失败
|
else {//失败
|
||||||
@@ -343,7 +350,7 @@ export class Stage extends Laya.Script {
|
|||||||
this.onUpdateMistake()
|
this.onUpdateMistake()
|
||||||
if (this.data.get_mistake() >= config.MISTAKE_MAX) {
|
if (this.data.get_mistake() >= config.MISTAKE_MAX) {
|
||||||
console.log("关卡失败")
|
console.log("关卡失败")
|
||||||
// UIManager.getInstance().loadGameOver()
|
UIManager.getInstance().loadGameOverUI()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user