// 主游戏控制类 const {ccclass, property} = cc._decorator; @ccclass export default class GameManager extends cc.Component { @property(cc.Prefab) kuang1_Prefab: cc.Prefab = null; @property(cc.Prefab) kuang2_Prefab: cc.Prefab = null; @property(cc.Node) Block: cc.Node = null; @property(cc.Label) TimeLabel: cc.Label = null; @property(cc.Label) LevelLabel: cc.Label = null; @property(cc.Node) Guide: cc.Node = null; @property(cc.Sprite) progress: cc.Sprite = null; //-95 640 @property(cc.Node) Top: cc.Node = null;//80 -725 countTime: number; //游戏总daojishi startTime: number; //游戏开始时间,时间戳 pause: boolean ; //游戏暂停 gameOver: boolean ; //游戏结束 result: number; //当前小局结束标杆 outside_Array: any; //内圈数组 inside_Array: any; //外圈数组 level: number; //关卡等级 guide_Level: number; //引导等级 guide_State: boolean; //引导等级 config: {}; //当前关卡配置 answerInside: number; //正确答案位置 answerOutside: number; //正确答案位置 pass: boolean; //是否通关 outside: any; //外圈实际执行数组 inside: any; //内圈实际执行数组 answerInsideTexture: number; //争取答案图片 answerOutsideTexture: number; //争取答案图片 insideTexture: number[]; //错误答案数组 outsideTexture: number[]; //错误答案数组 onLoad () { this.guide_State = false; this.level = cc.fx.GameConfig.GM_INFO.level; this.guide_Level = cc.fx.GameConfig.GM_INFO.guide_Level; this.LevelLabel.string = (this.level+1)+""; this.progress.fillRange = cc.fx.GameConfig.GM_INFO.score/24; if(this.progress.fillRange>= 0.2) this.Top.getChildByName("star1").active = true; if(this.progress.fillRange>= 0.5) this.Top.getChildByName("star2").active = true; if(this.progress.fillRange>= 0.8) this.Top.getChildByName("star3").active = true; if((this.level == 0 && this.guide_Level == 4) || (this.level == 4 && this.guide_Level == 3) || (this.level == 8 && this.guide_Level == 1)){ this.openGuide(false); } else{ this.LevelLabel.node.active = true; this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "第 轮"; this.init(); } } init(){ if(this.level == 4 && this.guide_Level == 2) { cc.fx.GameConfig.GM_INFO.guide_Level -= 1; this.guide_State = true; this.LevelLabel.node.active = false; this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练 习"; // this.node.getChildByName("tip").active = true; } this.result = 0; this.countTime = 6; this.TimeLabel.string = cc.fx.GameTool.getTimeMargin(this.countTime); this.createBlock(); setTimeout(() => { this.createCustom(); }, 1000); } openGuide(type){ this.Guide.active = true; this.guide_State = true; // this.node.getChildByName("tip").active = true; if(!type) cc.fx.GameConfig.GM_INFO.guide_Level -= 1; this.Guide.getChildByName("one").active = false; this.Guide.getChildByName("two").active = false; this.Guide.getChildByName("three").active = false; this.Guide.getChildByName("four").active = false; let name = "one"; if(this.level == 0){ name = "one"; this.LevelLabel.node.active = false; this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练 习"; } else if(this.level == 4){ name = "two"; this.LevelLabel.node.active = false; this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练 习"; } else if(this.level == 8){ name = "three"; this.guide_State = false; } if(type) name = "four"; this.Guide.getChildByName(name).active = true; cc.tween(this.Guide.getChildByName(name)) .to(0.5,{opacity:255}) .start(); } closeGuide(){ if(this.Guide.getChildByName("four").active){ this.Guide.active = false; cc.director.loadScene("GameScene"); } else{ this.Guide.active = false; this.init(); } // } //创建方块地图 createBlock(){ this.outside_Array = []; this.inside_Array = []; this.outside = []; this.inside = []; for(let i=0; i<16; i++){ let block = cc.instantiate(this.kuang1_Prefab); block.getComponent("Block").setId(i); block.parent = this.Block.getChildByName("outside"); let x,y = 0; if(i < 5){ x = -284 + 142*i; y = 259; } else if(i < 9){ x = 284; y = 259 - (i-4)*142; } else if(i < 13){ x = 284 - (i-8)*142; y = -309; } else if(i < 16){ x = -284; y = -309 + (i-12)*142; } block.setPosition(x,y); this.outside_Array.push(block); } for(let j=3; j<12; j++){ let block = cc.instantiate(this.kuang2_Prefab); block.getComponent("Block").setId(j); block.parent = this.Block.getChildByName("inside"); block.setPosition(-132+j%3*132,239-parseInt(j/3 + "")*132); this.inside_Array.push(block); } } //创建关卡 createCustom(){ //初始化关卡配置数据 this.level = cc.fx.GameConfig.GM_INFO.level; this.LevelLabel.string = (this.level+1)+""; this.config = cc.fx.GameConfig.LEVEL_INFO[this.level]; if(this.level == 4 && this.guide_Level == 2) { this.config = cc.fx.GameConfig.LEVEL_INFO[6]; } this.pass = false; //放正确答案和错误答案 this.answerInsideTexture = Math.floor(Math.random()*14 + 1); //内圈错误答案随机 this.insideTexture = []; this.outsideTexture = []; for(let k=0; k<14; k++){ if((k+1) != this.answerInsideTexture){ this.insideTexture.push(k+1); } } cc.fx.GameTool.shuffleArray(this.insideTexture); this.answerOutsideTexture = this.insideTexture[11]; //分配正确答案和错误答案位置 if(this.config["inside"] > 0){ this.result += 1; let random = Math.random()*100; let arrayTemp = [0,1,2,3,5,6,7,8]; if(this.config["insideType"] == 1){ if(random >= 50) this.inside = [0,1,2]; else this.inside = [6,7,8]; } else if(this.config["insideType"] == 2){ if(random >= 50) this.inside = [0,3,6]; else this.inside = [2,5,8]; } else{ this.inside = cc.fx.GameTool.shuffleArray(arrayTemp); this.inside.splice(this.config["inside"],this.inside.length-this.config["inside"]); } this.answerInside = this.inside[Math.floor(Math.random()*this.inside.length)]; } //分配外圈正确答案和错误答案位置 if(this.config["outside"] > 0){ this.result += 1; if(this.config["outsideType"] == 1){ this.outside = [1,2,3,5,6,7,9,10,11,13,14,15]; } else if(this.config["outsideType"] == 2){ this.outside = [0,4,8,12]; } else{ this.outside = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; } cc.fx.GameTool.shuffleArray(this.outside); this.answerOutside = this.outside[Math.floor(Math.random()*this.outside.length)]; if(this.config["outside"] == 2){ for(let j=0; j<15; j++){ this.outsideTexture.push(this.insideTexture[3]); } } else if(this.config["outside"] == 3){ this.outsideTexture = [this.insideTexture[5],this.insideTexture[6],this.insideTexture[5],this.insideTexture[6],this.insideTexture[5]]; for(let j=0; j<10; j++){ let randomTemp = Math.random()*100; if(randomTemp>50) this.outsideTexture.push(this.insideTexture[5]); else this.outsideTexture.push(this.insideTexture[6]); } cc.fx.GameTool.shuffleArray(this.outsideTexture); } else if(this.config["outside"] == 4){ this.outsideTexture = [this.insideTexture[2],this.insideTexture[4],this.insideTexture[6], this.insideTexture[2],this.insideTexture[4],this.insideTexture[6]]; for(let j=0; j<9; j++){ let randomTemp = Math.random()*100; if(randomTemp<33) this.outsideTexture.push(this.insideTexture[2]); else if(randomTemp<66) this.outsideTexture.push(this.insideTexture[4]); else this.outsideTexture.push(this.insideTexture[6]); } cc.fx.GameTool.shuffleArray(this.outsideTexture); } } this.runBlock(); } //块执行图片出现消失动画 runBlock(){ if(this.config["inside"] > 0){ this.inside_Array[4].getComponent("Block").answerShow(this.answerInsideTexture); setTimeout(() => { let insideNumber = 0; for(let i=0; i 0){ this.outside_Array[this.answerOutside].getComponent("Block").answerShow(this.answerOutsideTexture); if(this.config["outside"] > 1){ let outsideNumber = 0; for(let i=0; i { let outsideNumber = 0; for(let i=0; i { if(!this.guide_State){ this.startTime = cc.fx.GameTool.getTime(); this.schedule(this.updateCountDownTime,1); } }, this.config["showTime"]*1000); } //正确 openResult(result){ this.result -= 1; //非引导状态 if(!this.guide_State){ this.flipBlock(result); if(this.result == 0){ this.unschedule(this.updateCountDownTime); setTimeout(() => { this.setData(result); }, 1000); setTimeout(() => { if(cc.fx.GameConfig.GM_INFO.level < cc.fx.GameConfig.LEVEL_INFO.length-1){ cc.fx.GameConfig.GM_INFO.level += 1; cc.director.loadScene("GameScene"); } }, 2000); } } //引导状态下 else{ if(result.result){ this.flipBlock(result); setTimeout(() => { if(this.level == 4 && cc.fx.GameConfig.GM_INFO.guide_Level == 2){ cc.director.loadScene("GameScene"); } else this.openGuide(true); }, 1000); } } } //翻转形状变成问号 flipBlock(result){ if(result.type){ let pos = this.changePos(true,result.id); if(!this.guide_State) cc.fx.GameConfig.CLICK_DATA.userChoiceInner.push(pos.x,pos.y); for(let i=0; i= 1) progress = 1; cc.tween(this.progress) .to(0.2,{fillRange:progress}) .call(()=>{ if(this.Top.getChildByName("star1").active == false && progress>= 0.2){ this.Top.getChildByName("star1").active = true; this.Top.getChildByName("star1").opacity = 0; this.Top.getChildByName("star1").scale = 0.1; cc.tween(this.Top.getChildByName("star1")) .to(0.3,{opacity:255,scale:1.1}) .to(0.1,{opacity:255,scale:0.9}) .to(0.1,{opacity:255,scale:1}) .start(); } if(this.Top.getChildByName("star2").active == false && progress>= 0.5){ this.Top.getChildByName("star2").active = true; this.Top.getChildByName("star2").opacity = 0; this.Top.getChildByName("star2").scale = 0.1; cc.tween(this.Top.getChildByName("star2")) .to(0.3,{opacity:255,scale:1.1}) .to(0.1,{opacity:255,scale:0.9}) .to(0.1,{opacity:255,scale:1}) .start(); } if(this.Top.getChildByName("star3").active == false && progress>= 0.8){ this.Top.getChildByName("star3").active = true; this.Top.getChildByName("star3").opacity = 0; this.Top.getChildByName("star3").scale = 0.1; cc.tween(this.Top.getChildByName("star3")) .to(0.3,{opacity:255,scale:1.1}) .to(0.1,{opacity:255,scale:0.9}) .to(0.1,{opacity:255,scale:1}) .start(); } }) .start(); } } //返回首页 backScene(){ cc.director.loadScene("LoadScene"); } //重新开始 reStart(){ } //获取时间戳 getTime(){ var timestamp = new Date().getTime(); return timestamp; } //获胜 passLevel(){ } //失败 loseLevel(type){ } changePos(type,num){ var x = 0; var y = 0; //内部 if(type){ y = parseInt(num/3+""); x = num%3; } //外部 else{ if(num < 5){ y=0; x=num; } else if(num < 9){ x=5; y=num-4; } else if(num < 13){ y=4; x=12-num; } else if(num < 16){ x=0; y=16-num; } } var jg = cc.v2(x,y); return jg; } //如果是倒计时 调用此方法 updateCountDownTime () { if (this.countTime > 0) { this.countTime -= 1; // this.TimeLabel.string =this.countTime + ""; this.TimeLabel.string = cc.fx.GameTool.getTimeMargin(this.countTime); if(this.countTime <= 0){ this.unschedule(this.updateCountDownTime); this.node.getChildByName("Mask").active = true; let data = {"result":false,"type":true,"id":null}; if(this.config["inside"] > 0) cc.fx.Notifications.emit("result",data); let data2 = {"result":false,"type":false,"id":null}; if(this.config["outside"] > 0) cc.fx.Notifications.emit("result",data2); } } } //上传每次操作数据 setData(result){ cc.fx.GameConfig.CLICK_DATA.success = result.result; cc.fx.GameConfig.CLICK_DATA.round = (cc.fx.GameConfig.GM_INFO.level + 1); cc.fx.GameConfig.CLICK_DATA.duration = new Date().getTime() - this.startTime - 1000; cc.fx.GameTool.setGameData(); } onEnable () { cc.fx.Notifications.on("result", this.openResult, this); } onDisable () { cc.fx.Notifications.off("result", this.openResult, this); } update (dt) { } }