|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
1 L; [3 _1 }; l服务器采用:c# 开发 $ ?+ A1 q, O( u' E, w/ m
客户端采用:Unity2017. o4 r7 e6 z a/ H B- ~0 j' V
5 R0 B- |8 E2 p6 [ @- h3 L: s/ h
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
9 F1 b. X. \8 Y. R# U6 }课程每天会有更新,难免有一些特殊情况望理解。$ @' o, h9 Y0 T# q
个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。9 E* I) ` _! @# T7 o {1 d# z5 x
8 |5 K9 T5 L; |/ M: b+ f3 s严格意义上来说,本课程应该是两个课程合二为一了。% [' ]& g P: q3 b1 [6 Z0 n
第一个课程就是《从计算机网络都服务器编程》。, M3 w6 G( a5 S+ j7 r
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:2 E$ ~3 W$ u8 }. R: J0 z9 X
什么是因特网?
' T5 s( ~3 I3 z3 Z什么是协议?
7 j: [- \% S7 B: a& ~什么是应用层?应用层协议?- c( ^7 r4 [' r' F5 H Y
什么是运输层?运输层协议?
, ]- k# U" [5 E8 A$ T- Q$ z- W% V什么是TCP协议?什么是UDP协议?9 \# b, d$ \7 \; o
等等···! F- ?* L$ v" X$ `2 c
(很深层次的知识,大家根据兴趣来进一步自己学习)
8 z7 @0 M4 R& j% }+ ~' w% c0 ~知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。
: P. N9 Z: |; I, r0 h! z& C: w. V* l) u6 {% s, u/ ?7 Q% v+ N
第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
" h. S* _5 a' D1 B2 w! N$ D斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
9 {/ h/ @: i' M1 C& }8 ]' x2 P1 Z8 W- r; ]( b9 }, C
* Y% G$ Z) c% X* B8 [# n3 {, c7 f
001-课程介绍3 m" j1 Q% u& c: u" U! \$ V
003-因特网和协议$ ?2 G/ U0 R! [1 m" R
004-分层体系结构- U; A9 o/ e) z/ l
006-进程和套接字
8 p: w9 A7 L- B, m- Z |007-运输层协议TCP和UDP
8 |8 i4 A9 W) V9 u2 y008-应用层协议HTTP
/ Y! c( ^0 o2 E! P. F V- e) T5 q9 G009-socket服务端5 }' t# R: _2 B( P& Q2 u
010-socket客户端1 f! t0 l- [; T. \% H) L+ A
011-验证连接
4 B/ ], i0 `) V, t; V5 }012-SocketDemo
1 ]# A/ I( |: T% U! h013-实现接收连接的异步事件
v Q, i4 X$ b7 B& h( S014-添加限制连接数的信号. W6 P q4 ?' B' G6 N, d8 l$ r/ M
015-封装客户端连接对象和编写连接池
2 n) \9 h* j3 M0 ] a( h( @6 |016-GameServer(8-1)
4 u) f+ T+ m/ Y4 j017-粘包拆包问题介绍7 @2 J: @9 K# o- }- n1 T3 z
018-采用包头+包尾的方式解决粘包和拆包
7 ^9 w i; Y( l; W1 a# \019-GameServer(8-3)
* C. p( e+ q- n& ^5 {( H8 Q020实现异步网络接受数据7 m' n- \& I; y( F3 j
021-客户端对自身接收的数据进行解析9 s% E% K1 t. A9 l' ~2 i2 J
022-构造SocketMsg负责网络消息的传递% J5 @: H5 V8 |
023-实现soceketMsg与byte[]的转化& w2 X4 F4 u2 h6 e* `
024-对象的序列化和反序列化
3 e3 j5 G- @( `# o* y3 }025-GameServer(8-3)_20 _& v4 U( e1 ^8 a" j* w
026-实现客户端断开连接" M2 _) Y; u- h, s) N
027-实现发送数据
. y/ c7 x2 @* F5 C1 Q, ?+ C4 Q" _028-助学篇:带大家回忆一下所开发的内容/ P0 `6 w0 V* u& v# g) w
029-抽象出应用层* B( ]) v" M3 C% C
030-GameServer(8-4)/ |8 |" g" Y% s# X
031-开发定时任务功能(计时器),编写任务模型
" d2 X( k9 k1 \; U, q5 H032-创建计时器管理类,监听到达间隔触发的事件
7 d7 M) w2 ?* R& t033-控制定时任务(计时器)的触发时间
1 _: O' C5 P0 d, e' K# X034-开发线程安全的INT类型
5 C$ Q" m1 Q1 x, ?1 E9 b# c035-GameServer(8-6)$ c7 e* f m$ ^' ?7 V
036-实现单线程池
" R3 C" T3 r$ J7 M' R) E; |( ^( t037-Unity2017下载
7 B, \* I/ @7 |& @, y038-创建工程导入素材1 J9 E! b- c2 l9 R& r0 t7 V4 U
039-Res! d5 \5 d5 n% n
040-Card(8-7)
% \. ^. u/ U1 Q% z; n$ g041-GameServer(8-7)
" l% [0 w% |! ]' Z1 t/ w043-根据策划创建面板
* \. S% m1 \) ~4 l: O: j' N044-导入客户端框架,创建PlayPanel脚本5 }' o1 G3 a9 {6 F
045-完成开始面板
" q+ v _9 z7 k3 p046-完成注册面板# G- j7 _# r# H3 G$ p- u: r! S
047-Card(8-8)
/ U- I; J' t* f) m6 d* U049-服务器架构介绍# ]5 o0 Z6 m- Q( s' H9 {/ Y
050-按照架构实现服务器
# v* f7 j# U Z+ Z4 Z+ ~051-在客户端封装Socket,使其连接到服务器
1 F5 W, c& ?: u$ S052-测试客户端服务器的连接4 P* @7 a) a' i1 ^4 f2 Q) }
053-解决BUG
$ u6 I& z, Y% Z) m054-Card(8-9)
4 Q, V0 l6 t- W& r; @055-GameServer(8-9); A b+ i" J4 b" f. R) o
056-修改客户端的链接方法
, c) X8 n& c6 @0 w056-修改客户端的链接方法_20171124142335
/ j1 E; C! q; y2 d4 _057-定义操作码、子操作码,演示客户端如何给服务器发送请求3 J; W. J' _, x8 {* i, I0 ?
058-测试数据传输是否正确
, ^/ }# q+ O* K0 r* Y A5 ^059-Card(8-10)# e% e; {- \/ L7 d8 C% _& U# _
060-GameServer(8-10)6 W' `- ~$ k+ d/ o V% l3 e$ O
061-创建账号缓存层,实现注册的一些方法: V# ?" q0 P1 j- r4 H( I9 Q7 W
061-创建账号缓存层,实现注册的一些方法_20171124142334
3 w( \+ p$ f( z6 {062-完成账号缓存的所有方法
* w7 I* p& L# l3 e3 i3 e1 Z062-完成账号缓存的所有方法_20171124142334/ c3 }& u9 S8 {. D9 x* X5 A3 | f1 w
063-实现账号逻辑层
8 f9 m: m; \1 P064-解决今日BUG
! a' w, F5 k$ V; h065-Card(8-11). ?" N4 [/ A! \, m3 m: m8 ?0 m" q2 P
066-GameServer(8-11)7 P8 ` ]5 G I5 {7 `
067-开发提示面板" n. `/ U& O+ u% @
068-给登录和注册面板添加提示' p! ]" L* q& A8 {) X; l
069-处理接收到的服务器发来的消息、优化发送网络消息的方法2 A- Y% W( B s+ R' Y8 G" E
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
) y* I, @* ^; `! V( m071-优化服务器,改变传输结果- Z0 M& \$ G! s
072-Card(8-14)
" e! ?6 e' Y5 Y& l073-GameServer(8-14)
& ~; G7 g4 R3 d074-初步实现场景管理器,融入到框架中- E; u2 {, u# Z
075-增加当场景加载完成的时候调用的方法4 y7 e% W Q! N
076-实现登录成功跳转场景- ~# ?1 \+ C% ~8 G; X
077-设计UI之主界面的信息面板5 @- E0 X0 L+ ?% w
078-设计UI之主界面的匹配面板; A& b5 ~) h, l% t
079-设计UI之主界面的设置面板
/ o) U6 D9 P0 W- |9 s# X080-设计UI之主界面的创建面板
: n+ @, [' M# b, _" f$ l' w3 w( K081-Card(8-15): h0 r. I8 j6 S& D2 p$ g
082.编写信息面板
r! W8 ^5 t7 U/ l083开发匹配面板
% K8 T( T& ^9 X0 Q4 h, j084.修改默认创建的脚本
1 u# \2 i! Y* Q- N085.开发设置面板( Y: o; S+ k; Z% U
086.开发创建面板
4 Z% L7 x' F2 X087-Card(8-16)3 D; S7 H$ s A/ ?9 `5 v
088.创建角色数据模型
1 p7 w7 C' @$ n9 x* N8 @089.开发角色数据的缓存层8 e# M+ w" y5 x- r; l
090.完成角色数据缓存层% q+ N% u2 t/ l3 b4 n& b/ u% J' @
091-GameServer(8-17)
8 R/ l- G5 a' o7 V) G2 M092创建有关角色的操作码* c1 c( C; X4 s/ t& y
093.实现用户逻辑层
2 Z Q7 P- _( z4 r% s# Z094.向服务器获取信息,在客户端创建用户处理类: k {/ c4 p0 i, L8 v$ n
095.客户端处理获取角色信息的响应( @* }* T" Y* [" K* _
096.保存接收到的角色信息并且处理角色上线响应
4 \* t8 E* w) H: N; s0 ]097.发起创建请求和处理创建响应
) b2 y3 ^' G: y5 V098.演示本日BUG, I/ U: \5 X. t, |
099-GameServer(8-20)6 z, c% g. t- {1 m, ?; Z
100-Card(8-20)
- ?! z/ n L8 Y' ^8 g9 G* |2 e101.更新客户端视图8 z2 U1 Z' K9 \
102-编写匹配操作码6 [) j7 M/ C5 v# w5 \4 @' Y: ~ |
103-定义匹配房间的数据模型
/ B5 n/ Y4 x. c, A' ?1 i104-创建匹配缓存层,实现进入匹配队列- B" k! R2 z9 P$ `+ ?; ?/ Z+ ]/ b: ]
105-实现匹配缓存其他所有的功能6 r8 A3 C- \( ]; l* Q
106-创建匹配逻辑类,实现进入匹配房间功能. z& `3 s" Y! Z1 f4 U- P Y& W$ I
107-优化服务器之群发消息4 a3 |5 x! w& f+ M4 Q7 t6 Z
108-创建匹配房间的传输模型,在逻辑层进行构造1 R N& J8 i$ Z' g# M
109-实现离开匹配房间功能0 ^: N/ M$ ?% u5 ]# Q# i, K( M
110-GameServer(8-24)/ w% V1 \8 z6 G9 |- J3 u& C
111-实现玩家准备: {9 y7 G! v8 f% t. h" K1 n
112-在客户端发起匹配请求+ x; F. ]+ `$ I5 \ t' P6 }4 g* @
113-GameServer(8-25)* h1 }* |; N* w/ Z9 z
114-Card(8-25)6 u8 _9 E& z: A$ L9 q1 w- w
115-创建MatchHandler,接收服务器的响应" U' `, \5 H. B( N8 v
116-保存房间信息,他人进入房间广播处理
2 ^ i0 v, |0 }117-玩家离开
+ u$ g; ^+ ~4 }: E% x118-玩家准备和开始游戏的处理
6 P0 L" u! c/ S; ~9 g& v& t7 J119-GameServer(8-29)6 o+ G$ ]9 ^* ?
120-Card(8-39) (1)
' F. W7 j/ K, H& K2 ?9 Q( }" K121-搭建战斗界面的左、右角色状态面板
4 e( f' f2 v t0 @# J3 u122-搭建战斗界面自我的状态面板, q" O) g U- s. N
123-搭建战斗界面上边的底牌面板
* V% X3 L @! w, M# m' O4 H9 v. ~124-搭建战斗界面下边的快捷聊天面板" L7 E% R' P# D% O0 C) H# ?
125-搭建提示面板和结束面板
( [% Y+ t! p5 Z) H# O& [2 Q126-Card(8-30)$ ]2 M% Z z) T5 R# X3 }
127-创建出牌点,实现进入房间按钮功能5 [. e; V- L/ j; N# Y" V! V
128-控制底牌显示,编写代码
, h5 c8 Q1 K: g( O: z! O5 L: R129-在服务器工程内创建卡牌的传输模型类9 ^' R. N$ w+ A+ W' g" ?* L- J5 J' |2 ?* z
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)- |: E- |, y( H, R: y
131-分别创建左、右角色的状态类(有破音)
/ b7 H& v2 Z9 [, j6 I+ w8 ?% }# p+ M& Z. ]! h132-ard(9-2)
|7 {( ~+ l& j4 f. n8 m/ F! q133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)! t7 L8 ]& Y+ T. M/ V6 L. X% d
134-如何控制玩家左、右玩家位置?(有破音)
# Z3 T) E* {: t8 s' x2 F+ m# {135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
- k6 \4 V9 n* v- U3 z136-Card(9-4)( E$ u( n$ L' g L1 q6 M5 ~
137-GameServer(9-4)
3 i5 k% E. o" f138-解决左、右的代码重复部分
1 u4 L: X9 H7 ~139-创建自身的状态面板(有破音)6 |. w1 F; J' x& g, {- B( E
140-完善自身进入更新状态面板
8 a7 R2 P& {) L8 |; w3 ^. Q141-CardGame(9-5)- {, Y! t: b5 W" F$ b/ c$ z" G
142-找之前的BUG(一)
+ j! U. z& X1 ^/ s& Y143-找之前的bug(二)! v, {' H/ ], n; u3 i( g& i) k
144-Card(9-6)( ~1 ~/ \% K' f% b
145-GameServer(9-6)
7 s/ F" w/ q j1 z146-发送自身准备的请求* ]1 d& Q3 b# R+ S/ A8 ~
147-创建下边的面板的脚本* L2 ]9 w3 k4 _* {
148-Card(9-7): v: x5 e& T! m; Y
149-创建聊天操作码,在客户的发起请求2 j! E# `3 f- a. D# ?1 `8 O
150-服务器处理聊天的请求,创建聊天传输模型' c8 S# f2 \8 A: W# V% R
151-创建聊天文字的常量类
* M- o/ U3 F# D+ z* z. @152-Card(9-9)) M/ q3 `8 `6 w* [8 F4 U
153-GameServer(9-9)
- k' @# B# A- q; L+ J T154-客户端接收响应,显示聊天文字* r( A% a% R9 P0 w/ J! }
155-聊天声音的播放) f1 ^& u7 r, B5 N$ L9 I
156-测试聊天BUG4 c' O/ D! f& J; M
157-Card(9-10)
1 L) x8 O2 `- T/ c- u1 _+ k+ A158-GameServer(9-10)
3 [2 P' H1 R& `' k: C159-所有人准备完毕开始游戏,使用中介者模式触发- G3 }) r9 ?5 N% {# V4 n2 O
160-逐层分析,创建玩家数据的传输模型
0 K, d& U% l' ~/ u } R" e0 P( T161-创建并初始化牌库,创建花色的常量类
; b2 d( S) ?( J" b162-创建权值的常量类,完成创建牌库的过程2 @) h+ i/ _6 q$ r" m4 R
163-洗牌算法,完成牌库类7 h4 y+ H2 B3 H: x0 y5 J4 K4 o
164-创建回合管理类
, A% b8 J, ]8 l& s+ U/ w165-GameServer(9-12)
4 f2 \6 K, L1 A166-初始化战斗房间,添加第一个方法:转换出牌
* K8 S$ P; b3 D' M# i167-创建出牌类型,判断能不能管牌# S! d# i$ F p2 M
168-如果出牌判断成功就移除玩家的手牌
4 x* C* X7 I0 {+ k2 G3 h169-增加倍数和更新回合信息
+ ?# h. W5 n3 L1 C" q+ N170-发牌
' _6 y0 V+ b2 }+ G9 o9 o/ ~8 \171-设置地主身份,创建身份的常量类
0 m% j r0 G2 N2 a( q172-补充一些辅助方法,完成战斗房间所有内容
! r5 f( {4 f1 j& k: S: X( a6 O173-GameServer(9-13)
' }" R" i5 G# v' v174-创建战斗缓存层2 x8 Q% z A& G( O0 G) M' f
175-定义战斗的一些操作码
. T' I% L# N; h% s; g% E1 p: n% o176-编写开始战斗的逻辑
* B% D3 ?; W/ b# T% ]177-关于发送卡牌集合还是卡牌id的解释5 C/ J8 `! H; m( s2 l8 l1 U0 m
178-GameServer(9-16)
* o8 H0 P5 l1 o1 t/ |# o. | r! u179-实现抢地主的方法( N) x+ @/ l; E( ~
180-创建出牌的传输模型,获取选中牌的权值& [- V- k/ }' O9 ~0 _8 \% F8 Y" K
181-判断各种卡牌类型0 x$ K5 `+ B4 [/ x
182-完成编写出牌的传输模型- {+ c! v9 }8 o, x
183-GameServer(9-18)
+ J- Y8 b0 K+ i' A2 ^8 M: m! \184-玩家出牌在服务器的处理
7 V2 \2 Q& O3 z185-转换出牌的实现% x0 b+ e) i( I' ~% }
186-游戏结束的处理% Q" x$ l! t6 D8 B( i
187-不出的处理
5 Q3 C, T" T/ }* l9 ?& N' e188-玩家掉线的处理: n/ T8 O, ]# h J# h
189-GameServer(9-20)
- d- y6 N8 Y: R190-在客户端创建战斗的处理类,编写获取卡牌的处理
q) [& S4 U; j& R$ ~0 J' h2 Q191-创建客户端的卡牌控制类
! T. r$ h- b1 c! g7 z# P192-创建自身角色控制类,管理卡牌的创建* T1 o% g# m6 }2 u
193-创建左、右玩家的控制类,管理卡牌的创建/ L4 N) Q& p. A7 b8 j* D8 H }& D& O
194-Card(9-21). X9 E8 T2 Y; C$ y+ u+ x
195-给大家录制BUG过程. L/ K5 }! v" l0 T) }
196-GameServer(9-23)
- a5 L, g0 ?/ g$ O197-开始处理抢地主的响应7 N* l# G9 \1 g l" M1 k
198-发送抢地主请求和抢地主成功的处理- Q* O4 ^3 R. a p6 s m
199-自身的玩家添加三张底牌的处理
/ _5 T# f, Y2 C* z200-抢地主成功的处理完毕: R5 ]$ H7 T) F5 o
201-测试抢地主并修改BUG
4 _9 @8 s$ V4 A ^) Z2 ^# @2 x202-Card(9-24)% [) f6 |5 j# ^) F2 P! r: O
203-GameServer(9-24)8 {6 i' s4 K& B6 {4 D
204-接收来自服务器的出牌命令
; ^. P K& g. S0 M" G$ p205-客户端出牌的处理
& F' u. c0 V9 X. x9 I% J! N206-向服务器发送不出的请求- E p/ R x* \& B4 g% \
207-GameServer(9-25)
, X# X$ ~& s$ p5 q; p% M Q& v208-Card(9-25)( j* A" x4 ~* z0 C
209-给卡片添加碰撞器让他能点击
- o/ R R+ D$ C* S210-解决出牌BUG$ J$ Q6 f1 K8 t. y6 M* H, g
211-移除出完的手牌' @4 X& B5 E/ S$ H
212-管理桌面的牌显示$ x! ~& i' O, {7 ~$ J- d
213-出牌特效声音的播放" ~, M. m: Q3 ]+ A! u
214-GameServer(9-27)' }9 v; g! j7 s6 I- n- q) m) F
215-Card(9-27)
: M8 h( D7 f H! s. W4 t3 C5 i: s Y216-测试出牌BUG 上部
" Q* C0 C; l6 J; n; T) V1 N217-测试BUG 下部5 a# v# S4 _* K2 j" s( Y2 ?
218-客户端+服务器(9-28)$ ~% H( E# Q' h X0 p4 O
219-创建OverPanel代码脚本& c: D+ e4 J; j- A: o+ q
220-通过消息机制表现客户端的结束
, C$ }# y' g& a221-测试游戏结束$ W8 W6 q2 x7 H% ~
222-创建背景音乐播放控制脚本4 y4 I- f$ E, o7 O
223-给前两个场景添加背景音乐
$ d4 v" v5 i# k( l' `224-完结与未完8 ^9 [* r1 ^2 W( E2 b+ c; I
225-Card(9-30)
8 h; E4 k9 T9 I, i4 m: i9 Y226-GameServer(9-30)# l% b- o$ Q- N7 Y* q/ W" v
227-扩展课之ProtoBuf
z8 B8 V$ L- h228-扩展课之ProtoBuf(10-15)下载地址:
9 f' c0 x2 A# S. W1 Q% Z, X6 G( D9 q; r; I/ E2 S) j, ]1 a
7 o8 q9 H& h7 r- j; ] m: C, x5 `! P+ |* L6 n9 I7 ?& r
|
|