|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
: ?- e5 q8 x' S服务器采用:c# 开发
7 d" a. j0 r5 [9 e2 F客户端采用:Unity2017, m! a- H% T* ]$ t. P" g' H
, e) N2 L' u( @5 b1 ` Q
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。) {: A( r0 A C4 o$ e0 m% t
课程每天会有更新,难免有一些特殊情况望理解。
2 P. ^! f! Y) a个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。
' U, F0 [6 C/ T" g) B! T/ N% }( L# N8 o
严格意义上来说,本课程应该是两个课程合二为一了。
3 N! Y0 _' m; \8 R" {" ~1 t第一个课程就是《从计算机网络都服务器编程》。% \6 }# p4 x. F' j
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
& }, @' @ p6 B% j) i' Q- U, o! U5 Y什么是因特网?* c" p6 ], R% @/ | x% {
什么是协议?
4 C8 w, w. c! I" X4 f! |6 S; j1 n什么是应用层?应用层协议?
- d; C, R' A0 d) _9 [. Y5 d什么是运输层?运输层协议?+ q, q' f4 r2 b0 Q9 V' v, r0 c. o
什么是TCP协议?什么是UDP协议?; T8 J7 { A; P2 P
等等···
4 y' g6 ^1 g$ J2 L(很深层次的知识,大家根据兴趣来进一步自己学习)0 e7 T; e, w2 W) t) n- z% w- p' A; |
知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。- ?. R+ y4 I/ S B, s u
' V1 \) B' |3 @ f8 j第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。) Q1 c* a& N4 o0 V
斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。1 @) d, e9 a3 t t) ?9 T
2 d6 F" z5 r3 D) o6 w
# U6 x+ O2 e, _ L4 ]" X# V6 H& s
001-课程介绍: f0 }) f" O8 B/ T
003-因特网和协议8 x% A8 f. E/ m7 H' E: `! h! ?
004-分层体系结构" _) y5 L! z- C) a C% c5 l: \
006-进程和套接字
( l7 D" t' G A% W007-运输层协议TCP和UDP
) r" O+ C q' j& s; C8 U: ]: G008-应用层协议HTTP
+ t0 }$ X6 g$ g' j0 v009-socket服务端
$ @* F6 \1 f3 O3 C010-socket客户端
* g8 H9 k7 |0 r011-验证连接
+ T# k! B7 J7 P- A0 E- {( \012-SocketDemo |/ Q& X) `1 U) d. K, s8 [
013-实现接收连接的异步事件! p$ Z4 q3 W) @: q
014-添加限制连接数的信号3 z' R2 e5 G* G4 R& |$ b% O7 |
015-封装客户端连接对象和编写连接池
+ J# d0 v$ |* w2 d016-GameServer(8-1)
: W! @# ^2 X; A; X: ]017-粘包拆包问题介绍" x1 D$ L5 ~0 V |4 e4 `3 d2 C, p0 {7 _& }
018-采用包头+包尾的方式解决粘包和拆包- l6 K% H' V# \
019-GameServer(8-3)( l3 G1 h# I G& h6 J; w
020实现异步网络接受数据$ N. y2 @5 T# L) K
021-客户端对自身接收的数据进行解析
- ?3 p( V# [ U( a, V' X022-构造SocketMsg负责网络消息的传递
. x O3 w5 A$ S5 A5 ]: r. i8 d023-实现soceketMsg与byte[]的转化
( y! O0 \, o) O* C024-对象的序列化和反序列化
+ O; v! h0 E; I9 ^025-GameServer(8-3)_2
* w" {8 O ?; G- s026-实现客户端断开连接9 N" A7 y ^0 ^
027-实现发送数据1 Q+ N$ p* K6 ]3 ~
028-助学篇:带大家回忆一下所开发的内容9 [# ^$ g1 p( V3 S$ \
029-抽象出应用层
' L( B! h* t5 ?, E2 Q. [( o0 @030-GameServer(8-4)
% k* R. H8 r' i9 b* y031-开发定时任务功能(计时器),编写任务模型
$ D5 m4 o( A( R. X032-创建计时器管理类,监听到达间隔触发的事件
1 f. v& C6 z0 m# b' Y033-控制定时任务(计时器)的触发时间: N) a% G. m. Y+ @: L
034-开发线程安全的INT类型
1 Z* Y: [9 g( d035-GameServer(8-6)# d0 X8 D# }8 N# C- q: @ d
036-实现单线程池
2 ~; _1 @. N$ Y0 V2 f U6 _9 M, Z8 s037-Unity2017下载# \9 y, f; Z% {
038-创建工程导入素材
" F; t& K$ H. u* O" \039-Res6 z! r) q' l$ o$ K: o
040-Card(8-7)
$ \; c# V( k: `041-GameServer(8-7)
, Q) v0 l0 B/ M) n043-根据策划创建面板
! x1 y$ H( o) i" y" G8 c8 g044-导入客户端框架,创建PlayPanel脚本
! j) h7 t5 G6 h: e2 X5 N045-完成开始面板
- Q) W v* D8 W, z, d; @, U046-完成注册面板
* I+ v D3 t$ V8 X047-Card(8-8)
; h5 N- D$ {+ ]% m# l3 _" g, m049-服务器架构介绍
6 x! L# W5 H$ C ]) g050-按照架构实现服务器
3 s p5 q6 f# Y+ V: Y: S( B051-在客户端封装Socket,使其连接到服务器1 }& z% C8 N6 f G$ M3 X" ]
052-测试客户端服务器的连接
: E* b# }) ^; o |8 V* N9 q053-解决BUG8 H0 r% c3 i& m1 ~: f
054-Card(8-9)9 P+ w m# N, r; ?4 Z4 B
055-GameServer(8-9)8 `2 z8 \ G c, K: d0 }
056-修改客户端的链接方法+ w; L" t6 [9 o, ]. i) q
056-修改客户端的链接方法_20171124142335
. Z/ b1 S/ r F( x3 R- i* Q" E057-定义操作码、子操作码,演示客户端如何给服务器发送请求
1 l; t( _! R8 _% R9 Q/ ~058-测试数据传输是否正确3 X) A& x# U5 ?& }: R/ x
059-Card(8-10)0 p# B2 p! \3 Z
060-GameServer(8-10); B0 x0 k- G! Q3 X
061-创建账号缓存层,实现注册的一些方法1 \# o. r% u& O
061-创建账号缓存层,实现注册的一些方法_20171124142334
# N9 Z- l/ b) `$ g! x* Z5 a# x! V }( j062-完成账号缓存的所有方法
; K4 V- v; V4 ?6 S062-完成账号缓存的所有方法_20171124142334
$ I* G+ ~. D& i# M063-实现账号逻辑层& J8 A ~2 n w( B; J
064-解决今日BUG
6 s* c- {# K e Z* C, v- Y065-Card(8-11)- W/ y0 p: g# P
066-GameServer(8-11)
! a' A, z ~- y9 i2 j' {067-开发提示面板! [9 j; H' t- `6 g4 S
068-给登录和注册面板添加提示
. K% z& w/ n9 L3 L9 P) \( y069-处理接收到的服务器发来的消息、优化发送网络消息的方法/ X+ ?" I. p; P; N) n8 B/ D' A( ]
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
# q6 H. t; }! i9 T& b071-优化服务器,改变传输结果
! {: B4 m2 B$ w) M, m# D3 C- w) T072-Card(8-14)
3 N1 ]8 d% h' E9 G6 V( e: { a" C073-GameServer(8-14)9 D! K1 O3 F" ]- r+ D
074-初步实现场景管理器,融入到框架中; q. ^) g3 N Q2 T
075-增加当场景加载完成的时候调用的方法
/ Q( s" r4 \( d. }, G- ^3 M076-实现登录成功跳转场景
. e3 p9 \3 i) ~/ ?9 `. p077-设计UI之主界面的信息面板9 K( ]' y- l/ k. Y: K: ^
078-设计UI之主界面的匹配面板
, M% X7 v8 c) m079-设计UI之主界面的设置面板- t1 a/ W1 L# K$ G( r7 }# r0 X
080-设计UI之主界面的创建面板6 t5 _- n# x/ m
081-Card(8-15)
- Q8 w. G) ?1 o4 c082.编写信息面板
$ ?9 y, g* r+ D083开发匹配面板
, D& p5 l$ \- I, ?0 ~. a0 ?084.修改默认创建的脚本2 R9 p7 k J6 H. z) \
085.开发设置面板- s& h9 d8 n% Z4 O6 d' Q6 @
086.开发创建面板
& Z8 B9 U2 r- X9 Q, A2 d# T087-Card(8-16): w& s w3 O5 ~
088.创建角色数据模型( a/ U5 d1 e- U; s% N% y
089.开发角色数据的缓存层
7 a( \) f& O0 O3 K0 J* d" j090.完成角色数据缓存层
8 S6 T# X k( R' Q5 N% d091-GameServer(8-17)
2 ?' i$ r2 V' x7 b092创建有关角色的操作码. z" \3 A( t, o6 |5 N
093.实现用户逻辑层' y3 N8 o, z- O- Q1 C
094.向服务器获取信息,在客户端创建用户处理类
) C6 |: ]7 p# V1 c$ u& s9 O095.客户端处理获取角色信息的响应
4 l) Q3 }, q# x" ~. T7 D096.保存接收到的角色信息并且处理角色上线响应+ i1 t, q6 ]4 p% K9 j$ ]
097.发起创建请求和处理创建响应
0 o* A3 c% w2 q: H1 e098.演示本日BUG/ l0 i- U* M! g
099-GameServer(8-20)( o# h. \( T' `. O) m
100-Card(8-20)
- z* B, a2 o, w101.更新客户端视图
" D. H1 E8 d4 M# i102-编写匹配操作码
. l' y) N1 ^/ r b: D# {, l103-定义匹配房间的数据模型) s/ ^2 T/ }: _( l
104-创建匹配缓存层,实现进入匹配队列# D) C; {6 Q* d; n1 b) g
105-实现匹配缓存其他所有的功能: P h x% a$ P, N& i$ }
106-创建匹配逻辑类,实现进入匹配房间功能
" y) H2 N: @7 I107-优化服务器之群发消息: R4 T$ n9 w* W4 b
108-创建匹配房间的传输模型,在逻辑层进行构造7 W# U0 n- [# G J q( F* J
109-实现离开匹配房间功能3 W: [) T0 ^& o9 A. w/ X9 J0 `
110-GameServer(8-24)
% `5 Z, q8 d! F. ]/ J111-实现玩家准备
" s4 Y \ k o( `! z# b& l4 }0 \) {( w112-在客户端发起匹配请求0 y! P) g& R) m& w
113-GameServer(8-25)
' v8 _, @: B3 J! B& {2 n114-Card(8-25)
7 }( A+ P+ B/ Q8 h" |* ?115-创建MatchHandler,接收服务器的响应" }: }+ h2 ?6 N
116-保存房间信息,他人进入房间广播处理
, i$ ?" | D7 j' }! g S" g117-玩家离开$ n0 C: W; F$ a6 W4 c
118-玩家准备和开始游戏的处理
7 w- f0 M" E# I+ c119-GameServer(8-29)3 {. x5 g% Q% T& ]3 m {9 F' q
120-Card(8-39) (1)
$ |, S$ @5 }9 }8 k121-搭建战斗界面的左、右角色状态面板
3 y6 J$ m0 j6 O# _$ n122-搭建战斗界面自我的状态面板
5 M# s( ~6 w7 L1 }5 K- _123-搭建战斗界面上边的底牌面板
5 y6 B$ N$ i9 `, I124-搭建战斗界面下边的快捷聊天面板
, z, C9 }' I5 Y2 Q7 p125-搭建提示面板和结束面板( {% }8 _2 A- I; u4 F, ]
126-Card(8-30)* M$ U. ^. e1 e2 d' \- J2 N2 n
127-创建出牌点,实现进入房间按钮功能
0 n# ]+ P2 H! f4 u128-控制底牌显示,编写代码/ M8 t8 O8 A6 h/ r5 K$ w
129-在服务器工程内创建卡牌的传输模型类' d0 U9 K: i' t3 _
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)+ s7 ]) C* u, J
131-分别创建左、右角色的状态类(有破音)
! R1 n; P- v" X$ l3 m; o132-ard(9-2)1 I8 g$ \: v9 y1 r
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
. Q! u4 }4 r* _; f134-如何控制玩家左、右玩家位置?(有破音) R, T' m' n$ f0 B# ~" j) e1 T5 o
135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)0 h/ Z1 ], h7 G- }7 f( j- E
136-Card(9-4)5 d9 z$ j* s1 E+ p3 u9 X9 Y
137-GameServer(9-4)
( @) U) x! X7 G) c4 Y138-解决左、右的代码重复部分5 i3 f$ p9 x1 o4 _" K
139-创建自身的状态面板(有破音)
+ x! k7 u' g+ i' K5 m: ~140-完善自身进入更新状态面板
+ ?- Z* t+ V5 m141-CardGame(9-5)
! A, B! ]6 ^; S- u6 p142-找之前的BUG(一)
3 x( B% `+ F* q; t143-找之前的bug(二)7 f2 ]% `7 K3 Q# C! k! |# H
144-Card(9-6)
2 ]5 ?. ~$ p3 ]+ i2 i5 [0 e! ?145-GameServer(9-6)
) i$ H) M& ~* U, }- S146-发送自身准备的请求
* m8 y' F- t/ ^' J# K( t147-创建下边的面板的脚本3 I$ J- p1 ]9 H: j$ N+ m$ [2 C9 a
148-Card(9-7)) z% m' p! [; v% e# [! o
149-创建聊天操作码,在客户的发起请求
; b ?& \$ \. K7 v! }150-服务器处理聊天的请求,创建聊天传输模型8 h1 n' x6 X. v( v
151-创建聊天文字的常量类. ]: ?& c7 w; k4 q& n$ x
152-Card(9-9)4 F& J. j9 _ o: x: W6 r3 Y9 [+ }( ]
153-GameServer(9-9)8 f) k2 N9 h! Y2 p
154-客户端接收响应,显示聊天文字3 G( \; D" \, x4 h2 Y6 `- K
155-聊天声音的播放! I6 A, C, k; P1 ~' N- m, A9 U
156-测试聊天BUG% Z- A! l% ^2 {' ]- t
157-Card(9-10)0 n& g% t: ? U, P2 U* b. {
158-GameServer(9-10)
0 q" ?, l! T- E0 z5 Q! L% g159-所有人准备完毕开始游戏,使用中介者模式触发
s) p* C9 p: ^/ I8 ~( S160-逐层分析,创建玩家数据的传输模型
* U4 @# ^. e' S161-创建并初始化牌库,创建花色的常量类. X! ^1 t: l" ^4 J6 m' _
162-创建权值的常量类,完成创建牌库的过程4 |5 h: @8 X4 D# r
163-洗牌算法,完成牌库类/ Y7 c1 m9 X" c# q4 [3 ~) J9 v' u
164-创建回合管理类
# O j! f& \6 f: N8 ^165-GameServer(9-12)" P l& W. P6 H
166-初始化战斗房间,添加第一个方法:转换出牌
1 h9 \; I& G' `' |167-创建出牌类型,判断能不能管牌
+ X3 g/ R, P! P168-如果出牌判断成功就移除玩家的手牌- f; |" L2 A" b
169-增加倍数和更新回合信息$ x |7 k2 p+ r5 J7 x
170-发牌
- S$ s$ F; w' g% O# R2 `9 T8 D171-设置地主身份,创建身份的常量类
! T- V5 U- R+ ^' a; V) O- D172-补充一些辅助方法,完成战斗房间所有内容
' B8 {) ^9 Z- ^) x173-GameServer(9-13)
( Q- Y) h7 m9 [- {) Q% ^' }" U/ @174-创建战斗缓存层
& |* D$ I% w. w175-定义战斗的一些操作码
% k5 A' `; S" _# C8 t" _176-编写开始战斗的逻辑
' \4 ~+ L. o' s8 B* H. E2 V+ `) G177-关于发送卡牌集合还是卡牌id的解释
0 i6 W% F" j: _' |* i1 ^& ^5 f$ \178-GameServer(9-16)
( `( A- G- S' p, S& k! `' L, |) T6 S179-实现抢地主的方法3 h, z1 d4 ]$ x9 G0 G
180-创建出牌的传输模型,获取选中牌的权值
0 x E n0 S. A8 @5 Z) e181-判断各种卡牌类型
+ F6 |1 S* s" o: r182-完成编写出牌的传输模型0 | l0 t+ n1 j- ~. Q, o/ c0 K
183-GameServer(9-18)
) O) [9 I9 H+ y% X184-玩家出牌在服务器的处理
# z4 J' J& K; T( v R" I6 z* d185-转换出牌的实现2 e! g- [, i: f
186-游戏结束的处理2 `8 l! W0 p# T
187-不出的处理
& V' X5 K! M+ ~' S& q! f188-玩家掉线的处理: z3 V/ v8 u7 V2 ?/ @
189-GameServer(9-20)
2 z6 Y3 p* I" F, O190-在客户端创建战斗的处理类,编写获取卡牌的处理
$ \1 d2 p6 g u# G3 Z8 Y( |" U191-创建客户端的卡牌控制类, {6 h- X( Y* o; h- o: f$ r; t
192-创建自身角色控制类,管理卡牌的创建! ^; _- `( @2 R9 j1 w& v( O# q: d* N
193-创建左、右玩家的控制类,管理卡牌的创建
) s2 Q4 f- v7 @* l- _% _# s194-Card(9-21)2 N* w h7 j1 k$ J) [. i5 |
195-给大家录制BUG过程
8 J8 D% m/ ?2 H7 p! V1 ^' v5 W196-GameServer(9-23)
, m# A3 R! V2 D& n/ i5 v r" a197-开始处理抢地主的响应6 z. p5 l# T2 f! F
198-发送抢地主请求和抢地主成功的处理
/ V6 M8 F- b) k" e, F199-自身的玩家添加三张底牌的处理
# `( F) r+ i5 ~$ z y9 [200-抢地主成功的处理完毕, d2 Q" j2 y# r. N% C: l0 e
201-测试抢地主并修改BUG
* I2 H5 s5 O# R+ `3 s202-Card(9-24)
; O" {5 X: f$ O0 @6 q9 ]* [. j6 w203-GameServer(9-24)& P0 ]; w- M0 E/ l
204-接收来自服务器的出牌命令7 R$ D5 a. C' A% h
205-客户端出牌的处理4 o. V% U" \2 j/ T! p
206-向服务器发送不出的请求" {" u* S# P9 Y
207-GameServer(9-25)9 j9 U ^. o6 E. o6 \
208-Card(9-25)& p' \8 b- s1 T
209-给卡片添加碰撞器让他能点击' s y, ]- a2 }9 m0 e
210-解决出牌BUG
' w8 p, G, R7 \5 _6 f9 z211-移除出完的手牌
* W5 |: c$ D8 Y: `8 B9 F212-管理桌面的牌显示
- F2 G6 H/ U8 @0 ~8 n; I: ^/ D; @0 h213-出牌特效声音的播放. n- r' e: h6 r, g( m
214-GameServer(9-27)
) S) `& r0 h; Y! n \215-Card(9-27)
J9 z- H" ?0 _. n6 b- _216-测试出牌BUG 上部, X5 n R5 G/ F# K& z' T2 g6 b
217-测试BUG 下部9 a8 g; p) V# i( e& H
218-客户端+服务器(9-28)
. N# a6 T( L5 z% x8 \' @* T219-创建OverPanel代码脚本3 B5 x; C L) \
220-通过消息机制表现客户端的结束
0 d9 y8 k9 T& i) l ^3 t221-测试游戏结束9 }2 Q+ B0 I N* g% w
222-创建背景音乐播放控制脚本' V7 L7 v- w/ P
223-给前两个场景添加背景音乐
& r5 ?; U+ O5 D: }" G. S224-完结与未完6 ~ L ~, S. M+ n! [
225-Card(9-30)
: ]# n5 s5 y' d. n- L226-GameServer(9-30)
* r5 u q2 K4 o; K: M/ V227-扩展课之ProtoBuf% J: ^5 W( [6 t+ E* V/ h
228-扩展课之ProtoBuf(10-15)下载地址:
' z# y2 R4 m3 t0 ~- S+ s0 w9 i% W+ o: @. V2 T* B
, ^6 G& g$ R( U" b& [; | I+ x$ |
" W: l" w9 p$ O: N7 j' y: J& g% E
|
|