|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
! x9 w7 p, w) j% F7 }6 {服务器采用:c# 开发
, a5 a' Q* S( q8 a5 b' A$ ]客户端采用:Unity2017
" W# K: D# H# X* m' P- I% P0 z, p4 X: M& W
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。9 {( U1 q" J- o$ A% @7 A; z
课程每天会有更新,难免有一些特殊情况望理解。; T* Z- F6 s6 F9 Z
个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。
5 t2 q' Z, q, b, @: W- i8 |" a2 u; V
严格意义上来说,本课程应该是两个课程合二为一了。. J( Y- l7 k& R# H9 Y
第一个课程就是《从计算机网络都服务器编程》。
( J' \: C, E" c, R5 n' ?关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:* c$ q! O- M. f- O K
什么是因特网?
5 v: i" z$ R O) g& i- U5 I什么是协议?( H1 o" Q4 O0 r3 f% ?" d1 w
什么是应用层?应用层协议?8 j |2 {9 W& i3 r# V
什么是运输层?运输层协议?
3 y5 T9 q2 k" R8 _2 N3 w* B F/ b2 W* K( J什么是TCP协议?什么是UDP协议?
) u) B' m) u1 `6 l等等···
+ J2 u8 R ~5 n7 `% y* E(很深层次的知识,大家根据兴趣来进一步自己学习) z2 W: N7 z/ e4 v* X, b* L, N( _& i0 T
知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。# h; X9 E$ K9 y8 P
7 s+ }3 Q3 c) U/ e
第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
+ w1 ?" F5 ]8 j4 S8 k斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。/ H# s8 u6 c# r9 V8 ]: K
! @+ N5 W' W/ L! d4 X& b" N% |
" h& X9 k: U+ t+ g3 m8 G001-课程介绍/ I$ x$ }7 }0 Q+ L% D
003-因特网和协议0 l( Q* T# J4 w, j' \, @4 J
004-分层体系结构. _4 w6 R7 h/ p8 u" i3 X6 _6 `
006-进程和套接字
+ a. D8 b A$ |9 E7 x007-运输层协议TCP和UDP
) E' L8 B; b) n3 l008-应用层协议HTTP9 K5 f; Q7 F0 g; ?! | v0 t
009-socket服务端/ ^7 K8 m$ J0 N# ^9 Z" [
010-socket客户端
! i: V3 X% R2 O* K+ ~0 A7 m0 k; p011-验证连接, R% a# M& Z0 o" G8 r1 ^& J
012-SocketDemo
1 z) }' t: Q; ]" l013-实现接收连接的异步事件
# j9 J+ C$ g0 H$ L# E014-添加限制连接数的信号; C- K& G, n6 a0 ^( c8 Z
015-封装客户端连接对象和编写连接池
3 \3 Y N# i. t016-GameServer(8-1)
& Q& D2 D/ }2 O017-粘包拆包问题介绍% [8 R& i' C3 m& d9 Z+ y g
018-采用包头+包尾的方式解决粘包和拆包
. t" V: n6 s7 o8 q019-GameServer(8-3)
9 `1 _; j, m; z' W) T020实现异步网络接受数据
6 c& f0 p/ {# W" A9 O* i021-客户端对自身接收的数据进行解析
8 U/ L# t! P2 x) \( F) h2 ` \0 I7 m. R022-构造SocketMsg负责网络消息的传递
6 ^$ `) N" m# S) s6 E! j023-实现soceketMsg与byte[]的转化% t3 ?) s+ B L
024-对象的序列化和反序列化
5 Q! |; X' S# ~. Q0 O025-GameServer(8-3)_2. x. j" b1 D4 I, p" W6 Q, A
026-实现客户端断开连接
2 `0 J# U3 o6 V& {027-实现发送数据( k. y2 W) \+ t. p
028-助学篇:带大家回忆一下所开发的内容
3 ^, @2 B1 E3 l4 P/ [, `029-抽象出应用层
$ t0 M3 f; g6 \6 `9 N030-GameServer(8-4)
3 X! z) q: s B7 f( B" b4 z% i031-开发定时任务功能(计时器),编写任务模型
, E, U- m' g" r0 k5 F032-创建计时器管理类,监听到达间隔触发的事件1 v6 `6 n$ ^, i" ~3 j# F
033-控制定时任务(计时器)的触发时间
) A7 n1 B0 {# P* a0 Y6 M! ^- b8 {034-开发线程安全的INT类型
* c+ R- R5 Z5 ~035-GameServer(8-6)
" d- T6 a, U \( e036-实现单线程池
0 Q7 V% p7 E) Y037-Unity2017下载" ^2 K& B L' t/ ~" Q
038-创建工程导入素材
; g- O* Y5 e5 a P/ Y" m7 U5 Q039-Res
. ]" @$ A. c q# Q. D040-Card(8-7)
0 a$ C _* E, ~: v041-GameServer(8-7)
! G- F. c# j* S0 ^' ~( f043-根据策划创建面板% g5 a/ S+ h4 d
044-导入客户端框架,创建PlayPanel脚本; y3 S, {! _' O( \( T
045-完成开始面板& h+ L+ L, j$ X9 J2 O( q
046-完成注册面板
7 \5 u2 P" b6 z! U0 I047-Card(8-8)6 U: B& I, @6 e ~( y9 `- V
049-服务器架构介绍
& f4 Y5 r p |' b# U' \% a: u5 V050-按照架构实现服务器 C; ^+ l; n8 v# X+ r: |9 {- |
051-在客户端封装Socket,使其连接到服务器
# Y$ O7 { o+ t* S _8 w/ `" }7 @052-测试客户端服务器的连接& J+ O5 X- f$ `5 M! f4 A' i* k, o
053-解决BUG
. Y8 a! Z: z) B n3 U. H3 U2 b054-Card(8-9)4 y* l2 |$ m& R. ~
055-GameServer(8-9)7 ^ E. a: N7 T' y' w- v
056-修改客户端的链接方法2 I' B# N' F/ J1 s# X
056-修改客户端的链接方法_20171124142335- l% q. n& |1 `. Q C ]+ d
057-定义操作码、子操作码,演示客户端如何给服务器发送请求
9 ]! A7 Q) A6 q& l; ?5 i# q058-测试数据传输是否正确! l1 T; c" I0 Q2 u. w: V
059-Card(8-10)
* `/ X1 g& i& D( [! V8 _060-GameServer(8-10)
; A! ^2 E6 S2 V8 i061-创建账号缓存层,实现注册的一些方法
& U: G) j0 N/ E3 w. I0 ?061-创建账号缓存层,实现注册的一些方法_201711241423344 T2 y9 F! t1 L# m
062-完成账号缓存的所有方法
8 m7 [$ O7 C* m; T062-完成账号缓存的所有方法_20171124142334
* A1 {5 Z4 `( Y# f2 R063-实现账号逻辑层
4 E, n0 D+ _) c [- [: ^$ }$ f064-解决今日BUG3 M8 ~- M2 r4 X7 A
065-Card(8-11)) k9 y/ Y( P' W# w5 k7 d
066-GameServer(8-11)+ t. n6 O, k1 C
067-开发提示面板
- ]: r% o( k' Z4 G5 i9 F2 w: Y* I068-给登录和注册面板添加提示
$ E& n) I& D9 N9 |% j L069-处理接收到的服务器发来的消息、优化发送网络消息的方法
4 M( x9 S( b0 {0 S) [ `070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)! H+ y: n3 ^3 k% q% Y: K
071-优化服务器,改变传输结果2 {! F4 D( F( K, w; A
072-Card(8-14)9 P) w! s! D8 A+ C
073-GameServer(8-14)
+ L+ \5 w6 |6 Y+ J# Y* H# H# H074-初步实现场景管理器,融入到框架中
/ K7 Y) ~2 I- ^. |4 _/ x075-增加当场景加载完成的时候调用的方法: z+ U) D2 g7 H& M5 z4 Z) K c& e& T. ?
076-实现登录成功跳转场景
% J" W7 }4 M+ w. q3 f077-设计UI之主界面的信息面板
: n6 [; M5 U( E% ? R L: c1 [078-设计UI之主界面的匹配面板 a/ p# l5 w0 e) y, U- `7 D
079-设计UI之主界面的设置面板) g/ t0 R/ r" Y7 h( [3 z( F
080-设计UI之主界面的创建面板
; Z( S9 P% r/ E" B* ]3 a( |081-Card(8-15)
" l* M$ A! j6 n) V8 u082.编写信息面板
; Q2 \4 e7 t6 H* M% C7 v0 u083开发匹配面板" v0 W' A; V) n, z- p% d( A. B8 c U
084.修改默认创建的脚本
* Z) ]- | m4 P9 ~; c! }* D) G085.开发设置面板
. J6 @: R9 P7 _3 L086.开发创建面板
9 ^' O2 w1 g& b6 s5 d087-Card(8-16)
6 s* y6 A, Q* t088.创建角色数据模型
1 J. Q0 h* s' A& d4 w* @4 H- x/ u089.开发角色数据的缓存层
9 K2 W, Z; \. j" q# N( L090.完成角色数据缓存层8 n6 p p- M2 f) R: D
091-GameServer(8-17)
9 y! r! o1 u2 e. O! p092创建有关角色的操作码4 J) t2 p! _7 R b' H9 L" f
093.实现用户逻辑层
) H+ C$ L. h! y" ]094.向服务器获取信息,在客户端创建用户处理类
- N( b, ^1 l/ x! G' F1 F095.客户端处理获取角色信息的响应6 g2 F0 Q: O. [; k, Y) a! N5 ]$ |
096.保存接收到的角色信息并且处理角色上线响应
' |- w0 l2 P7 R7 v097.发起创建请求和处理创建响应: Z* s% h0 L0 e, N0 I7 q
098.演示本日BUG7 A9 d$ B }: x% P. K0 L
099-GameServer(8-20)
! c. a1 R2 S8 n( a( X100-Card(8-20)
8 M' M# Y" V- Z2 k6 ~) E/ h101.更新客户端视图
- a u1 R# A6 d102-编写匹配操作码
6 A- K8 F! g5 [' `. w/ w103-定义匹配房间的数据模型
" k7 N# w# T3 `0 i104-创建匹配缓存层,实现进入匹配队列3 E& [* f/ O1 W0 u2 j' f/ d/ X8 }
105-实现匹配缓存其他所有的功能/ C, p2 T4 _) |; U/ n1 ~
106-创建匹配逻辑类,实现进入匹配房间功能) B; j) T, S' Q/ I! q
107-优化服务器之群发消息
1 A' {! r! W# I X8 _108-创建匹配房间的传输模型,在逻辑层进行构造
! e: }9 V) o9 B- {: f109-实现离开匹配房间功能
- j9 x4 B7 t" ^- a6 q; `; e/ m$ X110-GameServer(8-24)# {( c0 K( h; Y. W
111-实现玩家准备
, V" E$ s/ l- P+ F112-在客户端发起匹配请求) P) a7 @1 L3 s. M: I9 }
113-GameServer(8-25)* {5 n; S- d& d+ S
114-Card(8-25), l" x! O0 D) I5 Z _
115-创建MatchHandler,接收服务器的响应
4 d+ d H0 G$ Y4 P' V116-保存房间信息,他人进入房间广播处理
# a3 @$ E! W/ I# C% l) D7 Y117-玩家离开
! x! J/ R* q# z$ E118-玩家准备和开始游戏的处理
* N0 P9 a1 c5 Q' G( W# f119-GameServer(8-29)
9 d' g- ^7 j @" H5 I+ n7 G120-Card(8-39) (1)
k9 \* z( G8 y2 H7 g% ~! P121-搭建战斗界面的左、右角色状态面板
: j5 L/ k" H9 b, @122-搭建战斗界面自我的状态面板
{2 O- ~+ C1 W. ^* k! K$ {123-搭建战斗界面上边的底牌面板
2 e, q8 m. l' L- I/ P. z1 f124-搭建战斗界面下边的快捷聊天面板
8 ?: L) V3 Q2 ^! ]125-搭建提示面板和结束面板( M- x1 [2 S6 ?% g6 H
126-Card(8-30)
" G% M r5 E8 X( {% u' |127-创建出牌点,实现进入房间按钮功能/ V1 V/ u5 Z7 C9 l* D! z
128-控制底牌显示,编写代码
) j4 o9 |9 T1 d1 i; K! B129-在服务器工程内创建卡牌的传输模型类
$ X+ N' v! \# Q0 B0 n0 I$ T130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
* S! h# v: i/ N: P% K$ ]131-分别创建左、右角色的状态类(有破音). a e4 j$ Q+ r4 A' B* X$ b
132-ard(9-2)
8 B% T8 l4 E- W0 @/ X. E2 f. Y133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
7 E/ y5 i5 N! s7 t3 k( _+ i7 d4 T0 J134-如何控制玩家左、右玩家位置?(有破音)
+ c( T; a* V% ?$ z5 h135-进一步修改匹配处理类和左、右角色的相互响应(有破音、) |" h0 S% m+ W; D m& z( r
136-Card(9-4)
8 K9 X. `" L! V137-GameServer(9-4), z0 E4 L9 f' U3 T# i9 I) }! ^
138-解决左、右的代码重复部分% ]1 L7 \: b2 |! C0 E) E |8 i
139-创建自身的状态面板(有破音) G+ x4 N7 i* m6 U( {1 i7 @
140-完善自身进入更新状态面板
! V4 M6 X( O7 h! }, {; w0 a141-CardGame(9-5)
5 Y g5 Z3 a+ D142-找之前的BUG(一)6 M( D' v1 H4 n% g9 d* Z
143-找之前的bug(二)# M, k' p# D# S0 h/ q. _1 @
144-Card(9-6)- B6 T# \0 I1 {% k6 K& h! Y" k& w
145-GameServer(9-6)' H7 [) h+ U- Z# [" u
146-发送自身准备的请求
5 l0 q5 f% S7 O# O: C o147-创建下边的面板的脚本
4 D6 b/ L: l. I# n148-Card(9-7)1 _: V6 k$ O, d- @
149-创建聊天操作码,在客户的发起请求
& m3 S& ]4 P% y6 f150-服务器处理聊天的请求,创建聊天传输模型
( n4 U5 g/ q5 k/ _: p7 i, {151-创建聊天文字的常量类
% j1 f4 L1 a. O R9 k" @152-Card(9-9)
& v3 g, v3 E" }+ l* x153-GameServer(9-9)
% J. G& }9 |, f! v( u$ H154-客户端接收响应,显示聊天文字
* K( ~+ N( J2 J& E3 _155-聊天声音的播放
; C6 g3 a' s5 u0 \ [) v: L156-测试聊天BUG
* X- L2 }/ {5 \' u: K5 d2 q157-Card(9-10)
( F7 U1 S0 H5 Z. ]158-GameServer(9-10)
. u7 K5 |5 z0 Y" [5 v2 r; a159-所有人准备完毕开始游戏,使用中介者模式触发7 h" v( _" b6 s$ X% I
160-逐层分析,创建玩家数据的传输模型% D* X. c7 [) Q7 h p0 f
161-创建并初始化牌库,创建花色的常量类
) N, y$ A; { g6 ?3 k162-创建权值的常量类,完成创建牌库的过程
5 T7 j9 C& q9 U4 v" s; K g8 D2 q6 H% _163-洗牌算法,完成牌库类, I0 Y0 Z0 D" G+ K# `
164-创建回合管理类- X* v. b8 R& X2 u1 ^
165-GameServer(9-12)0 u) Z1 }1 c1 l# B
166-初始化战斗房间,添加第一个方法:转换出牌2 Q; b0 e2 `; P! f- y! E
167-创建出牌类型,判断能不能管牌
' X4 p8 _6 C! W: [9 Y' A) k168-如果出牌判断成功就移除玩家的手牌
' T; e1 Y; U! Y% y b/ A2 A) a" m% g169-增加倍数和更新回合信息
# a! d; O+ ?% Q) O: ^, |! ?170-发牌0 H* i& R( }& Z$ u/ o7 m
171-设置地主身份,创建身份的常量类( W6 [$ ?1 k( F8 l; b ]- |
172-补充一些辅助方法,完成战斗房间所有内容. Y3 h! t0 [( X' f- s
173-GameServer(9-13)7 a' ~& S) v3 C0 K$ G
174-创建战斗缓存层7 w7 U' \! k5 h! z6 X# R
175-定义战斗的一些操作码
3 b( d$ ^8 n2 K' o$ f, P) J2 U176-编写开始战斗的逻辑# U3 E3 e6 h$ m% Q+ `& I b
177-关于发送卡牌集合还是卡牌id的解释
9 m3 H$ L* F0 P" a0 N4 W: b178-GameServer(9-16)
5 ~4 I- I9 q8 C) p7 _% z/ J5 Y* N179-实现抢地主的方法+ I$ n9 l. {! Y. c- ], P- R, H" m
180-创建出牌的传输模型,获取选中牌的权值
1 w* C+ ?: M7 t7 m% I: }2 h181-判断各种卡牌类型
6 v% A9 z9 E) a( S# ]* g0 f182-完成编写出牌的传输模型
$ L, U1 A( M8 o1 w; y" Q183-GameServer(9-18)- E$ l* p# S+ I- ^1 T
184-玩家出牌在服务器的处理
2 T% w8 v% Y' N6 r1 r185-转换出牌的实现6 f: z! o( X; Z( M9 n0 c
186-游戏结束的处理# O3 _$ k# \0 a9 U3 ~; Z
187-不出的处理
2 T" {$ y% t9 `! @: U188-玩家掉线的处理8 J- Z9 z$ e8 q E# X
189-GameServer(9-20). l# Q7 ~9 B# ?
190-在客户端创建战斗的处理类,编写获取卡牌的处理5 I) X5 z0 I& i; S/ d; C
191-创建客户端的卡牌控制类3 a, Q) }8 n8 H% i0 P& E
192-创建自身角色控制类,管理卡牌的创建
`/ R# }4 m- I2 \, B. g0 q; I9 ^193-创建左、右玩家的控制类,管理卡牌的创建& C1 D& l4 R- F* }6 X( B9 I
194-Card(9-21)) z: }0 Q$ D' y9 r6 A! F0 i
195-给大家录制BUG过程
$ q: D! H6 d3 s4 K196-GameServer(9-23): M& I4 M7 z; M3 U
197-开始处理抢地主的响应6 W$ X% E+ r7 U# X) }' r8 s: z
198-发送抢地主请求和抢地主成功的处理/ u9 r% c; T) T+ l9 U& g- f
199-自身的玩家添加三张底牌的处理
2 f' |! V- {/ a! z, Z; i" C200-抢地主成功的处理完毕. W& q: S+ V% }
201-测试抢地主并修改BUG8 B$ ?3 `2 F! P$ R+ y. W# f' k( T
202-Card(9-24)& O$ H. z7 _! x, A( `
203-GameServer(9-24)
* q1 L9 F" f) O3 z204-接收来自服务器的出牌命令 ^8 ~3 Y0 m1 \) l
205-客户端出牌的处理
M7 O4 z4 m1 I2 K+ J206-向服务器发送不出的请求! x& t) _/ ~1 D: p
207-GameServer(9-25)8 q8 u# }- t: \" o
208-Card(9-25)4 k$ | T& ~- c
209-给卡片添加碰撞器让他能点击" y5 a0 c: W! F! @" _$ g
210-解决出牌BUG
+ Q" B q1 h9 Y- q! m; Y211-移除出完的手牌+ T. p1 A$ F* x' ^6 _& T
212-管理桌面的牌显示5 {# _: O0 N3 H' o
213-出牌特效声音的播放
: X; s$ }' R+ B! a214-GameServer(9-27), ?' A# r, }& ^
215-Card(9-27)
: t0 d- P! b8 f216-测试出牌BUG 上部* s1 h) w, K1 z# @4 G9 k
217-测试BUG 下部
5 ?( H$ x( C! S1 C. \8 x0 p218-客户端+服务器(9-28)
. j) w# D) B- L; P" x219-创建OverPanel代码脚本
& B' l, S+ i# N8 ^5 L% C! {. v220-通过消息机制表现客户端的结束; I) f+ i, _9 Z+ _
221-测试游戏结束' o4 \, ?0 U0 U3 C2 p. R
222-创建背景音乐播放控制脚本
9 Z. C$ T* I, Q( p$ l8 k( n& }223-给前两个场景添加背景音乐
6 J. v3 u2 j, C4 G2 B5 x I* O224-完结与未完
0 B0 u9 d/ h5 @$ t225-Card(9-30)
$ q% r- G" t$ b- Q1 h" J226-GameServer(9-30)2 P9 E' C! z( }- z
227-扩展课之ProtoBuf
& p1 s, G0 C. D8 v* v% a; I228-扩展课之ProtoBuf(10-15)下载地址:8 s) d2 f4 g6 G! Q2 j0 n! v
/ j# X8 G& @8 d
, g: Z* w- O- X l; D
5 _4 L% H4 D% J0 C9 l4 k2 K
|
|