|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。0 j- ` [+ Z2 I
服务器采用:c# 开发 : [& m3 n% A1 {& K) _; c& _2 v5 E
客户端采用:Unity2017; V, [1 e& K3 Z* k; u1 ?( \' o
6 w. z+ F! V9 @+ l; o8 E3 B学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。6 S! ]. [8 r1 r0 B/ u
课程每天会有更新,难免有一些特殊情况望理解。
& X$ X% Q# {" f* Z9 J- m个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。& I: S3 n* s! c. _2 {1 w/ _( i
/ D4 h6 y6 ?) a
严格意义上来说,本课程应该是两个课程合二为一了。
% e) t' T$ w# W3 o& T: [+ r2 Y" c" f第一个课程就是《从计算机网络都服务器编程》。! b" o/ R+ o: e) j' |% S7 B3 a; @
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:' a% p! _; |, R
什么是因特网?6 B! a3 J$ r" g
什么是协议?
, m4 \4 ~% o( @3 y- Y3 K什么是应用层?应用层协议?
& R. i9 E) }1 }( ?6 K2 }! M什么是运输层?运输层协议?$ c2 X. r& V2 W( X: r
什么是TCP协议?什么是UDP协议?% }0 y3 I! n" }9 r( N/ |
等等···
4 q% d, v) \ I2 |( x! J(很深层次的知识,大家根据兴趣来进一步自己学习)# |+ \% ^; R/ P
知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。+ p( [6 X& z; @0 D n7 y0 Z! ~7 m9 p
; @# o1 B4 |: L$ ^第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。! A5 S1 a& K! @& f0 E# I6 O
斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
, r- d; I- ~' B/ F1 g1 ?
8 L7 y9 J- Q4 U( s
% s3 @& q4 V# o8 b001-课程介绍$ o: N( g9 }; Z; e* u/ U! u
003-因特网和协议
- S, e B: L c' c5 }5 A004-分层体系结构. Z* V% u# N0 Q. N( H0 O; G
006-进程和套接字4 H) m- Y4 k* \7 e+ P& R
007-运输层协议TCP和UDP
7 m3 b! c5 H1 O4 B3 r008-应用层协议HTTP
, ], _9 r- ^' S, l1 T009-socket服务端7 m1 D0 H/ J3 m) C/ m: R
010-socket客户端: d* G, A u; @8 I' q; E) R T' h6 ?7 h$ Q
011-验证连接. ^* x& a1 w$ D( e( P
012-SocketDemo& u/ q6 d# ~6 r# g0 d5 @
013-实现接收连接的异步事件
7 u9 B! \ r8 v014-添加限制连接数的信号
K# [$ N4 q8 ^; @; h: ]015-封装客户端连接对象和编写连接池$ I3 C; k! ?9 I* M9 z5 g
016-GameServer(8-1)
9 P2 ~# [ X& @- o017-粘包拆包问题介绍! w0 h0 W# I u* P
018-采用包头+包尾的方式解决粘包和拆包( |/ a1 Z7 j! L. k
019-GameServer(8-3)
* \' \7 t4 S0 }+ a% ?2 u( L- E. p020实现异步网络接受数据
8 \/ i5 n3 J+ ]$ p021-客户端对自身接收的数据进行解析
" g; O1 d: l2 g& n/ X022-构造SocketMsg负责网络消息的传递$ k4 I A5 v7 [5 h1 m# }3 Y
023-实现soceketMsg与byte[]的转化% ], k. X1 h. i
024-对象的序列化和反序列化
( ^; T# ^( b2 u- Y4 o( N s" [. X025-GameServer(8-3)_2
6 [- ^4 d$ d6 ~+ f9 ]& R026-实现客户端断开连接- l$ R' X& p- Q( b
027-实现发送数据: [( y3 `, [( {' b6 j5 D
028-助学篇:带大家回忆一下所开发的内容5 A' Q8 J A+ ^3 P) u5 ~9 ^
029-抽象出应用层
& t6 ^9 a4 U: Y a6 D030-GameServer(8-4): b1 ^& [( b% o9 u
031-开发定时任务功能(计时器),编写任务模型 D- Y. U/ ^7 x
032-创建计时器管理类,监听到达间隔触发的事件
$ u; s _. G' j033-控制定时任务(计时器)的触发时间
8 {4 F1 E7 z. U( z034-开发线程安全的INT类型) X) J3 g( m% S+ o. u/ Q" R* V* R
035-GameServer(8-6)% U& V5 a" w' t" Y9 S* M
036-实现单线程池% F+ h. H) O) H! t8 X
037-Unity2017下载
, C! p: U7 J4 u038-创建工程导入素材
' e# l: `$ L0 Q! O039-Res6 @9 \, h: d; @( ~# d0 t8 K
040-Card(8-7)4 R: ?# F0 {' m5 w) h- z7 S- y
041-GameServer(8-7)
3 P; c( ^. o* N& d' \% {043-根据策划创建面板
# i% @8 Q" e' C1 F n, Z, O044-导入客户端框架,创建PlayPanel脚本
) d7 s# M8 l) N' i3 I045-完成开始面板/ {! z9 @3 T! L$ C: s
046-完成注册面板
+ u9 |6 a% g9 v: i) \. c3 @- `047-Card(8-8)
" ~, A0 S+ Y/ `: w( Z& _0 J049-服务器架构介绍& h1 V- E( v w6 B; r( M' O/ K) E: m
050-按照架构实现服务器& y2 @* n# W# _9 k& V* q
051-在客户端封装Socket,使其连接到服务器
/ P2 k6 s5 E$ a! a x052-测试客户端服务器的连接
+ |! Y5 d, Z1 e9 n, m053-解决BUG
' d# j5 U* K( U) D+ E054-Card(8-9): a% Y: j( x* [/ J# a0 y
055-GameServer(8-9)
P+ _: X2 g& V. l" W) h7 E7 B) O056-修改客户端的链接方法
3 a0 P0 B6 N0 L l% a056-修改客户端的链接方法_201711241423357 |' V& j i: c$ J$ Y- b& |" I; c
057-定义操作码、子操作码,演示客户端如何给服务器发送请求
4 I9 ~2 p1 `* b. {058-测试数据传输是否正确
# z5 Z/ X4 Z2 I& U059-Card(8-10)
/ k$ v8 B' ~" D7 Z060-GameServer(8-10)9 Y( q9 l# P2 V9 J) @' A3 z
061-创建账号缓存层,实现注册的一些方法$ N3 a/ j q& T9 r. o2 Z
061-创建账号缓存层,实现注册的一些方法_201711241423348 x; B# Y& u5 t
062-完成账号缓存的所有方法# D, u8 X H8 Z2 R
062-完成账号缓存的所有方法_20171124142334
+ m. W+ F9 d$ C. t063-实现账号逻辑层+ p2 y; ~% r& t K
064-解决今日BUG! T, S0 Y/ ~( a/ @+ Y
065-Card(8-11)
5 ~ y& \( `3 f) w! X066-GameServer(8-11)/ A- O( F4 h2 s
067-开发提示面板
- Z$ n3 J6 ^3 j, n7 v. ^. d. @4 ]068-给登录和注册面板添加提示
& u# T' L; D9 E- ]9 O! P9 u1 ^069-处理接收到的服务器发来的消息、优化发送网络消息的方法
+ ?- w: N( c7 G* r2 d9 `070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)1 ?0 ]! ]- O5 o& `
071-优化服务器,改变传输结果
" ]+ `4 o5 u. `4 ]6 K: _072-Card(8-14)4 T; H# t5 V* a
073-GameServer(8-14)- i( Z! i! v) }, U. O/ r
074-初步实现场景管理器,融入到框架中- T! U, I0 \& S, J
075-增加当场景加载完成的时候调用的方法
. j' ]# f* o3 \# \& R076-实现登录成功跳转场景
( c$ n* t1 V& u+ F. e077-设计UI之主界面的信息面板
% V: Y8 X( ^; Q6 }078-设计UI之主界面的匹配面板$ ? l4 W+ C4 P( v1 f, ?
079-设计UI之主界面的设置面板
A) u& `. S8 Y; u* o080-设计UI之主界面的创建面板 \6 ]1 O! k1 Z. n$ ?7 B
081-Card(8-15) v; c- C. e; p3 K
082.编写信息面板3 `* q/ o8 J4 l/ g1 B# t( v* u
083开发匹配面板
; F7 ~; [1 Y1 ^4 M7 v3 \084.修改默认创建的脚本/ ?) y" q, S2 S% L
085.开发设置面板; G/ R8 w% u7 w4 J1 m
086.开发创建面板
2 T6 O* T. h" w2 {- x0 |7 F087-Card(8-16)
) W4 j) {, E- q088.创建角色数据模型
& F( U1 }0 ^5 a8 I i089.开发角色数据的缓存层- l4 O) i: k4 s, b
090.完成角色数据缓存层- z) H) x1 [ B# W+ M
091-GameServer(8-17)5 U& V4 u* [1 w7 s% z: R3 x
092创建有关角色的操作码5 a( N. f- \( i2 p9 S% @6 Z
093.实现用户逻辑层+ H1 n0 S6 L7 k3 n v: h
094.向服务器获取信息,在客户端创建用户处理类
+ {: v" @1 T; h0 B9 @1 B" i095.客户端处理获取角色信息的响应) C) ]! l( E9 g
096.保存接收到的角色信息并且处理角色上线响应
) A9 C+ ]2 _ l7 J7 w6 P6 f! z" s" z097.发起创建请求和处理创建响应7 l3 `+ R3 M3 I, ^" A6 r: u- e
098.演示本日BUG
+ |* Q$ z* L5 i6 k099-GameServer(8-20)2 t* u& p( [9 h: f
100-Card(8-20): u0 ^, {/ h5 n8 Z. n
101.更新客户端视图
4 p5 W' r; y4 d$ W$ F5 Y102-编写匹配操作码" a, M5 g5 ?: [+ Q# v
103-定义匹配房间的数据模型5 H+ | D* k2 X4 N
104-创建匹配缓存层,实现进入匹配队列 }8 ?) C/ e7 E. v3 K1 c
105-实现匹配缓存其他所有的功能
{$ C8 a6 l+ J) h106-创建匹配逻辑类,实现进入匹配房间功能. d/ z! g0 R+ o4 o
107-优化服务器之群发消息: S) n. i8 ]5 u, O' [7 L
108-创建匹配房间的传输模型,在逻辑层进行构造; U, ~5 ]& ^7 M0 A7 g1 o
109-实现离开匹配房间功能
3 \2 ?, [* P# i& H- V2 s& o110-GameServer(8-24)/ M+ H! h. s- Y/ F v% Q; a2 V' \
111-实现玩家准备% I& q& Y$ G8 H" N% T- H$ u/ b
112-在客户端发起匹配请求
9 P* l& O$ M) ~+ p3 j/ T b113-GameServer(8-25)
/ A, ] e( A; X: T- a) l114-Card(8-25)
& `- f+ L! M- B115-创建MatchHandler,接收服务器的响应3 k R( G. a, U6 u5 F
116-保存房间信息,他人进入房间广播处理
* b- K; s+ W6 b" t! C' A0 a117-玩家离开
- M5 ^& W2 M% z6 Z/ p9 F118-玩家准备和开始游戏的处理
/ ?4 N1 c" j3 q9 r2 K& R119-GameServer(8-29)
# F6 k7 H3 y( Q$ Q; X1 r& _; K120-Card(8-39) (1)6 }6 ?7 L$ `- P% K
121-搭建战斗界面的左、右角色状态面板
- Z! E' n2 Q; K! D2 z: c% Z122-搭建战斗界面自我的状态面板
1 e7 r. {. N5 F9 N( F123-搭建战斗界面上边的底牌面板
, w2 [5 F& e& B# {' w( s3 D124-搭建战斗界面下边的快捷聊天面板( s% `4 G' G) L; |4 a) x
125-搭建提示面板和结束面板9 F0 e3 s8 t$ J! S
126-Card(8-30)
) g! u" P$ e0 r \* l127-创建出牌点,实现进入房间按钮功能
% r5 L* y0 R2 w128-控制底牌显示,编写代码 q- I. V& [& x- i* \8 c
129-在服务器工程内创建卡牌的传输模型类! p$ u) S; i- h
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
" E2 j% P8 U- G131-分别创建左、右角色的状态类(有破音)
3 \; b7 p" h/ H0 E% ~$ ]132-ard(9-2)% q- u* c6 ?8 I* o1 S; {; Q
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)+ u- ^% C$ |* ^4 X' r
134-如何控制玩家左、右玩家位置?(有破音)4 F5 M0 e, v+ o: v& D; L2 a# P8 L
135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)0 w- B+ Z* {' L; J: S
136-Card(9-4)9 k9 l( a' L4 j1 B5 k6 F2 |3 e& b
137-GameServer(9-4)
5 `5 y6 F" V' ^, B5 M! c138-解决左、右的代码重复部分 ~0 x3 B1 u+ E$ {) A
139-创建自身的状态面板(有破音)/ z* z1 E, U/ }5 ^, d6 x8 |) d+ o6 w$ ^
140-完善自身进入更新状态面板
: E* A( u6 [. [$ v1 h: r5 b141-CardGame(9-5)
2 M; X" p% E5 ~* ^" G0 E142-找之前的BUG(一)
5 C5 ^8 _3 B9 v) W' j4 {( [143-找之前的bug(二)/ \5 p! o4 i" p. X9 T8 g: G
144-Card(9-6)
7 y) X) g: V( o& U. g! X8 Y145-GameServer(9-6)
9 _9 ?( L9 Y0 V146-发送自身准备的请求0 C+ L$ j `- @! l% ?
147-创建下边的面板的脚本3 w$ z: p& j0 M6 @* e; f/ m
148-Card(9-7)/ y8 ~' ~$ `$ ]* d X' t" C$ T# [
149-创建聊天操作码,在客户的发起请求
8 }' Q4 |9 {$ X6 ^150-服务器处理聊天的请求,创建聊天传输模型8 l5 Y9 C! @" @9 v1 {, p3 z
151-创建聊天文字的常量类0 b0 b0 ?+ E( K& p/ W8 `
152-Card(9-9)
) ~, Z5 l$ k2 U4 |1 C153-GameServer(9-9)
7 E& C- ]7 \3 w; }) U154-客户端接收响应,显示聊天文字
2 {3 ]1 M8 Q; W) S E. v155-聊天声音的播放) p0 {& e" a. J# e1 Y! I6 X4 Y
156-测试聊天BUG
; N- k6 Y0 k; l% T. N157-Card(9-10)4 P0 `- y' ^. R; X/ a m& V% s
158-GameServer(9-10)# h1 E3 Q& H% X! R Q
159-所有人准备完毕开始游戏,使用中介者模式触发. ?) r& q. C; T0 j; |
160-逐层分析,创建玩家数据的传输模型& `& f; D" n: [ n) o6 q, S
161-创建并初始化牌库,创建花色的常量类
- i+ j3 M0 u, c" n% H162-创建权值的常量类,完成创建牌库的过程' Y6 y' d4 G( a% l4 d( p
163-洗牌算法,完成牌库类. i* R- ?0 @ q
164-创建回合管理类
% {+ K! `$ I) g0 v/ t, P) [( l( U: k165-GameServer(9-12)
! P' b/ z" |! y/ V166-初始化战斗房间,添加第一个方法:转换出牌
% I& W- s. {$ t1 N9 j! u0 w- d0 L9 [167-创建出牌类型,判断能不能管牌 F6 t* C, h* v' u# x7 x5 R# @8 x
168-如果出牌判断成功就移除玩家的手牌
0 [* B4 M2 ?6 t; M169-增加倍数和更新回合信息
$ Z9 W: R. Z$ l+ H1 e) L170-发牌/ L- X' N) N7 ^3 I
171-设置地主身份,创建身份的常量类
7 D3 }" X& ]# J- S172-补充一些辅助方法,完成战斗房间所有内容8 ]# ^/ Y) e5 \3 c& {% s. O
173-GameServer(9-13)$ B1 n* }" f# T1 l
174-创建战斗缓存层
# q" @- o P! |0 \. ?, d: A4 }175-定义战斗的一些操作码
m" y% m4 w% z) L9 K8 f4 @176-编写开始战斗的逻辑* t0 U( N0 D, Z3 M+ q
177-关于发送卡牌集合还是卡牌id的解释
- O- { H9 x3 t' e# ]178-GameServer(9-16): O2 E. l8 X |
179-实现抢地主的方法. s7 Y8 c8 R' h2 b8 ~6 k" H
180-创建出牌的传输模型,获取选中牌的权值' X6 Y4 @* n- {7 b, K( X1 W$ {" w, v
181-判断各种卡牌类型& E2 y2 ]" w: |8 c) ^- B
182-完成编写出牌的传输模型; \$ k$ M* Z. l- M W% j
183-GameServer(9-18)1 L7 E! o( [- E$ h
184-玩家出牌在服务器的处理9 C1 m% X! D! V4 L( i( n
185-转换出牌的实现
5 g5 X% `0 ^8 j( E186-游戏结束的处理" W2 d9 A# P# z+ h# ^: L
187-不出的处理
3 B& L" ? F; K) i188-玩家掉线的处理5 ]* a; N9 {8 v! t! B4 k& R
189-GameServer(9-20)& k9 n1 K' M \' r+ ^
190-在客户端创建战斗的处理类,编写获取卡牌的处理
( N p" A+ B3 ^$ o4 v6 Q1 m191-创建客户端的卡牌控制类0 M% Z, K% f' |% H% Z
192-创建自身角色控制类,管理卡牌的创建/ R& _. s7 Q, }0 @8 ~
193-创建左、右玩家的控制类,管理卡牌的创建, B0 |0 {# G! o
194-Card(9-21)
" g: ?# d( y7 ]2 \# @195-给大家录制BUG过程) S3 `9 P ]& V& i
196-GameServer(9-23), Q/ H1 B1 f) C2 n+ r) g
197-开始处理抢地主的响应
4 z8 h: W _4 f! ^ p198-发送抢地主请求和抢地主成功的处理: t. t1 y h9 ^5 E6 i) v2 G6 F
199-自身的玩家添加三张底牌的处理- {, P* Q t4 C7 E. `
200-抢地主成功的处理完毕. [! x9 F- W) X" L
201-测试抢地主并修改BUG
* A' [# u7 X7 L, l' W0 _" u u" b202-Card(9-24)
4 L1 S. J/ L! d/ U3 v203-GameServer(9-24)
, o. |( V3 q. g2 y7 m- C& u' g5 G204-接收来自服务器的出牌命令+ ^( ~0 X7 `! S* V* E
205-客户端出牌的处理
8 x0 I. A6 J% P, r206-向服务器发送不出的请求
: ~( d+ ]2 ?4 _207-GameServer(9-25)3 W) l: e7 g; T# D0 T
208-Card(9-25)5 n, T0 s6 p# d7 i# A5 T0 q3 c
209-给卡片添加碰撞器让他能点击
8 I* D" q! |6 _* W7 p5 T210-解决出牌BUG
0 L* \9 u; j+ M- i211-移除出完的手牌 E! \$ ~- H' H4 y# i
212-管理桌面的牌显示' ^& h, n/ I0 ^2 w' J! T4 v. w) c
213-出牌特效声音的播放
( l/ ]$ b/ S7 e; E h9 l5 y; l214-GameServer(9-27)
# O7 [* I) _, n: G1 H0 @2 ^' v215-Card(9-27)
5 Y X# d) T2 v( i216-测试出牌BUG 上部, q" n. x' X) T) R
217-测试BUG 下部
7 w: _1 T4 y, J" m! F) F218-客户端+服务器(9-28)6 Y( v3 {+ r! K
219-创建OverPanel代码脚本
& T8 ? [4 t$ X220-通过消息机制表现客户端的结束1 I; z# W5 q5 E/ \' ^
221-测试游戏结束" l9 H% [. C8 m) W5 q) O, `
222-创建背景音乐播放控制脚本
" D" X( i9 I6 u8 k* k223-给前两个场景添加背景音乐& ?- p: |" [9 p9 u
224-完结与未完
; s- R7 k* A, v225-Card(9-30)
0 e" f3 e2 a' P+ [1 v% g226-GameServer(9-30)2 S* H( _9 S" a$ z7 y
227-扩展课之ProtoBuf% A2 O0 ]: s" g, ]4 u
228-扩展课之ProtoBuf(10-15)下载地址:
& {8 M3 J% K. N
* @( e7 _7 R' G# D- r" z2 s- |! H" k$ Z2 }) u/ j
$ k" |- _ y9 A1 b |
|