Commit 5dfac345 authored by 李维's avatar 李维

初步完成游戏逻辑

parent b18adaa4
...@@ -17,7 +17,11 @@ const BLUE = "blue"; ...@@ -17,7 +17,11 @@ const BLUE = "blue";
const MSG_TEST = "msg_test"; const MSG_TEST = "msg_test";
const MSG_SWITCHSIDE = "msg_switch_side"; const MSG_SWITCHSIDE = "msg_switch_side";
const MSG_ROLLING = "msg_rolling"; const MSG_ROLLING = "msg_rolling";
const MSG_PROFIX_END = "__END__" const MSG_GO = "msg_go";
const MSG_BACK = "msg_back";
const MSG_PLAYER_TO_TREE = "msg_player_to_tree";
const MSG_PLAYER_TO_HOME = "msg_player_to_home";
const MSG_PROFIX_END = "__END__";
@ccclass @ccclass
export default class SceneComponent extends MyCocosSceneComponent { export default class SceneComponent extends MyCocosSceneComponent {
...@@ -143,6 +147,8 @@ export default class SceneComponent extends MyCocosSceneComponent { ...@@ -143,6 +147,8 @@ export default class SceneComponent extends MyCocosSceneComponent {
this.initOfflineLayer(); this.initOfflineLayer();
this.initTurntable(); this.initTurntable();
this.initGemstone(); this.initGemstone();
this.initPlayerNode();
this.initTreeNode();
} }
// update (dt) {}, // update (dt) {},
...@@ -189,6 +195,77 @@ export default class SceneComponent extends MyCocosSceneComponent { ...@@ -189,6 +195,77 @@ export default class SceneComponent extends MyCocosSceneComponent {
this.offlineLayer = offlineLayerNode.getComponent("PlayerOffLineLayer"); this.offlineLayer = offlineLayerNode.getComponent("PlayerOffLineLayer");
} }
redPlayerNode = null;
bluePlayerNode = null;
redPlayerHomeNode = null;
bluePlayerHomeNode = null;
// 初始化玩家
initPlayerNode() {
this.redPlayerNode = cc.find("Canvas/player/red/people");
this.bluePlayerNode = cc.find("Canvas/player/blue/people");
this.redPlayerHomeNode = cc.find("Canvas/player/red");
this.bluePlayerHomeNode = cc.find("Canvas/player/blue");
}
treeNode = null;
// 初始化树木
initTreeNode() {
this.treeNode = cc.find("Canvas/center_map/tree");
}
// 小人上树
playerToTree(playerNode) {
const pos1 = this.treeNode.convertToWorldSpaceAR(cc.v2(0, 0))
const pos2 = playerNode.convertToNodeSpaceAR(pos1)
return new Promise((resovle, reject) =>{
cc.tween(playerNode).by(0.5, {x: pos2.x, y: pos2.y}).call(()=>{
resovle(null);
}).start();
})
}
// 小人到宝石
playerToGem(playerNode, gemNode) {
const pos1 = gemNode.convertToWorldSpaceAR(cc.v2(0, 0))
const pos2 = playerNode.convertToNodeSpaceAR(pos1)
return new Promise((resovle, reject) =>{
cc.tween(playerNode).by(0.5, {x: pos2.x, y: pos2.y}).call(()=>{
resovle(null);
}).start();
})
}
// 小人回家
playerToHome(playerNode, homeNode) {
const pos1 = homeNode.convertToWorldSpaceAR(cc.v2(0, 0))
const pos2 = playerNode.convertToNodeSpaceAR(pos1)
return new Promise((resovle, reject) =>{
cc.tween(playerNode).by(0.5, {x: pos2.x, y: pos2.y}).call(()=>{
resovle(null);
}).start();
})
}
//小人带着宝石回家
playerToHomeWithGem(playerNode, homeNode, gemIndex) {
const pos1 = homeNode.convertToWorldSpaceAR(cc.v2(0, 0));
const pos2 = playerNode.convertToNodeSpaceAR(pos1);
const gem = this.gemstonesAll[gemIndex];
const pos3 = gem.convertToWorldSpaceAR(cc.v2(0, 0));
const pos4 = playerNode.convertToNodeSpaceAR(pos3);
gem.x = pos4.x;
gem.y = pos4.y;
gem.parent = playerNode;
return new Promise((resovle, reject) =>{
cc.tween(playerNode).by(0.5, {x: pos2.x, y: pos2.y}).call(()=>{
resovle(null);
}).start();
})
}
// 异步游戏核心事件控制 // 异步游戏核心事件控制
allPlayerList; allPlayerList;
initNetworkListener() { initNetworkListener() {
...@@ -212,7 +289,7 @@ export default class SceneComponent extends MyCocosSceneComponent { ...@@ -212,7 +289,7 @@ export default class SceneComponent extends MyCocosSceneComponent {
console.log("游戏开始") console.log("游戏开始")
}); });
this.networkHelper.on("frameEvent", (event) => { this.networkHelper.on("frameEvent", (event) => {
cc.log("Frame event"); // cc.log("Frame event");
event.data.frame.items.forEach(async (item) => { event.data.frame.items.forEach(async (item) => {
if (this.server) { if (this.server) {
this.server.onFrameEvent(item.data); this.server.onFrameEvent(item.data);
...@@ -307,50 +384,50 @@ export default class SceneComponent extends MyCocosSceneComponent { ...@@ -307,50 +384,50 @@ export default class SceneComponent extends MyCocosSceneComponent {
cc.log("该事件没有注册过"); cc.log("该事件没有注册过");
return; return;
} }
this.eventsMap[eventName].fn(param, ()=>{ this.eventsMap[eventName].fn(param, (param)=>{
this.eventsMap[eventName].pending = false; this.eventsMap[eventName].pending = false;
if(this.eventsMap[eventName].isRequireEnd) { if(this.eventsMap[eventName].isRequireEnd) {
this.networkHelper.sendFrame({ this.networkHelper.sendFrame({
type: eventName + MSG_PROFIX_END, type: eventName + MSG_PROFIX_END,
sender: this.playerId sender: this.playerId,
param: param
}); });
} }
}); });
this.eventsMap[eventName].pending = true; this.eventsMap[eventName].pending = true;
} }
// 我方执行方法
runFunctionMySide(runFunction) {
if(this.side == this.currentGameSide) {
runFunction && runFunction();
}
}
// 初始化转盘 // 初始化转盘
turntable: null; turntable: null;
initTurntable() { initTurntable() {
this.turntable = cc.find("Canvas/Turntable").getComponent("Turntable"); this.turntable = cc.find("Canvas/Turntable").getComponent("Turntable");
cc.find("Canvas/Turntable").on("Rolling_Start", ()=>{ cc.find("Canvas/Turntable").on("Rolling_Start", ()=>{
// 游戏流程1: 玩家点击转盘
this.turntable.stopBlink(); this.turntable.stopBlink();
this.runEvent(MSG_ROLLING, {num:1}); this.runEvent(MSG_ROLLING, {num:1});
}) })
// this.turntable.initTurntable(true);
// this.turntable.blink()
// setTimeout(() => {
// this.turntable.stopBlink()
// }, 5000);
// this.turntable.disable()
// setTimeout(() => {
// this.turntable.enable();
// }, 6000);
// setTimeout(() => {
// cc.log("ABCDE")
// this.turntable.rollNum(0);
// }, 7000);
} }
// 初始化宝石 // 初始化宝石
gemstones = [[], [], []] gemstones = [[], [], []];
gemstonesAll =[];
initGemstone() { initGemstone() {
const gemstoneGroup = cc.find("Canvas/center_map/gemstone"); const gemstoneGroup = cc.find("Canvas/center_map/gemstone");
gemstoneGroup.children.forEach(gem=>{ gemstoneGroup.children.forEach((gem,index)=>{
let itemData = gem.addComponent('OPW_BoardGame_L5R4_word_dataitem'); let itemData = gem.addComponent('OPW_BoardGame_L5R4_word_dataitem');
gem['__index'] = index;
itemData.index = index;
itemData.word = gem.name.split("_")[0]; itemData.word = gem.name.split("_")[0];
itemData.score = Number(gem.name.split("_")[1]); itemData.score = Number(gem.name.split("_")[1]);
itemData.word = gem.name.split("_")[0]; itemData.word = gem.name.split("_")[0];
itemData.parentNode = gem;
itemData.beforeNode = cc.find("before", gem); itemData.beforeNode = cc.find("before", gem);
itemData.afterNode = cc.find("after", gem); itemData.afterNode = cc.find("after", gem);
if(itemData.score == 1) { if(itemData.score == 1) {
...@@ -360,7 +437,7 @@ export default class SceneComponent extends MyCocosSceneComponent { ...@@ -360,7 +437,7 @@ export default class SceneComponent extends MyCocosSceneComponent {
} else if(itemData.score == 3) { } else if(itemData.score == 3) {
this.gemstones[2].push(gem); this.gemstones[2].push(gem);
} }
this.gemstonesAll.push(gem);
itemData.afterNode.active = false; itemData.afterNode.active = false;
}) })
} }
...@@ -373,35 +450,69 @@ export default class SceneComponent extends MyCocosSceneComponent { ...@@ -373,35 +450,69 @@ export default class SceneComponent extends MyCocosSceneComponent {
this.side = RED; this.side = RED;
// 初始化红色阵营 先手 开始闪烁 // 初始化红色阵营 先手 开始闪烁
this.turntable.blink(); this.turntable.blink();
// 当前玩家上树
this.runEvent(MSG_PLAYER_TO_TREE,{});
} else { } else {
this.side = BLUE; this.side = BLUE;
// 蓝色阵营 后手 禁止点击 // 蓝色阵营 后手 禁止点击
this.turntable.disable() this.turntable.disable()
} }
} }
// 注册自定义消息事件 // 注册自定义消息事件
initEvents() { initEvents() {
// 测试消息
this.registerEvent(MSG_TEST, (param, next)=>{ this.registerEvent(MSG_TEST, (param, next)=>{
console.log("测试消息") console.log("测试消息")
next(); next();
}) })
// 换边
this.registerEvent(MSG_SWITCHSIDE, (param, next)=>{ this.registerEvent(MSG_SWITCHSIDE, (param, next)=>{
this.currentGameSide = param.side; this.currentGameSide = param.side;
this.handleSwitchSide(); this.handleSwitchSide();
next(); next();
}) })
this.registerEvent(MSG_ROLLING, (param, next)=>{ // 玩家上树
this.turntable.stopBlink(); this.registerEvent(MSG_PLAYER_TO_TREE, (param, next)=>{
this.turntable.rollNum(param.num).then(()=>{ if(this.currentGameSide == RED) {
// 异步操作执行完成后调用 this.playerToTree(this.redPlayerNode)
next(); } else {
}); this.playerToTree(this.bluePlayerNode)
}
})
// 玩家回家
this.registerEvent(MSG_PLAYER_TO_HOME, (param, next) => {
if(param.success) {
if(this.currentGameSide == RED) {
this.playerToHomeWithGem(this.redPlayerNode, this.redPlayerHomeNode, param.gemIndex).then(()=>{
next()
})
} else {
this.playerToHomeWithGem(this.bluePlayerNode, this.bluePlayerHomeNode, param.gemIndex).then(()=>{
next()
})
}
} else {
if(this.currentGameSide == RED) {
this.playerToHome(this.redPlayerNode, this.redPlayerHomeNode).then(()=>{
next()
})
} else {
this.playerToHome(this.bluePlayerNode, this.bluePlayerHomeNode).then(()=>{
next()
})
}
}
}, ()=>{ }, ()=>{
console.log(`执行${MSG_ROLLING}结束`) this.runFunctionMySide(()=>{
if(this.side == this.currentGameSide) {
if(this.currentGameSide == RED) { if(this.currentGameSide == RED) {
this.currentGameSide = BLUE; this.currentGameSide = BLUE;
} else { } else {
...@@ -409,19 +520,89 @@ export default class SceneComponent extends MyCocosSceneComponent { ...@@ -409,19 +520,89 @@ export default class SceneComponent extends MyCocosSceneComponent {
} }
let side = this.currentGameSide; let side = this.currentGameSide;
this.runEvent(MSG_SWITCHSIDE, {side}); this.runEvent(MSG_SWITCHSIDE, {side});
})
})
// 转盘
this.registerEvent(MSG_ROLLING, (param, next)=>{
this.turntable.stopBlink();
this.turntable.rollNum(param.num).then(()=>{
// 异步操作执行完成后调用
next();
});
}, ()=>{
// 游戏流程2: 走棋 index为序号
this.runEvent(MSG_GO, {index: 10});
})
// 走棋
this.registerEvent(MSG_GO, (param, next)=>{
console.log("走棋开始");
// setTimeout(() => {
// console.log("走棋结束");
// next()
// }, 2000);
if(this.currentGameSide == RED) {
this.playerToGem(this.redPlayerNode, this.gemstonesAll[param.index]).then(()=>{
next(param);
});
} else {
this.playerToGem(this.bluePlayerNode, this.gemstonesAll[param.index]).then(()=>{
next(param);
});
} }
}, (param)=>{
// 游戏流程3: 测评 - 对手不会出现测评界面
this.runFunctionMySide(()=>{
console.log("语音评测开始");
setTimeout(() => {
console.log("语音评测结束")
if(Math.random() > 1) {
console.log("评测失败,后退")
// 后退
this.runEvent(MSG_PLAYER_TO_HOME, {success: false, gemIndex: param.index})
} else {
console.log("评测成功")
// 玩家回家
this.runEvent(MSG_PLAYER_TO_HOME, {success: true, gemIndex: param.index})
}
}, 2000);
})
}) })
// 后退
this.registerEvent(MSG_BACK, (param, next)=>{
console.log("走棋开始");
setTimeout(() => {
console.log("走棋结束");
next()
}, 2000);
}, ()=>{
// 游戏流程3: 测评 - 对手不会出现测评界面
this.runFunctionMySide(()=>{
console.log("语音评测开始");
setTimeout(() => {
console.log("语音评测结束")
}, 2000);
})
})
} }
// 走棋
gameFlowGo() {
}
// 处理换边 // 处理换边
handleSwitchSide() { handleSwitchSide() {
if(this.side == this.currentGameSide) { if(this.side == this.currentGameSide) {
this.turntable.enable(); this.turntable.enable();
this.turntable.blink(); this.turntable.blink();
// 当前玩家上树
this.runEvent(MSG_PLAYER_TO_TREE,{});
} else { } else {
this.turntable.disable(); this.turntable.disable();
this.turntable.stopBlink(); this.turntable.stopBlink();
......
...@@ -24,8 +24,10 @@ cc.Class({ ...@@ -24,8 +24,10 @@ cc.Class({
// this._bar = value; // this._bar = value;
// } // }
// }, // },
index: -1,
word: "", word: "",
score: -1, score: -1,
parentNode: null,
beforeNode: null, beforeNode: null,
afterNode: null afterNode: null
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment