import { UIManager } from "../models/UIManager"; import { Block } from "./Block"; import { Candy } from "./Candy"; import { DOStage } from "../models/DOStage"; import { config } from "../constants/config"; import { DataUndo } from "../types/global"; const { regClass, property } = Laya; @regClass() export class Stage extends Laya.Script { declare owner : Laya.Box; @property(Laya.Button) public btn_back: Laya.Button @property(Laya.Label) public label_score: Laya.Label; @property(Laya.Label) public label_mistake: Laya.Label; @property(Laya.Label) public label_diff: Laya.Label; @property(Laya.Label) public label_time: Laya.Label; @property(Laya.Box) public obj_blocks: Laya.Box; @property(Laya.Box) public obj_block_labels: Laya.Box; private blocks: Array = new Array(); @property(Laya.Box) public obj_candys: Laya.Box; @property(Laya.Box) public obj_candy_labels: Laya.Box; private candys: Array = new Array(); @property(Laya.Box) public btn_undo: Laya.Box; @property(Laya.Box) public btn_erase: Laya.Box; @property(Laya.Box) public btn_note: Laya.Box; private btn_note_normal: Laya.Box private btn_note_checked: Laya.Box @property(Laya.Box) public btn_hint: Laya.Box; private btn_hint_normal: Laya.Box private btn_hint_ad: Laya.Box private btn_hint_label: Laya.Label private data: DOStage; private selectedBlock: Block; //组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次 onAwake(): void { this.btn_back.on(Laya.Event.CLICK, this, ()=>{ UIManager.getInstance().loadHome(); UIManager.getInstance().closeStage(); }) for (var i=0; i{ var now = Date.now() this.data.set_duration(this.data.get_duration() + Math.floor((now-begin)/1000)) begin = now var last = this.data.get_duration() 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) this.label_time.text = `${hour>=10?hour:("0"+hour)}:${minite>=10?minite:("0"+minite)}:${second>10?second:("0"+second)}` }) var blocks = doStage.get_blocks() for (var i=0; i>>>", JSON.stringify(undo)) this.selectedBlock = this.blocks[undo.index] this.onApplyBlock(this.selectedBlock) if (undo.notes && undo.notes.length > 0) { this.selectedBlock.setNotes(undo.notes) } else { this.selectedBlock.setShowNumber(undo.show) } this.onSetBlock(this.selectedBlock) } } onClickErase(evt: Laya.Event): void { if (this.selectedBlock.getData().get_checked() == false) {//未完成且有数字或者笔记才可以使用橡皮 var show = this.selectedBlock.getData().get_show() var notes = this.selectedBlock.getData().get_notes() if (show > 0 || notes.length > 0) { this.data.add_undo(this.selectedBlock.getData().get_index(), show, notes) this.selectedBlock.setShowNumber(0) this.onUpdateScore() this.onSetBlock(this.selectedBlock) } } } onClickNote(evt: Laya.Event): void { if (evt != null) { this.data.set_note_open(!this.data.get_note_open()) } this.btn_note_normal.visible = this.data.get_note_open() == false this.btn_note_checked.visible = this.data.get_note_open() for (var i=0; i 0) { if (this.selectedBlock.getData().get_checked() == false) {//当前选中的格子没有完成 var correct = this.selectedBlock.getData().get_correct() this.onApplyCandy(correct) this.data.set_hint(hint-1) this.onUpdateHintStatus() } else { var list: Array = new Array() for (var i=0; i 0) { var random = Math.random() var index = Math.round(random*list.length) if (index >= list.length) index = list.length -1 var block = list[index] this.onApplyBlock(block) var correct = block.getData().get_correct() this.onApplyCandy(correct) this.data.set_hint(hint-1) this.onUpdateHintStatus() } } } else { //这里播放广告 现在每个广告每次点击+9 this.data.set_hint(9) this.onUpdateHintStatus() } } onUpdateHintStatus(): void { var hint = this.data.get_hint() this.btn_hint_normal.visible = hint > 0 this.btn_hint_ad.visible = hint <= 0 this.btn_hint_label.text = hint.toString() } public onApplyCandy(showNumber: number): void { var show = this.selectedBlock.getData().get_show() var notes = this.selectedBlock.getData().get_notes() if (this.selectedBlock.getData().get_checked() == false) { if (this.data.get_note_open()) { var relateds = this.findRelatedBlocks(this.selectedBlock) var find = false for (var i=0; i= config.MISTAKE_MAX) { console.log("关卡失败") // UIManager.getInstance().loadGameOver() } } } this.onUpdateCandys() } } } public onClickCandy(evt: Laya.Event): void { var candy = evt.target.getComponent(Candy); this.onApplyCandy(candy.get_show()) } onKeyUp(evt: Laya.Event): void { var n = Number(evt.key) if (n && n > 0) { this.onApplyCandy(n) } } onUpdateCandys(): void { var list: Map = new Map() for (var i=1; i<=9; i++) list.set(i, 0) for (var i=0; i { var list: Array = new Array() for (var i=0; i { var list: Array = new Array() for (var i=0; i { var list: Array = new Array() for (var i=0; i= 0) list.push(block) } return list } getIsComplete(): boolean { var b = true; for (var i=1; i