|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。# U1 a8 J" v1 x4 r3 R) s5 U$ x
服务器采用:c# 开发 ! O2 n1 K2 y4 @ a- t0 O. ]" u1 m) M
客户端采用:Unity2017
9 l- g3 O% a) Y0 E
0 L1 a- H8 k! E" }3 t1 ^学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
, m( d0 C% [1 Z, G课程每天会有更新,难免有一些特殊情况望理解。, G+ _) M q* b7 P! v& l
个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。" C8 ?6 a: F9 M% c1 |& B- x
( F5 g1 P2 }, P* \* s& B严格意义上来说,本课程应该是两个课程合二为一了。
% [. S O0 j$ S& p) }1 X第一个课程就是《从计算机网络都服务器编程》。- r; o. w+ m# \) Z
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
5 f& P5 E' _0 c1 D: M什么是因特网?! Q+ [1 { |+ L# g- i) ?: \
什么是协议?. W V8 @7 e$ I3 ~) E; j- Q
什么是应用层?应用层协议?
' P/ M5 b! U; C; t什么是运输层?运输层协议?2 f% E, ^2 r+ I9 O/ X
什么是TCP协议?什么是UDP协议?( a- _% z R% S. d/ w6 M
等等···4 x6 l0 w7 [: w: i2 Z: F6 c! o2 {
(很深层次的知识,大家根据兴趣来进一步自己学习)' v( F# A% C) t N+ Z; T
知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。8 Z Y! O8 l* l( _
7 o9 Z1 ^8 ]; V% n( G$ G) U
第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
( ~* q8 ]# Q: e% a. H斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。$ A! i% D! l! E: s& `" {! `% U- v
8 ^% G5 g) T' w% f5 M
5 }: s: v: _) _1 O% r" a) l
001-课程介绍
% C1 e4 j3 i. {( N003-因特网和协议; U7 f8 e' p" A/ B9 G$ h
004-分层体系结构
: t% E! ~ ~; q8 `006-进程和套接字7 c3 ~/ \6 g8 m4 ^/ `# ` F
007-运输层协议TCP和UDP' b3 c& r5 {& S6 n; T1 F; {1 H8 ~% P
008-应用层协议HTTP! |# v! w+ V: w4 [+ ?
009-socket服务端) S. W, S, s% a6 l6 }# i6 s
010-socket客户端
& _2 N# f' B: g0 ~& W011-验证连接1 p; P E! n. }) m6 e6 J0 }
012-SocketDemo$ ?- R' i' f0 N1 R$ ~9 y
013-实现接收连接的异步事件$ C8 r7 h" v0 u C4 p# n
014-添加限制连接数的信号
+ R9 j6 M- j9 G/ {6 I8 `8 d015-封装客户端连接对象和编写连接池
! Q& B+ q% \- p/ J8 n; @016-GameServer(8-1)
5 i' t B) A( n+ k8 B' O017-粘包拆包问题介绍
+ B8 _8 _: \9 u/ k018-采用包头+包尾的方式解决粘包和拆包' L' F: T0 v# c$ y8 [( p
019-GameServer(8-3)
/ M/ k& |9 G, e( V% _7 b, `% P020实现异步网络接受数据
2 ^$ Y+ Y" E# Q& P5 ~, M9 ]021-客户端对自身接收的数据进行解析% P/ M3 a3 u+ D( K4 t; h
022-构造SocketMsg负责网络消息的传递! M" o z/ v& D$ l, F. c R6 M: p
023-实现soceketMsg与byte[]的转化2 W4 N4 C! m( y# h. i& W8 [: S( q
024-对象的序列化和反序列化
! k" J7 N) ~9 K9 {( a T025-GameServer(8-3)_2
$ J, A v1 _* `# w5 R( }# V026-实现客户端断开连接
2 |3 {- |2 ^. V027-实现发送数据: o/ j/ F0 K2 P- m
028-助学篇:带大家回忆一下所开发的内容% V& W" a: B2 C/ l
029-抽象出应用层. n @8 f. {4 @7 m
030-GameServer(8-4)2 b8 w4 F7 y' D9 f# L# _! \0 t
031-开发定时任务功能(计时器),编写任务模型0 u5 u) X9 Y( \! M `
032-创建计时器管理类,监听到达间隔触发的事件
" S, B. n# n. ^4 B# Z- g: W033-控制定时任务(计时器)的触发时间4 B+ y# s" `( P, }9 }8 _
034-开发线程安全的INT类型2 K; B/ k. k( y1 B; R( V2 m
035-GameServer(8-6)
8 l/ w Q! y3 a5 H# H( m) ?' d2 p036-实现单线程池4 y, ]% t. I- G+ Q3 q
037-Unity2017下载5 }: t, Z: J9 v. i$ z6 H
038-创建工程导入素材
% E' Z+ v1 ~$ n4 P, {039-Res
+ Y7 o! v7 t1 T" G040-Card(8-7)- q4 q, J7 o3 Q" q
041-GameServer(8-7)
+ b4 g# j2 \9 S% s8 k043-根据策划创建面板- j0 p! W! W5 {+ p
044-导入客户端框架,创建PlayPanel脚本
0 c/ Z5 U" e, F2 p4 P$ T4 O" A" R4 h$ [045-完成开始面板2 }- ]7 v" `& J( I4 t7 E) y
046-完成注册面板" Q6 _' C3 W7 P. M% j3 p; T8 ~
047-Card(8-8)7 D$ K" o" ^$ @, i
049-服务器架构介绍( f& w+ N/ Z2 c' o
050-按照架构实现服务器
9 P6 ?- t% K4 s5 O4 r: [+ R051-在客户端封装Socket,使其连接到服务器0 l! _# ]2 P6 v, {5 N# g+ ^
052-测试客户端服务器的连接* ~8 q9 ?6 x& f# Z) b
053-解决BUG+ F' H8 U( K7 k3 n' k8 n3 r- G
054-Card(8-9)
. s' i* s$ Z7 P, |- o2 b055-GameServer(8-9)0 ]7 s5 R$ N$ T% ]' v
056-修改客户端的链接方法
4 T: \% P. c: O6 \! J056-修改客户端的链接方法_20171124142335( l$ w" o3 b( I7 P' T# K; s
057-定义操作码、子操作码,演示客户端如何给服务器发送请求( d. K {* g1 d9 E: ]' D3 N
058-测试数据传输是否正确. x* }5 b$ [( R" b9 C* ]6 w
059-Card(8-10)* H( b- {9 Z- ]4 j, @2 G
060-GameServer(8-10)7 q: o2 s; ~( s9 {% e( b" g# K8 D
061-创建账号缓存层,实现注册的一些方法
8 o# S5 i, @" A8 G7 X/ ] y8 G061-创建账号缓存层,实现注册的一些方法_20171124142334
, c& P4 c1 Z2 r5 X( F4 R- E/ E; q2 B062-完成账号缓存的所有方法
. k% {1 z, @5 f. K062-完成账号缓存的所有方法_20171124142334
- n6 _# }4 Z! y( j+ O7 t! w6 [6 e063-实现账号逻辑层, o! d) D* H9 I! |" Z2 }( i1 V* R
064-解决今日BUG; s3 A- o: n0 `/ `2 Y, g/ h7 J
065-Card(8-11)
9 ]% D) B# `0 G. \# @+ l [066-GameServer(8-11)
~4 | D* S4 N; ]6 Y* _067-开发提示面板2 X3 {: G( @7 ?3 ?* M8 J" P- F' s
068-给登录和注册面板添加提示
$ T4 O$ y/ r4 w4 }! `069-处理接收到的服务器发来的消息、优化发送网络消息的方法
4 c1 T3 G2 i$ v070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
% p3 _: F5 O& s# s+ a/ D071-优化服务器,改变传输结果
+ E9 e7 }6 P, H+ R) I$ b072-Card(8-14): q& H2 y( H/ K/ f
073-GameServer(8-14)
6 A& V _# K5 n3 M8 Z074-初步实现场景管理器,融入到框架中! ?2 ]* ~' Q6 G: N6 R6 J7 M
075-增加当场景加载完成的时候调用的方法( R9 u% _/ @3 n2 h2 C1 V
076-实现登录成功跳转场景8 [) d' m2 r, Q7 |" `
077-设计UI之主界面的信息面板
* n& t+ Y3 Z# h- k9 z3 `# ?078-设计UI之主界面的匹配面板
0 p1 Z' ?; V8 o( g079-设计UI之主界面的设置面板
% i2 [& \8 @' i6 \/ \080-设计UI之主界面的创建面板
% B L1 N( ^( l3 S081-Card(8-15)# y6 B9 j6 p( p% H
082.编写信息面板
. w# C# g, k; R* e# y- }& T/ n083开发匹配面板6 h; g5 [3 E5 E4 K: P: O
084.修改默认创建的脚本$ O+ O l, T O/ q# z5 }" ?- \
085.开发设置面板
0 K) L- |' t$ Q9 J3 I+ H8 B086.开发创建面板
3 _( R) V8 ?8 s# S: @3 I9 N087-Card(8-16)
9 _2 p. O- p* v2 K* G! v8 T! D# J088.创建角色数据模型7 }7 O8 l6 v) L3 I
089.开发角色数据的缓存层- z7 t2 u1 b2 G; P' d# A% s }
090.完成角色数据缓存层
9 e7 I" o+ a* o- R' V- b091-GameServer(8-17)
0 r- G" P. A+ h) W( E# O092创建有关角色的操作码6 J7 o; X2 j* [# e% T. X6 r" H1 R1 ~
093.实现用户逻辑层! b# K$ ?3 |8 s& W! f
094.向服务器获取信息,在客户端创建用户处理类" N& W% f, P K& }2 Y9 d) v
095.客户端处理获取角色信息的响应
8 t8 q8 Q! i) Q9 z: N" i096.保存接收到的角色信息并且处理角色上线响应( U' t& w% b! t
097.发起创建请求和处理创建响应0 A5 B4 K0 K$ ^4 U, d
098.演示本日BUG# b+ K4 D- W+ v) q
099-GameServer(8-20)
! K1 N1 h2 [4 o! Z+ x9 H100-Card(8-20)7 {& ~6 `; X# k
101.更新客户端视图
* K. J A" E( M3 m$ C8 N/ B102-编写匹配操作码
- k l1 F8 {. x) D9 R103-定义匹配房间的数据模型
7 ^. c- y( j+ u9 g104-创建匹配缓存层,实现进入匹配队列
- w4 Q1 z% G/ h; d# J! g105-实现匹配缓存其他所有的功能
1 o% V( h# ~8 v) j i106-创建匹配逻辑类,实现进入匹配房间功能3 c' p x- j. w: c6 k/ b! P) G
107-优化服务器之群发消息
9 Z) F% R# M: a S8 \108-创建匹配房间的传输模型,在逻辑层进行构造
6 q' t6 Q+ ^( c109-实现离开匹配房间功能
) |* H9 T0 V! ^2 I2 c% o110-GameServer(8-24)
/ H7 o, p$ A4 h111-实现玩家准备
0 j7 l/ N+ E2 M8 U112-在客户端发起匹配请求
6 I9 X q+ l' h+ U: r8 Z113-GameServer(8-25)2 t2 M, D( n& m. I4 ]+ w* U0 j; r8 E
114-Card(8-25)1 l, j( F$ s* E
115-创建MatchHandler,接收服务器的响应
4 a! L: Y+ E9 X5 H1 z, l; c116-保存房间信息,他人进入房间广播处理- u% Z" Q0 P f" f! [2 P, t3 ^3 s7 B
117-玩家离开
; d1 j% |9 X. f7 b% ?* i118-玩家准备和开始游戏的处理% ^2 ?/ }+ ?' W5 Y) j# }% B
119-GameServer(8-29)
# K2 W$ h6 g! d7 o0 q- e: R" T120-Card(8-39) (1)& I: F& R& E# ^# Q, \
121-搭建战斗界面的左、右角色状态面板* `1 \, ?6 S; c7 x8 O- ~5 L" }
122-搭建战斗界面自我的状态面板- v- \- ~7 O' n) }% t
123-搭建战斗界面上边的底牌面板( ?" q6 u2 J I, e c
124-搭建战斗界面下边的快捷聊天面板
5 a6 [ e. b$ w# ~125-搭建提示面板和结束面板. P4 j) { s% p& k
126-Card(8-30)
& [8 U8 I) A; E) ]127-创建出牌点,实现进入房间按钮功能+ D: R7 S2 V; u2 @
128-控制底牌显示,编写代码! [& W9 `+ G6 w0 W
129-在服务器工程内创建卡牌的传输模型类
1 ]# }8 y' D* d5 ]130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
4 @& R' c* g: U+ r131-分别创建左、右角色的状态类(有破音)
v7 n: h1 ?* n' h- |132-ard(9-2)- {" M- E. }2 q+ z& R
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
9 H+ F7 H. ~& z4 K3 ~134-如何控制玩家左、右玩家位置?(有破音)( l i6 v; T0 t4 _4 E
135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
2 j& ?& P( Y1 t4 ^' x- P- }( D2 M136-Card(9-4)
! o2 }' e8 s5 l( ?137-GameServer(9-4)7 \3 k6 v9 ?" _, X2 j
138-解决左、右的代码重复部分
" F7 M# z; l6 ~/ z$ S) A% Q139-创建自身的状态面板(有破音)
% a h5 O b9 B, m$ J M# D140-完善自身进入更新状态面板
: S( j+ }/ Y9 ]* m1 D2 y% G, Z141-CardGame(9-5)3 j3 R" _' V& r
142-找之前的BUG(一)2 _5 ~ h+ ^* X6 K
143-找之前的bug(二)) L' m* s4 n* L# V$ I: Y
144-Card(9-6)6 u- m( @7 b* R3 _! T/ O
145-GameServer(9-6)
0 @& n9 W" ?7 s% D146-发送自身准备的请求5 g# P: C2 _6 P5 N' r
147-创建下边的面板的脚本6 z0 ^5 ^( a, z6 }
148-Card(9-7)
6 }& E z }3 G149-创建聊天操作码,在客户的发起请求
2 N$ x9 c- b+ E- Y% c) O/ G9 R6 j150-服务器处理聊天的请求,创建聊天传输模型
' I$ _2 ~5 D5 I( i151-创建聊天文字的常量类
2 k# ?! h; n2 }, Q- e) O: e8 H. O152-Card(9-9)
7 E0 h, Z8 A# c3 v: {: q( p153-GameServer(9-9)/ D; \1 g# C/ ]6 ~5 ~! A
154-客户端接收响应,显示聊天文字$ F3 I. `8 ^' f- S/ K- O& g
155-聊天声音的播放, I# R K0 I/ p" d
156-测试聊天BUG
0 W6 s5 Z& C3 Z7 W; r# k157-Card(9-10)6 W0 L) q& W0 J3 j, X! k
158-GameServer(9-10)* _, B" P# J ^) f
159-所有人准备完毕开始游戏,使用中介者模式触发; H9 B: w% L4 c, d7 i0 U+ {* n
160-逐层分析,创建玩家数据的传输模型: x, s$ c( `; _8 N9 R/ i, ~
161-创建并初始化牌库,创建花色的常量类, a7 ^1 H+ U- K0 `2 r/ k. S0 M
162-创建权值的常量类,完成创建牌库的过程, c+ k+ [# w. M
163-洗牌算法,完成牌库类
+ t8 G6 A, b) o6 c( z+ I/ U* `164-创建回合管理类
7 j& ^8 I# Y+ n165-GameServer(9-12)
" G( Z& R7 Z( v* S8 @% J# {166-初始化战斗房间,添加第一个方法:转换出牌
% d$ V! ?. L6 w/ L167-创建出牌类型,判断能不能管牌
) {6 k4 h5 }9 G% m% w/ l168-如果出牌判断成功就移除玩家的手牌
- D3 l0 e5 Y: _9 l8 G169-增加倍数和更新回合信息1 b' C7 N; }3 v* n+ I9 O2 w: n
170-发牌* n% d; n3 ^( |1 I" k
171-设置地主身份,创建身份的常量类
4 S3 d, y4 x1 m: P& `172-补充一些辅助方法,完成战斗房间所有内容+ r; K$ ?+ N2 l. @/ j
173-GameServer(9-13)
% ^! n, I3 }1 I% g# n8 ~6 u# q174-创建战斗缓存层
( V$ }3 e9 F+ O175-定义战斗的一些操作码
6 \$ z' [ D$ o, K: e176-编写开始战斗的逻辑6 O1 E3 {" Z) C: `( \) g
177-关于发送卡牌集合还是卡牌id的解释
7 ~/ I/ Q8 V3 y0 x178-GameServer(9-16)2 B1 n! c/ B* ~0 E0 V$ N
179-实现抢地主的方法
) d+ p1 E3 R" Y& g+ @; C7 ^! U2 j5 n180-创建出牌的传输模型,获取选中牌的权值. X/ F; [( l6 V9 x$ {7 r; Y: J$ H
181-判断各种卡牌类型8 ?+ \$ b: s% L4 I
182-完成编写出牌的传输模型
: Y5 ~# n R, v" B5 r" X0 {183-GameServer(9-18)/ N3 ~- G% A' Y6 w
184-玩家出牌在服务器的处理
3 R/ }1 U. b: b' s! K, y185-转换出牌的实现1 [& A! G' J+ C H! ~
186-游戏结束的处理
$ C( U6 H- s" Y; P+ I- O187-不出的处理" H" z, t7 z D7 S$ ^+ z6 D
188-玩家掉线的处理- v5 M% v+ y1 Z% j/ ? e
189-GameServer(9-20)
. g; x6 |' l7 \; F' U! r190-在客户端创建战斗的处理类,编写获取卡牌的处理' h0 e2 [& f( x) g- M- y
191-创建客户端的卡牌控制类$ b" e5 }* @4 _, F
192-创建自身角色控制类,管理卡牌的创建2 u8 ^1 D- ~& a1 G
193-创建左、右玩家的控制类,管理卡牌的创建
# @% w3 D6 g7 t6 L% \: G194-Card(9-21)
; S4 ?4 J" M- s& D* \195-给大家录制BUG过程1 r& x* w3 n5 u
196-GameServer(9-23)/ u- N: S7 g2 e1 C7 C6 r
197-开始处理抢地主的响应
- u- T. P7 x$ n+ \198-发送抢地主请求和抢地主成功的处理8 u8 A$ i. I* V
199-自身的玩家添加三张底牌的处理
; F) ?7 A5 ^* f2 U# j/ S200-抢地主成功的处理完毕
( [9 o8 h; K. `201-测试抢地主并修改BUG
3 L. p* A9 x; q+ t202-Card(9-24)
8 v' I5 c5 K0 o8 O" B: r203-GameServer(9-24)& a% V0 m1 L+ `( m- _
204-接收来自服务器的出牌命令
' P+ M, ^) {1 f/ r2 Q205-客户端出牌的处理) D* y4 Z C- [) f2 l0 ~
206-向服务器发送不出的请求8 ~2 |6 X$ m4 [2 J+ b
207-GameServer(9-25)4 J& o5 s {! _; i) R6 `
208-Card(9-25)$ O& g( U! w8 K7 o4 K# ]
209-给卡片添加碰撞器让他能点击& |" {/ |# z( C0 {- l1 l, x& v
210-解决出牌BUG
6 h0 P0 u& j3 n% P! ?5 S211-移除出完的手牌; ~ b. k; c. {, N9 }- N
212-管理桌面的牌显示7 j, h6 f# f# f8 A% H0 m
213-出牌特效声音的播放& z# ?& n* z% A& }. @" y3 b2 x+ D
214-GameServer(9-27)
% U& o, w# `- M# h F215-Card(9-27), m1 W$ R9 A% ?5 t* C' O. T6 O! s
216-测试出牌BUG 上部
. G5 ^# \3 y6 c7 E) k+ m8 d, s217-测试BUG 下部
4 @; M- J3 v" q( e( C, y) s2 G218-客户端+服务器(9-28)
- p4 _8 \! t8 m& V8 z+ L219-创建OverPanel代码脚本
6 q; q. T, X8 Q& v |3 y# Z7 Y220-通过消息机制表现客户端的结束5 v. E$ q2 u0 k% F' ]5 J
221-测试游戏结束
8 R6 h3 j! ]* Z' q: Y& A222-创建背景音乐播放控制脚本
* F& O$ w- b/ j0 i( C" }( C* ?223-给前两个场景添加背景音乐8 S, r6 T8 _# ?
224-完结与未完' `* ^$ o; [ b2 T8 h' N' H
225-Card(9-30)+ Q4 H2 T' _4 d8 F( b
226-GameServer(9-30)
8 |9 v3 F% {6 E227-扩展课之ProtoBuf
, R. d1 H1 o1 G0 J8 B! r7 w* r$ D228-扩展课之ProtoBuf(10-15)下载地址:
' b. q) B1 s/ W! B% r8 R/ n! ^6 j% Y. e! I3 x8 y
5 t( w7 t/ i6 }: g7 T7 y+ m: \! L G& k
|
|