|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
4 F+ Z6 _, g2 [0 L- T服务器采用:c# 开发
4 H5 _: t7 q$ e! O5 Q- y' e" W; H客户端采用:Unity2017 T" X( P E( n" _9 T: c, O) J
0 E/ C; t* ~. ]* K3 u# p" U
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。- ~* J2 e6 |+ a W$ @3 }3 P
课程每天会有更新,难免有一些特殊情况望理解。
' x# e |! s4 n6 ^个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。
8 I2 C& y( W# a7 H8 X. O. G6 o/ I+ R# v
严格意义上来说,本课程应该是两个课程合二为一了。' O f) o- E+ E! F5 Z+ _
第一个课程就是《从计算机网络都服务器编程》。
! t0 ^; {8 R. g/ V" i: K关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:# I, X8 h8 p( ?& q6 a. f. P
什么是因特网?
3 O4 S" {) t0 W什么是协议?
w( u5 x4 w1 G7 y. [$ y什么是应用层?应用层协议?
' w: l" l- {) O什么是运输层?运输层协议?* S( o/ |, v% J
什么是TCP协议?什么是UDP协议? R& O& E! Q: Z
等等···
6 V; A* h1 j0 }6 r1 o(很深层次的知识,大家根据兴趣来进一步自己学习)
. c T; P6 k" g& w% U. m知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。
) h5 h+ E7 U, @
6 v* h7 Z2 r4 e7 N- `1 ]第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
) ?! o% d4 ]( y. Z8 C) x) A! m斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。' v" j9 @0 K$ ?" t6 d
8 F" b& B0 x. [ K/ ^3 p* _' n/ b, ]0 ?) o4 J+ D3 h
001-课程介绍
# o8 Q0 Z; n+ s4 N9 e003-因特网和协议
9 u' U4 L3 {6 U1 l' m- s004-分层体系结构' j: r% D/ O/ w6 s
006-进程和套接字0 l, D" x3 S6 ?. a, U
007-运输层协议TCP和UDP
6 J7 ^9 G% X. ^ M) Z008-应用层协议HTTP
% N4 v1 Z: i0 Y, V5 l009-socket服务端: M0 p7 a. i$ ?2 q- J8 [
010-socket客户端+ q1 X' c! N* f* Y2 {
011-验证连接# s7 [4 T" j# @# u, r" ~9 G
012-SocketDemo
& P6 o0 F& f0 s2 _9 x" r/ E3 G013-实现接收连接的异步事件
+ n1 a, \6 T) \3 j+ r! d' |7 W3 p014-添加限制连接数的信号# {5 Q" F+ b* Z2 ~! l
015-封装客户端连接对象和编写连接池
' {- v k% f+ o8 Z. k' W1 Q- ]9 S016-GameServer(8-1); c$ r: `9 J+ h& d
017-粘包拆包问题介绍
" \ W" L& I# Z6 |8 M8 Q018-采用包头+包尾的方式解决粘包和拆包
$ h; _* ?7 s2 ~( C019-GameServer(8-3)
( H& |5 e1 a) ]+ ]' ^* f1 e020实现异步网络接受数据 [( e6 ]# ~; I/ \ g: z
021-客户端对自身接收的数据进行解析, x" U+ N+ S5 ~9 }% x; L1 B
022-构造SocketMsg负责网络消息的传递
0 n1 @! X3 ]( V3 u$ _( H023-实现soceketMsg与byte[]的转化# s9 J( w$ {* ]8 u6 b
024-对象的序列化和反序列化
% n3 D' L& d2 c+ X n0 A025-GameServer(8-3)_2% _9 L f- r- }2 W% Y2 p1 V# [
026-实现客户端断开连接
, R5 Z+ @( p( J6 E& G: ~027-实现发送数据5 f; g# y$ t- [$ E4 N
028-助学篇:带大家回忆一下所开发的内容
- ~! c* M. U0 h! c5 V3 m6 |! x029-抽象出应用层
# k, V2 L/ ]6 a1 `6 f6 D* {030-GameServer(8-4)
! n4 h! Q l, m031-开发定时任务功能(计时器),编写任务模型
' b0 r" G* ^7 |2 d- L, @032-创建计时器管理类,监听到达间隔触发的事件
/ W; A; C+ q. P3 D0 k033-控制定时任务(计时器)的触发时间
2 a/ n6 C5 T4 H% N6 i034-开发线程安全的INT类型/ ~; `$ W9 J1 w& U( T7 x
035-GameServer(8-6). P4 `3 P. x. \4 k; h9 B
036-实现单线程池' D: {0 {* h7 j# N
037-Unity2017下载
! M# e# T% i3 @3 V5 z& ?038-创建工程导入素材/ C# ?9 }6 I6 w, s
039-Res+ f& b' a' Z. @6 ]3 q: ]) {
040-Card(8-7)
$ ]) R& z6 m1 a7 R1 F* F041-GameServer(8-7)% l( ^/ B' Z" G9 O0 l1 O
043-根据策划创建面板5 J) ~6 P+ B+ s; L s" o; I
044-导入客户端框架,创建PlayPanel脚本% }: f% ?3 X) n
045-完成开始面板
0 H& y+ M/ f. }( o9 p" A2 ^+ ~046-完成注册面板
- W b7 ]* ?2 a6 V' B/ Q047-Card(8-8)
9 v4 K, G- r" }% n) W/ E% B( G049-服务器架构介绍# c% O- Q2 R! Y$ X5 X5 i
050-按照架构实现服务器
: R* {- i: a. s051-在客户端封装Socket,使其连接到服务器
, g+ ~* U O& r052-测试客户端服务器的连接1 Z8 L2 }) F/ Y) X) U
053-解决BUG
0 b ?& k" c& z% j054-Card(8-9)$ v. ~5 Y [& u# V' X
055-GameServer(8-9)5 R0 P, l8 H9 y' b7 g1 T$ Z
056-修改客户端的链接方法
- F* m; f9 g6 S. A/ d6 J4 q) C056-修改客户端的链接方法_20171124142335, X a( [0 }- s$ q4 Y1 A
057-定义操作码、子操作码,演示客户端如何给服务器发送请求( k+ t E: ~0 C: b% X: u0 M
058-测试数据传输是否正确
( P- `. Q, Y7 I) a" H059-Card(8-10)
$ y% L" A% ?6 B060-GameServer(8-10)3 j+ e# T* L: S. c
061-创建账号缓存层,实现注册的一些方法
1 ^- T6 f% z, r9 c: E061-创建账号缓存层,实现注册的一些方法_201711241423347 X) B$ D/ z* w
062-完成账号缓存的所有方法
3 c I) y( Z! I: D5 W062-完成账号缓存的所有方法_20171124142334/ ?6 V2 z! N5 O" q: @' e
063-实现账号逻辑层
" {* L5 m1 S; w. R+ T064-解决今日BUG1 A+ T' V- S h! ~4 ^, Y$ ?
065-Card(8-11)
, \; q! j; h0 {/ W066-GameServer(8-11)
{* ~, }2 n, s" i067-开发提示面板
k3 N1 f- r+ U F6 F7 h068-给登录和注册面板添加提示* X- @: k( H+ u5 ^8 E/ K" Z% L
069-处理接收到的服务器发来的消息、优化发送网络消息的方法2 c1 k9 D6 b V' [$ T% O
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)8 j7 O3 L }2 ~- S
071-优化服务器,改变传输结果7 ]5 I1 j( B; n: {
072-Card(8-14)3 A; I( y& O+ d
073-GameServer(8-14)7 ?4 y- G9 d/ P5 `
074-初步实现场景管理器,融入到框架中, a- r: i6 o8 I2 W
075-增加当场景加载完成的时候调用的方法+ v) f$ F6 x/ U$ o- F5 ~
076-实现登录成功跳转场景
0 R3 F1 w1 q) x0 Z, K# x3 a077-设计UI之主界面的信息面板) x6 Y$ A7 |$ ]$ K- ~
078-设计UI之主界面的匹配面板; h- L2 n; Q* y( | ~
079-设计UI之主界面的设置面板
- _# b0 Q. D" x- T- ~8 B N! E080-设计UI之主界面的创建面板, y. a" o0 \" I' Z% w6 q: B9 Q
081-Card(8-15)4 K) f7 ^9 |) W
082.编写信息面板9 R ^3 g0 i) q5 I
083开发匹配面板
+ q$ Y3 Z+ S4 U9 ~9 x084.修改默认创建的脚本; {. ?# m5 [3 s/ f3 \+ ]
085.开发设置面板! @4 F" F' x' y4 h& z o
086.开发创建面板
7 |1 G2 p% `7 q087-Card(8-16)" |* \4 E9 r+ o) o" K% e
088.创建角色数据模型
3 d* k" \- N8 `% N089.开发角色数据的缓存层
+ {/ |% i: D# q) J% o090.完成角色数据缓存层( K5 P0 [9 O2 B. f! n* H4 P
091-GameServer(8-17)
& P9 f# A/ t( H. J5 v092创建有关角色的操作码 s7 ^, a; R% k3 d3 k; L3 U2 Z
093.实现用户逻辑层' x& X' |1 r$ N: P8 i
094.向服务器获取信息,在客户端创建用户处理类
8 \6 K8 ]' b" C095.客户端处理获取角色信息的响应; T3 v+ M. B: P5 I' T, E
096.保存接收到的角色信息并且处理角色上线响应3 S- H# h. L# c T" ?2 K6 V
097.发起创建请求和处理创建响应
7 a; e1 `( y7 s1 o098.演示本日BUG
% l0 [; m" @) ^' f$ k099-GameServer(8-20)
$ E. u8 i D9 ]4 k9 T) W; y$ j100-Card(8-20)- w5 }1 `- ?4 e/ r2 B$ g
101.更新客户端视图( Y6 U f# A* s) ~9 O( k: c
102-编写匹配操作码$ c( b6 ~% j6 o5 I: o9 i
103-定义匹配房间的数据模型( P) Z# X" [9 ~7 a+ V
104-创建匹配缓存层,实现进入匹配队列
- b# z7 t! U- s" x# d% @105-实现匹配缓存其他所有的功能
$ j/ o7 d; G3 l6 P( ?1 U- @. K: ]106-创建匹配逻辑类,实现进入匹配房间功能' g# l2 {0 o7 P8 G4 Z \
107-优化服务器之群发消息. m U2 T+ ~ o8 g
108-创建匹配房间的传输模型,在逻辑层进行构造
" V: z3 d. Y) `1 w0 y109-实现离开匹配房间功能& @$ A, c; U6 U T5 A- y, H4 {4 I3 G
110-GameServer(8-24)6 Q( Y/ r: Z- C) j3 M7 S6 T6 X
111-实现玩家准备
C9 B" F3 C$ g/ R4 k7 L( E112-在客户端发起匹配请求. p0 O* e( e9 S; i; h9 @
113-GameServer(8-25)( y$ _; e3 p; f3 g; X
114-Card(8-25)! _: \6 V: Y7 x, r8 W, w/ |
115-创建MatchHandler,接收服务器的响应
# H+ I9 m1 \5 b0 _116-保存房间信息,他人进入房间广播处理
3 S1 v" @* |* Z) ~1 W: H117-玩家离开8 ]: R( u% B4 C" o
118-玩家准备和开始游戏的处理
2 n2 ]: T# | }5 ? C8 n119-GameServer(8-29) n0 {* ?5 @1 H
120-Card(8-39) (1)& n; j- c+ g3 O' j
121-搭建战斗界面的左、右角色状态面板
& q: B b7 T9 p( ?" c/ X) R122-搭建战斗界面自我的状态面板
1 ~7 h& d: H7 K q, Y Y123-搭建战斗界面上边的底牌面板
9 F& b. [8 w4 ^& q+ o7 n; e124-搭建战斗界面下边的快捷聊天面板* n3 |8 i3 |: l( Q: Y$ F5 T7 O- r
125-搭建提示面板和结束面板
; K& x" @% o, w126-Card(8-30)
) T, \; Q7 o- p2 H6 O127-创建出牌点,实现进入房间按钮功能# P7 L; V. E1 F d' a5 O2 w! S1 m5 Y
128-控制底牌显示,编写代码
* f; h* g( z# d2 J/ \, N129-在服务器工程内创建卡牌的传输模型类$ P5 |+ g) }" {" p( h2 k
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
# w5 G! M* @# P( D- b; d131-分别创建左、右角色的状态类(有破音)
, m. [! K4 G; F& {9 o' b. [132-ard(9-2)( G& H: \" L& L) H0 `9 B
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音). x9 u. W# {3 R5 b( c
134-如何控制玩家左、右玩家位置?(有破音)
3 R5 r; c0 k5 U9 v0 |, c, ]135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)5 J6 | g4 X+ @8 v/ S- r
136-Card(9-4)7 `" h* I' b' |& k4 ?0 n
137-GameServer(9-4)( z; i1 r3 ]( |- |) J. r3 F
138-解决左、右的代码重复部分
; _- f3 J0 T* I/ L( u139-创建自身的状态面板(有破音)0 z! \- B; ^, s+ V+ N3 {* s
140-完善自身进入更新状态面板* @$ G: s5 A0 O3 P: T2 W- U
141-CardGame(9-5)! u |6 Y6 t% x
142-找之前的BUG(一)4 K" s& `) N+ S& N9 r( x* O% K
143-找之前的bug(二)
6 o9 u3 Z# q) v144-Card(9-6)
9 B, G& e7 X! I145-GameServer(9-6)
+ A" M; u% V9 U% u5 n6 }146-发送自身准备的请求
G' f! U/ Q u* o3 f" ^; u0 k( P147-创建下边的面板的脚本
. t0 T- a5 x- X% |148-Card(9-7)
A0 n; X' T% U# ^: }+ S& v149-创建聊天操作码,在客户的发起请求2 ?4 `% i( r2 l: m+ m
150-服务器处理聊天的请求,创建聊天传输模型
% y+ c6 [, X5 i# ^ \4 Y151-创建聊天文字的常量类! I5 k ?4 _' R/ Q
152-Card(9-9)" s# B; e( S1 F6 ^$ Q4 x
153-GameServer(9-9)
6 c3 I' b4 D \154-客户端接收响应,显示聊天文字( T( h6 e+ Q6 b7 [+ [
155-聊天声音的播放2 ^ u$ Z8 |) h5 L+ {+ G1 ?
156-测试聊天BUG
( L5 ~8 O' t6 V+ l* Z! I( p157-Card(9-10)
, ` \3 C6 W( L! Z0 Q158-GameServer(9-10)3 A& \7 v5 r3 ?+ z& K+ h
159-所有人准备完毕开始游戏,使用中介者模式触发6 {: P9 x& X$ T( b
160-逐层分析,创建玩家数据的传输模型) D, r d. I" J( H$ m5 I
161-创建并初始化牌库,创建花色的常量类
2 S7 x& R' d6 K$ |8 C: q$ b4 H162-创建权值的常量类,完成创建牌库的过程
- r( W! C" c3 E8 H163-洗牌算法,完成牌库类
0 ]) e4 k" J. ~. g5 W5 i: T/ M$ M164-创建回合管理类
$ L2 j1 o7 y9 h7 _7 W' b! g' E% E165-GameServer(9-12)
4 L# j: D* L- d166-初始化战斗房间,添加第一个方法:转换出牌! q. R8 U) v0 k8 J* Z* U5 w
167-创建出牌类型,判断能不能管牌
$ n+ M6 N; ~* c b2 F W168-如果出牌判断成功就移除玩家的手牌4 F' |7 G9 e) i: j: B4 Q; P
169-增加倍数和更新回合信息
+ O9 s- h: s5 a7 ]' I170-发牌7 G! W: S- C7 }
171-设置地主身份,创建身份的常量类
% ^5 x2 Y+ Q- P8 a172-补充一些辅助方法,完成战斗房间所有内容5 a$ r* [8 V$ a5 F# M& s; T& f2 y
173-GameServer(9-13)1 w6 R. f4 x7 z6 F6 i) Y, J
174-创建战斗缓存层
. v% B+ ^% ], n. ^: r7 s$ Q8 s) Q8 D- ]175-定义战斗的一些操作码
& V. U* \8 N2 v2 u176-编写开始战斗的逻辑9 ~+ W3 {+ H8 t3 N/ m
177-关于发送卡牌集合还是卡牌id的解释
+ R* B( [* [+ M/ U/ F8 `178-GameServer(9-16)1 v: J! L- }" A/ b5 D
179-实现抢地主的方法 [2 v- n7 ]$ [( `( m' H
180-创建出牌的传输模型,获取选中牌的权值- O8 A# p/ [# u4 @/ X8 O6 I+ `9 ^+ C
181-判断各种卡牌类型
: X: o1 U& _* o182-完成编写出牌的传输模型
: D0 R' u& V- \7 ^; n3 E; k" s183-GameServer(9-18)
* w0 ? |/ R- |' {/ [( e9 F184-玩家出牌在服务器的处理1 c2 A: s* ]/ f3 s1 l
185-转换出牌的实现
& _2 Z2 c+ a" d8 |; A5 ^8 D186-游戏结束的处理
' J; E- ~1 ]0 M) A: e187-不出的处理
1 v8 b3 V- Z* Q188-玩家掉线的处理
" D5 q7 g: `: n$ j$ S189-GameServer(9-20)7 _2 Y9 {, J/ I4 _, y4 L
190-在客户端创建战斗的处理类,编写获取卡牌的处理
( B) g/ l0 y/ t; r7 K! A191-创建客户端的卡牌控制类5 [" w0 }6 B4 q
192-创建自身角色控制类,管理卡牌的创建/ ^' O, @- Z1 y: U; @ K! c! _
193-创建左、右玩家的控制类,管理卡牌的创建
$ O, g6 r9 ^& r/ e8 T+ n! N8 _) X# G/ M194-Card(9-21)
/ ]" h- X$ n8 ]; O* |195-给大家录制BUG过程
( h7 D2 [) C0 d- M* P3 y196-GameServer(9-23)
2 D& Z% D; a% S6 c: Z2 O197-开始处理抢地主的响应
- I& N/ W" k# T4 d6 k# l+ e198-发送抢地主请求和抢地主成功的处理
" Y& R% e! n- Z( A199-自身的玩家添加三张底牌的处理) Q5 [7 S3 d2 r- D2 [9 p3 ^% f
200-抢地主成功的处理完毕
; X3 }! o3 t& C9 W) O! _* c( ^201-测试抢地主并修改BUG8 F# ]5 h+ D3 \, W/ o# I
202-Card(9-24)
8 w6 Q$ ^2 T- y0 b# c203-GameServer(9-24)
\% b& H& ~9 g7 V" X+ V% _' s3 N* F$ |204-接收来自服务器的出牌命令
6 F% B0 m" K: {% l" s/ ~205-客户端出牌的处理
" `, i- q- Q: b: K: T206-向服务器发送不出的请求
6 j+ q# T/ n' `207-GameServer(9-25)4 u. D: P* g( v9 \$ ] v0 p
208-Card(9-25)
. K& g, V6 Y' t209-给卡片添加碰撞器让他能点击 f- f- s( V d
210-解决出牌BUG
2 f) S& w- v. M2 ~/ }% h T211-移除出完的手牌
, `0 S7 }) ?. R212-管理桌面的牌显示: e4 p; k& }. U: P2 A: D$ E- A% |
213-出牌特效声音的播放1 k9 G v, b: q. E
214-GameServer(9-27)
' k( \9 M$ `. ]4 ]: Z215-Card(9-27)
/ ]- o, o7 }/ m% Q+ t! k216-测试出牌BUG 上部9 G3 [6 z, Z6 @$ o3 m5 s7 Y
217-测试BUG 下部
8 s7 `; c5 X; i" X, y! e0 P8 l9 t218-客户端+服务器(9-28)
+ J# K# P; g1 U g! |8 j. A219-创建OverPanel代码脚本- Y+ m5 F7 A: s; ^
220-通过消息机制表现客户端的结束0 c; c1 W `3 F
221-测试游戏结束
3 W" P6 ^0 D: |# \% M222-创建背景音乐播放控制脚本6 T3 C" N, Q" J* W. L5 L
223-给前两个场景添加背景音乐7 t6 j( a( T' F$ P1 K6 r+ D6 q
224-完结与未完/ \" }6 l5 s9 L
225-Card(9-30)& z7 i3 D p' H! z# o/ M$ d
226-GameServer(9-30)/ |4 W7 _9 D0 k
227-扩展课之ProtoBuf
) V9 m1 y* V$ z! N7 V I0 _228-扩展课之ProtoBuf(10-15)下载地址:2 W* u* J7 I0 }1 |' V4 v
1 I; B% U, [4 H. q. N# X# F. \ A
# t) w i1 F' ]: S% u- p- d! C1 V6 h% Y- n) i5 ^
|
|