Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OPW_BoardGame_L5R4
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
template admin
OPW_BoardGame_L5R4
Commits
5dfac345
Commit
5dfac345
authored
Nov 23, 2022
by
李维
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
初步完成游戏逻辑
parent
b18adaa4
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
211 additions
and
28 deletions
+211
-28
OPW_BoardGame_L5R4.ts
assets/OPW_BoardGame_L5R4/scene/OPW_BoardGame_L5R4.ts
+209
-28
OPW_BoardGame_L5R4_word_dataitem.js
..._BoardGame_L5R4/scene/OPW_BoardGame_L5R4_word_dataitem.js
+2
-0
No files found.
assets/OPW_BoardGame_L5R4/scene/OPW_BoardGame_L5R4.ts
View file @
5dfac345
...
@@ -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
();
...
...
assets/OPW_BoardGame_L5R4/scene/OPW_BoardGame_L5R4_word_dataitem.js
View file @
5dfac345
...
@@ -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
},
},
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment