|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
6 f& {$ b( s3 ]/ m) F服务器采用:c# 开发 4 n% P6 H- D" d }% w7 Z/ L; c, W
客户端采用:Unity2017
% B( `/ X. C! Z; J% |2 m# q9 O3 r6 k: I1 K
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。2 i+ u; N$ d3 k- {
课程每天会有更新,难免有一些特殊情况望理解。
+ m B, P4 z: m( W) N个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。/ y: G8 e* X1 m4 M% {4 ?2 q* \6 l
2 B; @! i% ?0 w& I7 j
严格意义上来说,本课程应该是两个课程合二为一了。
5 E' ]( ^. |8 H- d第一个课程就是《从计算机网络都服务器编程》。, D4 d9 H" A( Y; }
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:$ h1 K) v9 O. [3 l" |
什么是因特网?
' z3 Q; R" \. }" U" i' Y什么是协议?
" t9 }6 r, N4 I6 }什么是应用层?应用层协议?, c) f5 k* _" f7 X6 } T
什么是运输层?运输层协议?
3 B( V- B% d; j- ?什么是TCP协议?什么是UDP协议?3 f5 B$ }$ ~. F3 |+ s
等等···: \* j7 l9 C8 K# L% N1 s8 y
(很深层次的知识,大家根据兴趣来进一步自己学习)
3 S/ c# P& ^( I6 q9 B' i& E# q+ D知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。$ @3 B1 L7 m- k5 b+ r/ ?7 M
7 a/ x6 o; w$ Z# O第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
6 Z& ]! y/ u' K) E+ p" ~3 }; Q斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
9 Y9 }; K/ M' q
8 d- F- d) r8 T: s/ g8 v" Q% T; b, l4 U9 \, e$ p
001-课程介绍
( n$ u$ p; @$ P3 O Q c' C003-因特网和协议6 F% y0 @' c7 e" U5 @( K
004-分层体系结构9 r# [! d+ ]! v! n/ b0 o: f
006-进程和套接字
% k6 @& p8 Y% |$ H- `007-运输层协议TCP和UDP$ | ?. X0 n5 O) h# \1 R/ X
008-应用层协议HTTP1 n( R2 P$ C, h& O. o1 G
009-socket服务端9 `& y: {2 e9 ~9 P( ^( [6 A9 w
010-socket客户端: m8 O4 q% o5 X5 X, v( D
011-验证连接
) V1 \. y1 Z" L) [2 l012-SocketDemo6 ]8 b2 A/ D4 u; h$ i0 y% ]9 O- n
013-实现接收连接的异步事件
$ ~ W2 d$ O% s4 Q/ V+ w8 w014-添加限制连接数的信号( s' e! y8 S& c0 m! Z6 i( z6 W
015-封装客户端连接对象和编写连接池+ j K# Y& d: a2 ?7 U. C( }
016-GameServer(8-1)
+ [4 u! y0 u7 z7 D z: f* k( S017-粘包拆包问题介绍
. e4 v( `/ S4 @3 w; M018-采用包头+包尾的方式解决粘包和拆包
]6 S, g+ @, H019-GameServer(8-3)# k3 s% z' k. w( f
020实现异步网络接受数据# U6 S: V2 N" o' j3 f9 ~; l/ [% g( j
021-客户端对自身接收的数据进行解析
; N. X# j" X0 D. _022-构造SocketMsg负责网络消息的传递
& G( }7 r' B: L/ f i$ T7 K023-实现soceketMsg与byte[]的转化2 e7 x& `! K) @" P5 m5 s' m. X* y
024-对象的序列化和反序列化) O V" j8 }0 R5 w7 u1 E( l; i: Y
025-GameServer(8-3)_2
! u4 k" X. I9 I. }, r' t026-实现客户端断开连接
+ ?( k$ x+ Y. s0 k: i027-实现发送数据- V* J4 }( [: m) b
028-助学篇:带大家回忆一下所开发的内容
+ A( v2 y* J' e$ z% k# @- e029-抽象出应用层
. n+ f- o% |( C5 n' s/ s+ T030-GameServer(8-4)
) E( F4 e9 J- g* c% O031-开发定时任务功能(计时器),编写任务模型" q5 D# T& L1 z, U
032-创建计时器管理类,监听到达间隔触发的事件
+ W+ y+ a/ H/ p033-控制定时任务(计时器)的触发时间' [0 o* s9 |5 c7 t2 Z- B6 X
034-开发线程安全的INT类型
8 H! j# s! K+ M) X/ _! j035-GameServer(8-6)
8 c0 ]5 Z' P9 |2 U+ X, V; Z036-实现单线程池
0 ]' n8 K* S, O% @. ~ M- }, U037-Unity2017下载
/ F' K. d) q: J$ h038-创建工程导入素材
0 \- N: e& O& \039-Res
: g6 k( m' q2 U8 h! C040-Card(8-7)& |# F1 \. _0 C( l/ ]
041-GameServer(8-7)& C# V# M6 K' {' H9 H6 V
043-根据策划创建面板
9 Z4 t) C' g2 ]; M( [5 B% W044-导入客户端框架,创建PlayPanel脚本
! ^: y7 s: [# r045-完成开始面板
- K# _ S1 X3 h046-完成注册面板
' D$ L, w3 f! t2 U6 k047-Card(8-8)+ v* v. S5 z; O& ~* y# p. Y4 t
049-服务器架构介绍
! q l2 v7 u$ \0 @050-按照架构实现服务器
% a( \& g) B6 Y/ A! Q051-在客户端封装Socket,使其连接到服务器7 E& f% r3 m$ o: ^+ z9 O0 ~
052-测试客户端服务器的连接1 @$ `) Q6 v& M- k7 }
053-解决BUG4 n* m* E( F( D
054-Card(8-9)- X& z7 |) s4 z; c9 N) E
055-GameServer(8-9)
k# L; k0 d4 \2 h8 U056-修改客户端的链接方法$ X8 b* z9 H [4 N6 B7 j
056-修改客户端的链接方法_20171124142335; j% e# ~# z& G( V2 @+ U4 _
057-定义操作码、子操作码,演示客户端如何给服务器发送请求3 K _6 I7 o" l9 Y5 v
058-测试数据传输是否正确
& o7 `, z! t3 C" X059-Card(8-10)
: D1 G9 j6 ~7 S1 g2 K, {060-GameServer(8-10)
+ y# }' x/ t# ^061-创建账号缓存层,实现注册的一些方法
7 u% p! ?, j, I1 {+ V3 ~061-创建账号缓存层,实现注册的一些方法_20171124142334
; O# e3 z4 e( e062-完成账号缓存的所有方法6 U N7 j" ^" S& e2 M6 @+ c( L7 h$ C
062-完成账号缓存的所有方法_20171124142334
+ d- N1 y3 M: M' `4 k- {063-实现账号逻辑层
; V( Y% l( s' M. M! z& K064-解决今日BUG. h, `/ M7 B: x. C* @) p
065-Card(8-11). b3 ~0 p$ T8 ]
066-GameServer(8-11)' I2 H+ B& F7 G5 |9 F0 q
067-开发提示面板
% x4 a9 ^; ~. [4 G& o0 k# S! E8 l; E068-给登录和注册面板添加提示. e4 G0 h) a0 u- R
069-处理接收到的服务器发来的消息、优化发送网络消息的方法
1 C, i4 l1 H* q4 o. i7 |) n1 E070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)1 f1 B# O- n% C* C8 p
071-优化服务器,改变传输结果
5 y; [. W* P5 Z072-Card(8-14)) h0 k8 p6 s' x1 U: m5 t1 n& q
073-GameServer(8-14)- _& L! u4 A% {6 v
074-初步实现场景管理器,融入到框架中3 A0 O: e# _0 l, Z& _
075-增加当场景加载完成的时候调用的方法0 c& F5 z5 R9 c5 m! K
076-实现登录成功跳转场景/ I$ l; E2 G' y% x, y
077-设计UI之主界面的信息面板& H# _6 u* B( h; G6 V
078-设计UI之主界面的匹配面板( i# c& R0 _$ k) w( g" H
079-设计UI之主界面的设置面板) v' i5 z' \& B
080-设计UI之主界面的创建面板9 U3 [; Z5 u5 Q) c, E. d! @7 x
081-Card(8-15)
3 T7 h# J; ^6 K: G082.编写信息面板4 B$ h+ Q. ~7 y
083开发匹配面板
; V' {% i: H! o/ l+ D' U, R& O084.修改默认创建的脚本$ b7 |% ^# j6 g# k# x
085.开发设置面板/ x ^% z( y8 b5 P5 D9 ~
086.开发创建面板( p0 } Y' ^& Q8 z, m
087-Card(8-16)7 J8 F5 {+ V$ i" n* y0 H0 p/ {. a
088.创建角色数据模型
) [1 T* _+ D, o* F- y7 F( v089.开发角色数据的缓存层) |0 w" J7 W. i# y, W
090.完成角色数据缓存层- K8 @+ K* h- B: o
091-GameServer(8-17)
3 `* p: Q1 m Y3 i4 |1 I7 ~092创建有关角色的操作码. q- N1 V5 X8 J* I) e1 K
093.实现用户逻辑层7 l9 ?% u, N4 f' V
094.向服务器获取信息,在客户端创建用户处理类: \4 u) u( z! C; Q% x
095.客户端处理获取角色信息的响应
, G& W4 O# I. V3 T, |096.保存接收到的角色信息并且处理角色上线响应
! Z/ ~0 z6 l; y: \: L, h097.发起创建请求和处理创建响应
( q8 c' w4 W' R p098.演示本日BUG. A+ \. d4 I' }& v7 e$ |; p4 L
099-GameServer(8-20)
8 |2 R& u* b+ |100-Card(8-20)
5 S' F. i: `8 J% q/ ]101.更新客户端视图
0 V: X8 ` ?9 m) x$ K102-编写匹配操作码
' I; [. T Y2 P. J& r103-定义匹配房间的数据模型( P" D3 w# N. P! M/ l1 L6 C
104-创建匹配缓存层,实现进入匹配队列: |1 Z6 c4 f; f3 o$ e
105-实现匹配缓存其他所有的功能0 \! d+ {% q. U6 c
106-创建匹配逻辑类,实现进入匹配房间功能3 h6 x# \& x5 Y" x. ?. a4 i
107-优化服务器之群发消息) z1 o" n1 P. g6 h& z8 A
108-创建匹配房间的传输模型,在逻辑层进行构造
/ H- U% i) F- h. U; D109-实现离开匹配房间功能2 j, I- l+ Y+ I4 F/ ^. o) p
110-GameServer(8-24)
+ C2 o/ r6 i& E5 n111-实现玩家准备3 a& t4 J; E9 R
112-在客户端发起匹配请求
8 t# ]% l$ q- c6 U113-GameServer(8-25)' _5 Z, K) G) l, v# [; @5 h
114-Card(8-25)9 V1 i) @% _* z) J
115-创建MatchHandler,接收服务器的响应5 c3 z1 {% \8 @1 M; ?5 X8 J
116-保存房间信息,他人进入房间广播处理0 r/ b9 V8 V* c' s1 l- T4 S
117-玩家离开/ L7 R: S [& _+ z, {& _
118-玩家准备和开始游戏的处理6 U6 d+ s/ q4 W" B0 \
119-GameServer(8-29)2 {3 `/ E: j" y. F/ Q
120-Card(8-39) (1)1 _; u* A( R0 S. e/ t- r- m
121-搭建战斗界面的左、右角色状态面板
: Q! S) C2 \3 J, E; z, k/ R& Y122-搭建战斗界面自我的状态面板; p0 ^ w7 i" I
123-搭建战斗界面上边的底牌面板3 i$ ~& ^! b' g) F7 H) k9 J% D
124-搭建战斗界面下边的快捷聊天面板) G+ N% |- _* P o8 w6 K
125-搭建提示面板和结束面板
- t9 \. W% D( L7 J2 o2 F126-Card(8-30)5 y3 D- a) z; r5 f% I1 a, l# ~
127-创建出牌点,实现进入房间按钮功能+ l5 F* q8 N1 j& Y' T8 {4 U
128-控制底牌显示,编写代码
, ?3 i: ^/ H& L! j129-在服务器工程内创建卡牌的传输模型类# x: t/ H& `( X
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了) ^2 e$ I' U1 R9 A* s$ \
131-分别创建左、右角色的状态类(有破音)6 o# H2 K' _: o4 F, D! B" j* u
132-ard(9-2)
% j4 X, u" n5 Z9 V133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)( [/ h7 h, v, l7 p
134-如何控制玩家左、右玩家位置?(有破音)# M( b+ I. d3 g' ?+ c' A
135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
3 i9 L) r8 ?" o+ ]136-Card(9-4)9 j: T, _' b% ]5 q. @$ t% @! A7 x
137-GameServer(9-4)
9 f' _! i' Y; T5 z138-解决左、右的代码重复部分- C+ D0 Y( u8 P! s
139-创建自身的状态面板(有破音); X* y9 m5 f6 e6 A
140-完善自身进入更新状态面板
7 p- D( p- w! e: e3 X& I# G, X. }141-CardGame(9-5)' S" F# j5 X1 n8 O" n5 x
142-找之前的BUG(一)9 K! d/ Q C. m6 L7 L. C
143-找之前的bug(二)
% R$ g6 b0 \4 B144-Card(9-6)
& x3 u1 P: V: Z! t# U% \145-GameServer(9-6)8 j# ?9 b; {! b$ K
146-发送自身准备的请求& H* d" D+ P+ h
147-创建下边的面板的脚本
8 w1 }; c% G8 _148-Card(9-7)* @* l( D- L C2 s! K
149-创建聊天操作码,在客户的发起请求4 w, x& m4 ^* t- j0 k* o- }% X3 O
150-服务器处理聊天的请求,创建聊天传输模型
5 m$ e! M% G. \$ S* d3 i9 u$ ?151-创建聊天文字的常量类
. M$ u2 K: a7 Y152-Card(9-9)
1 r6 o% G: h C153-GameServer(9-9)
- ^. ?4 l$ N. ]0 J/ F9 G+ ^: f1 u154-客户端接收响应,显示聊天文字
- P9 j @* k r$ F& O155-聊天声音的播放
0 F4 _- B6 M3 f156-测试聊天BUG6 {; K+ S% o, M# C7 |5 y1 ~& B
157-Card(9-10)7 x$ m! y% F6 h! x% W, z g
158-GameServer(9-10)8 _3 m% z* V/ u. W( D
159-所有人准备完毕开始游戏,使用中介者模式触发8 _0 [: K& s4 |: }$ b
160-逐层分析,创建玩家数据的传输模型$ ?% i. a' L# Z* Y" `' f v
161-创建并初始化牌库,创建花色的常量类0 {5 T) b3 A8 ?
162-创建权值的常量类,完成创建牌库的过程+ Y4 \- i6 r) a5 O& d( v1 `
163-洗牌算法,完成牌库类+ ]& T2 |: A5 Y* }/ R: S
164-创建回合管理类
4 p2 [+ E* ?' @0 a9 e1 k5 p b& k165-GameServer(9-12)" m. U. M5 s) T% ^; Y
166-初始化战斗房间,添加第一个方法:转换出牌/ T0 l! g4 }# W8 z
167-创建出牌类型,判断能不能管牌
! f/ u; o+ ?, V4 d6 g168-如果出牌判断成功就移除玩家的手牌
5 R, h# L6 ^. d169-增加倍数和更新回合信息, g0 r7 l( {. C
170-发牌9 c5 I0 F9 o7 {2 r! A
171-设置地主身份,创建身份的常量类& O- v6 [/ {( v2 R* c' Z
172-补充一些辅助方法,完成战斗房间所有内容9 h- H, v- q; e! _
173-GameServer(9-13)8 z2 |& i7 R, L( y- ~. N
174-创建战斗缓存层
! F) l9 a# P. B8 x175-定义战斗的一些操作码
; S2 j+ t, M& ~2 T9 j8 O176-编写开始战斗的逻辑
. O$ Q! |9 }8 r3 R4 x. a1 b177-关于发送卡牌集合还是卡牌id的解释
! O& K* g( [4 H. k# {+ o, V5 r178-GameServer(9-16)+ [& c3 V. C% W* ]
179-实现抢地主的方法
" O" l$ [1 Z4 T5 r7 T8 {, z180-创建出牌的传输模型,获取选中牌的权值! z5 A0 ]8 ~2 x* \8 S3 d$ ~
181-判断各种卡牌类型
& y) i" i. v+ Q: ~182-完成编写出牌的传输模型. E" C2 H' w3 y0 x8 `4 `+ A
183-GameServer(9-18). y* `9 C" j$ A6 t. k
184-玩家出牌在服务器的处理
" ?7 I( z6 x' B L185-转换出牌的实现
& ^- R4 r" _) B$ G, J186-游戏结束的处理/ q! {" Z2 ~( e$ n
187-不出的处理
7 d8 s V* L6 V* e v1 ~188-玩家掉线的处理/ f1 C- m7 w5 E7 `) y
189-GameServer(9-20)3 S" P5 l; H+ R) u1 Q! O0 n
190-在客户端创建战斗的处理类,编写获取卡牌的处理2 o. }4 x C3 j
191-创建客户端的卡牌控制类
( ~ S2 q$ f* o5 L8 Z192-创建自身角色控制类,管理卡牌的创建
, Z3 Z8 P$ A, ?0 n& Q193-创建左、右玩家的控制类,管理卡牌的创建
8 y6 A# b( \* c8 F194-Card(9-21)
0 U7 k7 c n' Q7 d V195-给大家录制BUG过程
' m( F- ?8 H; ]% b! e196-GameServer(9-23) D! k# _8 `0 a: s
197-开始处理抢地主的响应
7 V; F0 m; m- O( z& A# J) r2 X( b198-发送抢地主请求和抢地主成功的处理5 H9 t z1 e/ k
199-自身的玩家添加三张底牌的处理
# K5 s5 h; B+ U6 }0 T5 v200-抢地主成功的处理完毕
* a! Y! X# l/ y0 i! ~201-测试抢地主并修改BUG
- _+ r" A) o; ^202-Card(9-24)
! [& z$ Y1 y+ ]9 \" m203-GameServer(9-24)! Q J ?& d0 P: L" v1 l7 N
204-接收来自服务器的出牌命令4 |. H3 g) r: S
205-客户端出牌的处理! z1 f/ C! Q/ I& D- k2 |/ h
206-向服务器发送不出的请求) {9 P, g1 c: ~7 U6 h) B
207-GameServer(9-25)
( x. i" ]% R5 `( s$ Q+ e0 q208-Card(9-25)1 \4 J) k4 J5 B; F1 h
209-给卡片添加碰撞器让他能点击) R9 Q2 A; [( J9 ?' Z# Z' I) |
210-解决出牌BUG
/ H8 n$ [3 X: Z) D7 y211-移除出完的手牌
B; u \5 I' Y" z212-管理桌面的牌显示. I/ J( m4 B; J1 U5 O0 G
213-出牌特效声音的播放+ I! h' N5 @. H: `* ?5 e
214-GameServer(9-27)
' e' ]4 s2 m1 \7 a8 r215-Card(9-27). |8 B' [; a( M0 \& {4 L
216-测试出牌BUG 上部, h: a7 j4 ^9 @: P! c
217-测试BUG 下部
- V1 f% r1 Z/ b! v: R4 K j- ?218-客户端+服务器(9-28)
, e* w. F n7 j" \8 a, @* {, o219-创建OverPanel代码脚本" w/ u7 ]! A# O: `1 r, ?' d8 m
220-通过消息机制表现客户端的结束2 c( w: d2 L- O# ~3 W" n
221-测试游戏结束2 L8 P3 e4 `" o$ e5 A1 n3 n
222-创建背景音乐播放控制脚本
9 {% {: t: B/ D; s& A6 n223-给前两个场景添加背景音乐- _0 m& n5 R0 u3 T
224-完结与未完+ L8 n5 h" Q' h* ^" l- g7 h
225-Card(9-30)& G& U; e% x1 u
226-GameServer(9-30)
5 c8 Z4 H, `* W$ X# r# l227-扩展课之ProtoBuf$ D% f7 ], e* v, ^$ n8 \& C
228-扩展课之ProtoBuf(10-15)下载地址:
1 ^. T" Y! q( V% A0 G* o' N; N$ L9 J) Y9 c6 @: L" C
2 `1 }" m; ]# m0 ]- F+ }1 t; |) R( w2 w- ~+ p4 t4 L" w3 G2 w/ n' W4 b
|
|