整理持久化数据结构

This commit is contained in:
2025-05-14 20:05:17 +08:00
parent dcf4fae2c1
commit 765ba7bfe9
6 changed files with 48 additions and 46 deletions

View File

@@ -1,16 +1,17 @@
import { DataBlock } from "../types/global";
import { StorageManager } from "./StorageManager" import { StorageManager } from "./StorageManager"
export class DOBlock { export class DOBlock {
private data: any private data: DataBlock
private preset: boolean = false//预设格子 private preset: boolean = false//预设格子
private correct: number = 0; private correct: number = 0;
private checked: boolean = false//是否正确 private checked: boolean = false//是否正确
constructor(dataBlock: any, preset: boolean, correct: number) { constructor(dataBlock: DataBlock, preset: boolean, correct: number) {
this.data = dataBlock this.data = dataBlock
this.preset = preset this.preset = preset
this.correct = correct this.correct = correct

View File

@@ -1,14 +1,15 @@
import { DataCandy } from "../types/global"
import { StorageManager } from "./StorageManager" import { StorageManager } from "./StorageManager"
export class DOCandy { export class DOCandy {
private data: any private data: DataCandy
private show: number private show: number
constructor(dataCandy: any, show: number) { constructor(dataCandy: DataCandy, show: number) {
this.data = dataCandy this.data = dataCandy
this.show = show this.show = show
} }

View File

@@ -3,18 +3,19 @@
import { StorageManager } from "./StorageManager" import { StorageManager } from "./StorageManager"
import { DOBlock } from "./DOBlock" import { DOBlock } from "./DOBlock"
import { DOCandy } from "./DOCandy" import { DOCandy } from "./DOCandy"
import { DataBlock, DataStage } from "../types/global"
export class DOStage { export class DOStage {
private data: any private data: DataStage
private blocks: Array<DOBlock> = new Array() private blocks: Array<DOBlock> = new Array()
private candys: Array<DOCandy> = new Array() private candys: Array<DOCandy> = new Array()
private letterToNumber: any; private letterToNumber: Map<string, number>;
private numberToLetter: any; private numberToLetter: Map<number, string>;
constructor(dataStage: any, levelStr: string) { constructor(dataStage: DataStage, levelStr: string) {
this.data = dataStage this.data = dataStage
this.letterToNumber = new Map(); this.letterToNumber = new Map();
@@ -39,7 +40,7 @@ export class DOStage {
this.numberToLetter.set(8, "h"); this.numberToLetter.set(8, "h");
this.numberToLetter.set(9, "i"); this.numberToLetter.set(9, "i");
var blockMap: Map<number, any> = new Map() var blockMap: Map<number, DataBlock> = new Map()
for (var i=0; i<this.data.blocks.length; i++) { for (var i=0; i<this.data.blocks.length; i++) {
var dataBlock = this.data.blocks[i] var dataBlock = this.data.blocks[i]
blockMap.set(dataBlock.index, dataBlock) blockMap.set(dataBlock.index, dataBlock)
@@ -53,7 +54,7 @@ export class DOStage {
var letter = levelStr[i]; var letter = levelStr[i];
if (this.letterToNumber.has(letter)) {//预设格子 使用配置文件初始化 if (this.letterToNumber.has(letter)) {//预设格子 使用配置文件初始化
var show = this.letterToNumber.get(letter) var show = this.letterToNumber.get(letter)
var dataBlock = StorageManager.createDataBlock(i, show) var dataBlock: DataBlock = {index: i, show: show, score: 0, notes: new Array()}
var doBlock = new DOBlock(dataBlock, true, show) var doBlock = new DOBlock(dataBlock, true, show)
this.blocks.push(doBlock) this.blocks.push(doBlock)
} }
@@ -65,7 +66,7 @@ export class DOStage {
this.blocks.push(doBlock) this.blocks.push(doBlock)
} }
else { else {
dataBlock = StorageManager.createDataBlock(i, 0) dataBlock = {index: i, show: 0, score: 0, notes: new Array()}
this.data.blocks.push(dataBlock) this.data.blocks.push(dataBlock)
var doBlock = new DOBlock(dataBlock, false, show) var doBlock = new DOBlock(dataBlock, false, show)
this.blocks.push(doBlock) this.blocks.push(doBlock)
@@ -90,7 +91,7 @@ export class DOStage {
var c = this.numberToLetter.get(i) var c = this.numberToLetter.get(i)
if (list.has(c)) if (list.has(c))
left = list.get(c); left = list.get(c);
dataCandy = StorageManager.createDataCandy(left) dataCandy = {left: left}
this.data.candys.push(dataCandy) this.data.candys.push(dataCandy)
var doCandy = new DOCandy(dataCandy, i) var doCandy = new DOCandy(dataCandy, i)
this.candys.push(doCandy) this.candys.push(doCandy)

View File

@@ -1,4 +1,5 @@
import { config } from "../constants/config" import { config } from "../constants/config"
import { DataStage } from "../types/global"
import { DOStage } from "./DOStage" import { DOStage } from "./DOStage"
@@ -12,41 +13,10 @@ export class StorageManager {
return StorageManager.instance return StorageManager.instance
} }
public static createDataBlock(index: number, show: number, score: number=0, notes: Array<number>=new Array()): any {//格子
var dataBlock = {
index: index,
show: show,
score: score,
notes: notes,
}
return dataBlock
}
public static createDataCandy(left: number): any {//可选数字
var dataCandy = {
left: left,
}
return dataCandy
}
public static createDataStage(mistake: number, difficulty: number, duration: number=0, blocks: Array<any>=new Array(), candys: Array<any>=new Array()): any {//关卡数据
var dataStage = {
mistake: mistake,
difficulty: difficulty,
duration: duration,
note_open: false,
blocks: blocks,
candys: candys,
}
return dataStage
}
private changed = false private changed = false
private stageID: string = ""; private stageID: string = "";
private stageMap: Map<string, any> = new Map(); private stageMap: Map<string, DataStage> = new Map();
public init(): void { public init(): void {
this.changed = false this.changed = false
@@ -54,7 +24,7 @@ export class StorageManager {
public loadStage(stageID: string): DOStage { public loadStage(stageID: string): DOStage {
this.stageID = stageID this.stageID = stageID
var dataStage var dataStage: DataStage
if (this.stageMap.has(stageID)) { if (this.stageMap.has(stageID)) {
dataStage = this.stageMap.get(stageID) dataStage = this.stageMap.get(stageID)
} }
@@ -65,7 +35,7 @@ export class StorageManager {
this.stageMap.set(stageID, dataStage) this.stageMap.set(stageID, dataStage)
} }
else { else {
dataStage = StorageManager.createDataStage(0, config.DIFFICULTY_TYPE.Easy) dataStage = {mistake: 0, difficulty: config.DIFFICULTY_TYPE.Easy, duration: 0, note_open: false, blocks: new Array(), candys: new Array()}
this.stageMap.set(stageID, dataStage) this.stageMap.set(stageID, dataStage)
} }
} }

26
src/types/global.ts Normal file
View File

@@ -0,0 +1,26 @@
//格子持久化数据结构
export interface DataBlock {
index: number,
show: number,
score: number
notes: Array<number>,
}
//可选数字
export interface DataCandy {
left: number,
}
//关卡数据
export interface DataStage {
mistake: number,
difficulty: number,
duration: number,
note_open: boolean,
blocks: Array<DataBlock>,
candys: Array<DataCandy>,
}

3
src/types/global.ts.meta Normal file
View File

@@ -0,0 +1,3 @@
{
"uuid": "c76d8037-4918-4ac5-a920-02fe0f4d8df7"
}