|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
% S* J$ l/ L; J4 M9 ]+ M( Y9 J% [服务器采用:c# 开发 7 `- k( b- L& N9 P
客户端采用:Unity2017& }0 o3 p) I9 z9 [- {$ X9 @
, } V2 y& H4 r# |学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
) u4 `" L" U% r6 g. ?课程每天会有更新,难免有一些特殊情况望理解。
# S7 ?& I" O d, e. C. X( E% V; h x6 t: S个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。
% d% w: u. g! B( g9 ^, s5 [: e, x1 f ~. T- u
严格意义上来说,本课程应该是两个课程合二为一了。
7 d: x, P2 k6 F) j5 E, o第一个课程就是《从计算机网络都服务器编程》。6 v8 u: w* L* q
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:- S- V9 O1 w, K9 F! I+ h- \! e
什么是因特网?
( g2 T) |, I3 W X! L$ j, _什么是协议?- f' k/ P( c [# U. Y
什么是应用层?应用层协议?
8 a% T4 E* ?" i S) l什么是运输层?运输层协议?
' N4 e$ F# Q2 j6 j+ i0 O什么是TCP协议?什么是UDP协议?& |: J% E P: f8 x+ B
等等···" X l: w4 u6 |! l8 U* b% j2 _
(很深层次的知识,大家根据兴趣来进一步自己学习)
, x3 m6 i3 } R8 I8 K8 K知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。1 Z F4 Q9 C# T* t% v! l4 O
$ U: n1 Q0 e/ C2 y+ p- R第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
9 @( m* ?% L3 g斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
5 o, ~3 F% m0 G7 e4 a9 f
u2 }. W5 G) d4 B; G0 z5 {
. ]& [9 M! R, \, N4 Q q001-课程介绍( k. b# i" ^7 l
003-因特网和协议
9 a, ]/ b- m8 v2 a9 B004-分层体系结构
& y) t" j3 z' ]6 t/ N006-进程和套接字
: |$ n$ Z* \; g6 R$ a9 _1 V007-运输层协议TCP和UDP
7 r+ f% |$ {5 d, l9 b008-应用层协议HTTP
/ [$ R3 }& `# d8 M: o009-socket服务端
! K7 m8 Z$ p: k9 Y* E8 T, A* e- [2 x- y010-socket客户端
* ~- d; `% u& N: q% q3 m011-验证连接. w$ ]+ n8 m4 K0 t
012-SocketDemo
' {8 p* h& r) q013-实现接收连接的异步事件
& }& V, l0 C3 K0 Y' |014-添加限制连接数的信号3 }0 H" c4 o& {) E E6 x' Y
015-封装客户端连接对象和编写连接池
1 a! H. x+ ?* `& K( L/ W E016-GameServer(8-1). G! { S2 K3 r" _% o5 \/ v
017-粘包拆包问题介绍, [4 L+ }" f3 u" z2 z! R1 o7 v' [
018-采用包头+包尾的方式解决粘包和拆包
/ O5 G+ g! y6 P9 E019-GameServer(8-3)/ Q' L5 Q2 E" H( E" H4 W; f6 c. B
020实现异步网络接受数据' k" W; w* ^; n4 y2 I1 d
021-客户端对自身接收的数据进行解析! o, Q, w6 V0 W
022-构造SocketMsg负责网络消息的传递' ?! x r2 r' ?4 X, J
023-实现soceketMsg与byte[]的转化" j) [5 Y5 h8 O7 [" L H% P
024-对象的序列化和反序列化
7 K Q! m- P9 }025-GameServer(8-3)_2
F4 k, G5 i6 F& E+ i$ w6 k026-实现客户端断开连接
% A/ W+ B1 K* [; H! q027-实现发送数据0 F0 N& _5 l6 M; d
028-助学篇:带大家回忆一下所开发的内容
) s8 S1 Y {( ~6 s9 J6 o9 E6 t; d029-抽象出应用层
' `! c9 d& ~3 X2 p3 G8 I% J030-GameServer(8-4)
9 ^+ V# O, M$ |; Y031-开发定时任务功能(计时器),编写任务模型+ `. K& _& |/ t: c" k7 U5 o
032-创建计时器管理类,监听到达间隔触发的事件+ X& J, ^& A1 \
033-控制定时任务(计时器)的触发时间7 v( ]6 w. g1 U3 l- W/ c5 N8 c
034-开发线程安全的INT类型( F3 w \! S) j
035-GameServer(8-6)6 u# W/ q5 w. z
036-实现单线程池' I; w. x9 [. |4 d$ b% A: L
037-Unity2017下载
; F! v4 I. L+ v7 W0 m* H1 V038-创建工程导入素材( f1 ]9 M& K c" ~. |
039-Res
; s9 ~2 I, O. _4 c040-Card(8-7)
0 P$ h2 b6 W. \: q' ^' s4 b041-GameServer(8-7)
, B% O8 R% W5 L/ X7 T043-根据策划创建面板! W% R' B n, r/ G/ A
044-导入客户端框架,创建PlayPanel脚本
0 L$ {9 d" H% i4 i3 ^/ S, t045-完成开始面板
2 p, v' E; m5 ~0 f046-完成注册面板
4 n4 ?7 f( s3 T( k047-Card(8-8): f1 w+ r6 i' h' e
049-服务器架构介绍
1 l" ]3 s# g4 P1 u050-按照架构实现服务器5 z W. T/ P+ `# m
051-在客户端封装Socket,使其连接到服务器
; G2 C. m$ w( J: F# I( w5 D; F* ]052-测试客户端服务器的连接
U6 z0 C) \8 X. d053-解决BUG
* {; Q; M1 W: A5 Q- h- _054-Card(8-9)" i6 R# Z7 m; d9 x$ P
055-GameServer(8-9)
+ w* p1 h5 m& I: b* u056-修改客户端的链接方法 _/ E+ C# [* {8 n
056-修改客户端的链接方法_20171124142335/ A3 D8 Z; D0 V; s- b' Q
057-定义操作码、子操作码,演示客户端如何给服务器发送请求
5 B+ B/ Z1 }: ~+ m/ d8 H6 `1 W058-测试数据传输是否正确+ V& f: Y' ], |: p8 D
059-Card(8-10), k# ?8 _4 }( `; o- p0 m2 Q
060-GameServer(8-10)' c/ g3 ?9 Y. e9 f4 y# v2 s/ y V: F
061-创建账号缓存层,实现注册的一些方法# b# F: C5 F- u; Y# U- |
061-创建账号缓存层,实现注册的一些方法_20171124142334% i5 g0 z1 k; X4 J) Z
062-完成账号缓存的所有方法
# K% E# G+ F! J% j% S; R# M X062-完成账号缓存的所有方法_20171124142334
2 \8 P+ e" d! y1 w! X y063-实现账号逻辑层% l h8 P) f8 l5 g
064-解决今日BUG
- S) f; F! t! f s065-Card(8-11)
" k9 }0 w* E* Q066-GameServer(8-11)
4 P& ~) q1 |$ R* o/ G) R067-开发提示面板
% |! ], |2 y$ o7 D' k! ^068-给登录和注册面板添加提示% E- L# a! E/ c9 V3 d
069-处理接收到的服务器发来的消息、优化发送网络消息的方法7 z+ w# P2 ]! ?
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
5 q, k9 R$ x1 i+ B0 q- P% g071-优化服务器,改变传输结果6 @7 g F& X. N0 ?5 @, |
072-Card(8-14)
6 Y9 w& O% m5 P) @6 {073-GameServer(8-14): S8 {* X/ L2 h+ s# @2 |
074-初步实现场景管理器,融入到框架中
3 i7 X$ J9 t1 V" }& D075-增加当场景加载完成的时候调用的方法# ^; p* p+ _: R6 K# J
076-实现登录成功跳转场景0 \ D' `# b- f# f: }
077-设计UI之主界面的信息面板
" L7 ]& | j8 o k* f0 r6 W078-设计UI之主界面的匹配面板- \4 [7 V3 j, u4 U4 N) m0 Z/ V
079-设计UI之主界面的设置面板1 }& c$ r0 V( h4 B) o
080-设计UI之主界面的创建面板: t2 m6 d/ w1 Y
081-Card(8-15)
/ |. ?' B) q5 I; {: O4 ]082.编写信息面板2 R1 d/ M) @! _/ h# \
083开发匹配面板
' g$ H. } x% p2 w+ ?084.修改默认创建的脚本 ?% j7 D8 n; L% F
085.开发设置面板; P7 e, \" O0 b( s2 h1 \: k m: X/ J
086.开发创建面板4 r* S+ q1 i$ \3 d8 M! i
087-Card(8-16)' f9 Y' J g! S
088.创建角色数据模型
' I5 ]. |8 ? O' b8 a0 F/ G! I6 ~3 c1 n089.开发角色数据的缓存层, R) W6 b3 C8 m3 Q" i6 H
090.完成角色数据缓存层) D+ B% {7 D( s9 n
091-GameServer(8-17)9 q( B8 y ^+ w- v) A
092创建有关角色的操作码
" U0 R) `; f1 w: S$ V% n093.实现用户逻辑层0 `* I3 [3 Z8 D( ~
094.向服务器获取信息,在客户端创建用户处理类
. R o" Z4 S+ H; w095.客户端处理获取角色信息的响应' q3 r0 \9 G' @6 Z( l9 f
096.保存接收到的角色信息并且处理角色上线响应
' L, P2 B4 G6 \ I ]" ?# ^097.发起创建请求和处理创建响应
& g0 u, d) A1 J$ n098.演示本日BUG
1 p- b! I# E: o6 Y: F7 O099-GameServer(8-20)- J) x! w- W% M; T1 Y$ T
100-Card(8-20)! @* l, R% m6 _; q/ F
101.更新客户端视图
, U! Z6 b$ M1 S& B t5 z% v102-编写匹配操作码: c4 {" M; b' {- i
103-定义匹配房间的数据模型6 v/ M+ C. A( ]# r, ?$ f5 J
104-创建匹配缓存层,实现进入匹配队列5 \9 c1 n( B$ g" U
105-实现匹配缓存其他所有的功能
2 o4 a6 e, T6 I! J2 a* h* Y106-创建匹配逻辑类,实现进入匹配房间功能" @$ v! `( M4 a0 b; w
107-优化服务器之群发消息
/ G9 |, }! J. I: {- V+ ]108-创建匹配房间的传输模型,在逻辑层进行构造
% e6 `' v, B0 A109-实现离开匹配房间功能
9 E6 O0 K, f% n0 w110-GameServer(8-24)) z5 H/ y9 F- `( c! T
111-实现玩家准备# _5 k) }! k! B T) E, \& u" w
112-在客户端发起匹配请求/ A8 {0 C' a* t; \2 ^
113-GameServer(8-25)
6 `# d# q7 J7 A8 y7 a' ?114-Card(8-25)+ ~' u: t4 u4 |; t- W& {
115-创建MatchHandler,接收服务器的响应
7 X2 M# `- L. p7 s+ c5 m116-保存房间信息,他人进入房间广播处理# Y/ O4 c( Q* n5 L X. {
117-玩家离开( d$ r5 E7 n- w
118-玩家准备和开始游戏的处理. ]# f! M2 @6 t8 M) s Q; w* o
119-GameServer(8-29)
7 ~( _4 L1 ^5 U6 a/ b( _, R( S120-Card(8-39) (1)4 W+ a) z( p) _# l4 Y
121-搭建战斗界面的左、右角色状态面板
3 L. b: R1 h ?* ?- |' V1 u122-搭建战斗界面自我的状态面板
% E! g' g9 y' x123-搭建战斗界面上边的底牌面板4 X" u& c/ M8 p1 ^8 M
124-搭建战斗界面下边的快捷聊天面板
2 J* c7 y, i) W# ?' L/ H125-搭建提示面板和结束面板5 K* M% g2 N: ]; U! w1 |+ N
126-Card(8-30)" `* U' Y5 R1 Q8 o% L! v4 f
127-创建出牌点,实现进入房间按钮功能0 p4 `3 M# ~5 Y9 ?: b
128-控制底牌显示,编写代码# \0 U6 J6 T- r( J
129-在服务器工程内创建卡牌的传输模型类" X6 \! I4 w. J
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
5 @% S% I ~) _: N; S131-分别创建左、右角色的状态类(有破音)
+ R( p6 [; d( P1 N132-ard(9-2)# O k8 D: A; G- v! a. c: F
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
4 b% m' [) e1 K2 W* W4 _134-如何控制玩家左、右玩家位置?(有破音)
' K3 w6 ` c4 I J( h135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
8 K$ U" C: m3 u$ _136-Card(9-4)
7 d) f( j' C% {8 u$ G2 h" `2 A, Q137-GameServer(9-4)+ l- G2 P5 M3 t; o8 t3 Z+ ]
138-解决左、右的代码重复部分 Q2 D+ Q' Y' M( @
139-创建自身的状态面板(有破音) V4 R& h6 E: _+ K
140-完善自身进入更新状态面板+ q9 Q# K: d- A+ V' P+ z
141-CardGame(9-5)
) u i3 j9 X' R4 D142-找之前的BUG(一)
6 a4 ]. x; ~3 A1 T143-找之前的bug(二)+ C0 Q# r0 e( {3 D* ]' }8 I
144-Card(9-6)- h1 G4 m" X' j. o8 J. L6 T
145-GameServer(9-6)
. {$ r( y9 @. u) s) J/ E6 q% ?146-发送自身准备的请求
7 c8 i+ s- @, [147-创建下边的面板的脚本
& F) d* _* z8 c) |148-Card(9-7)! J6 d+ k$ k1 Q
149-创建聊天操作码,在客户的发起请求' e c' n! P6 Q3 I1 M
150-服务器处理聊天的请求,创建聊天传输模型
/ `. F6 M- `4 T0 H# `4 y& R151-创建聊天文字的常量类
+ Y+ f& U. X4 E/ g152-Card(9-9)
1 u U) j1 P# R/ E153-GameServer(9-9)
! m3 @' G8 D& F3 v154-客户端接收响应,显示聊天文字2 O" O2 a, `; n6 i
155-聊天声音的播放
% V5 C0 f" V; o156-测试聊天BUG
! K, f# u2 ?: K4 {157-Card(9-10)
8 R$ T, O: t) k ?3 |9 V& A158-GameServer(9-10)
8 a3 F! M! b/ j/ Z1 p) M159-所有人准备完毕开始游戏,使用中介者模式触发' J. @! g& C7 q( @$ o
160-逐层分析,创建玩家数据的传输模型
6 ^7 O* {: d7 a, {161-创建并初始化牌库,创建花色的常量类8 ^/ P% A3 N: v9 x: A
162-创建权值的常量类,完成创建牌库的过程
/ V$ e) ]' m9 d& n' U8 @2 f) Y/ @163-洗牌算法,完成牌库类
{8 G# b7 r" r9 K) N4 J164-创建回合管理类
) u- _: U( w8 G# H" u$ K165-GameServer(9-12)
( I+ B, Y* y6 t5 Y" i166-初始化战斗房间,添加第一个方法:转换出牌
7 F; o0 y$ ?7 T167-创建出牌类型,判断能不能管牌
) D& K7 `0 r" @& a2 }' s4 T168-如果出牌判断成功就移除玩家的手牌
$ n; X b0 k8 T) O169-增加倍数和更新回合信息
0 F6 S0 a1 k+ t170-发牌
2 I7 b7 P$ u# J" g1 {; r Z171-设置地主身份,创建身份的常量类
0 }; W0 E. r$ s/ }172-补充一些辅助方法,完成战斗房间所有内容
6 f5 O4 [* H/ J* S' }' V7 n- p2 [173-GameServer(9-13)
. h) I' C) _! s9 L174-创建战斗缓存层
' ^% _, ?, c. D+ X175-定义战斗的一些操作码; l% `# c+ g4 c* X+ i
176-编写开始战斗的逻辑+ P0 [( s. e& w
177-关于发送卡牌集合还是卡牌id的解释
4 v5 s8 R K$ r- A- f- G178-GameServer(9-16)
8 G& s) v) M; {179-实现抢地主的方法+ T+ [$ Z8 g$ z! {1 D8 a8 {
180-创建出牌的传输模型,获取选中牌的权值7 a* S, a3 L5 h% N
181-判断各种卡牌类型
/ ^) v( U+ P! h7 B' E( F: S182-完成编写出牌的传输模型4 e8 m0 Y$ u% x \. D/ x) o
183-GameServer(9-18)% d5 W* v+ ~* y
184-玩家出牌在服务器的处理/ m" L9 ^, ~+ X8 w5 [( {
185-转换出牌的实现3 E3 F. [& I p! U0 E7 k: H
186-游戏结束的处理& ?% N7 k G3 ~/ {
187-不出的处理
1 d B, @3 R* G188-玩家掉线的处理
! C5 P" P% ^' Z9 Y! _+ S) d189-GameServer(9-20)
# |' i" r" B- \190-在客户端创建战斗的处理类,编写获取卡牌的处理; E/ [# s8 x( M \; a0 E! o; d9 Q
191-创建客户端的卡牌控制类
* }7 W* {+ O/ Y. c- j192-创建自身角色控制类,管理卡牌的创建0 o U% U4 H# E6 g
193-创建左、右玩家的控制类,管理卡牌的创建- t- G) h( b. [2 T& b- n6 t
194-Card(9-21)/ L \# f3 z: q" A5 k
195-给大家录制BUG过程. R: v1 W- L$ E& z$ l
196-GameServer(9-23)
( Z7 v/ W& Q8 z% n% i+ H, Y197-开始处理抢地主的响应2 E' T. V P) Z/ Q) R V
198-发送抢地主请求和抢地主成功的处理" O8 V1 V5 y; K( n
199-自身的玩家添加三张底牌的处理
, a4 o8 W1 h* T200-抢地主成功的处理完毕6 A( [) k: t6 x, h0 S
201-测试抢地主并修改BUG
5 W1 V4 c* V# d$ F Z4 k! n9 u+ z! M* ?202-Card(9-24)( M( w( n( B* f/ W# P, w4 ^2 p
203-GameServer(9-24)( G& e7 ]) _$ p" u( W
204-接收来自服务器的出牌命令
6 c, n- F: B _- z) Y) n x205-客户端出牌的处理
3 O( f- E/ D6 A206-向服务器发送不出的请求: F3 P8 ?! {( j% `$ i- I
207-GameServer(9-25)* U1 A& n/ K( r# K6 W' V/ T
208-Card(9-25)
. t% X5 q3 Z( X8 e% y% l2 P. T6 y209-给卡片添加碰撞器让他能点击
9 X. c+ s6 y" R/ S {5 R9 j210-解决出牌BUG l i; i& V1 G
211-移除出完的手牌; q9 R0 A0 K9 q
212-管理桌面的牌显示+ ~+ ]3 r2 s4 [ `' J; f
213-出牌特效声音的播放
% p P2 }' C j, R+ C7 \214-GameServer(9-27)
2 h& h4 Y5 G; q( m( ~. K3 A9 j215-Card(9-27)& K; D" F, z; n: F
216-测试出牌BUG 上部
. \/ d3 n* |' m* ?' O# B217-测试BUG 下部
, T7 T/ e- s$ g2 n) j7 m218-客户端+服务器(9-28)& G& j$ y& ]- A$ v1 S( k4 [ f% W
219-创建OverPanel代码脚本- D4 `+ Q. y$ I% p
220-通过消息机制表现客户端的结束
" _* H, n* {8 o: J# B221-测试游戏结束
5 B; t6 {$ p- l1 Y% z222-创建背景音乐播放控制脚本
3 b0 }" R5 t* Q223-给前两个场景添加背景音乐$ m" o8 B2 g" K8 e
224-完结与未完
8 D2 Q; ~' ^! t% I- E- ?225-Card(9-30); }" b3 ~7 I- @
226-GameServer(9-30)
: }. U \3 D$ m$ z( N* D227-扩展课之ProtoBuf! n# H5 ~6 r; `; Y& S& a
228-扩展课之ProtoBuf(10-15)下载地址:2 I% |) w( x/ X! B) q& q
. a2 l5 L, O2 ]5 v' `$ M
' r: T5 P+ r; H7 Q! c1 e5 O
9 t7 k" A6 o7 w3 ^" q& x# l |
|