|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
. `# x) a w6 K* ~5 g服务器采用:c# 开发
0 B1 F& s1 K1 x- y客户端采用:Unity2017+ k" L; v9 \0 s+ K
9 F% N, P& l/ I+ x0 S7 V p
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
2 ]1 n* ^2 o0 m7 ]3 O课程每天会有更新,难免有一些特殊情况望理解。 w5 i5 E4 x5 v; p* a3 [: B
个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。
' S" P2 ~4 A+ x; M8 F5 U+ _6 D1 N) a9 {( M1 f7 V
严格意义上来说,本课程应该是两个课程合二为一了。
" D* x2 Z5 o1 M ]第一个课程就是《从计算机网络都服务器编程》。
6 Z3 M! g, @. q$ v% @; Z8 u( U关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
. l1 b2 a# J1 R8 X& _( x什么是因特网?) X. f1 L; u/ m1 E! `
什么是协议?. D8 S, t: u% Y& b+ Z# D; w, c
什么是应用层?应用层协议?3 a6 }8 d4 D# [' N
什么是运输层?运输层协议?
. e Z( ^: _9 B什么是TCP协议?什么是UDP协议?: h/ L# ^3 {6 P& K
等等···
8 p! o% ^* d: J(很深层次的知识,大家根据兴趣来进一步自己学习)
$ k% p S5 H. U& K; y2 c知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。5 {9 l9 ~/ ?1 G" r* V7 H$ {; t
7 J8 d; C) Z( q: ~5 ?/ R第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
3 J R3 Y6 z2 {) M7 S斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
6 r9 ]+ a; r8 {5 q) N# s7 D. _! }- H6 V+ }% a+ c
% n7 G3 ~, z7 H h O
001-课程介绍
) h5 l2 `3 x0 p9 t* C003-因特网和协议4 f& a3 B) _* m, f8 x
004-分层体系结构7 B$ H7 q3 ]5 C4 M& b9 A
006-进程和套接字; ?/ c7 R! c9 n; @6 Y
007-运输层协议TCP和UDP# ]; m( T1 b& j1 t% U
008-应用层协议HTTP
/ f" C3 }- b: C9 ?2 ?+ ?. V009-socket服务端
( V! x! T1 N$ h8 ], b" w010-socket客户端7 w' P) i' u0 [3 }1 {2 z0 L
011-验证连接
l/ w8 q3 S, m. G8 b& h1 u8 [012-SocketDemo
$ m6 ^9 R5 E2 q) Y013-实现接收连接的异步事件3 s5 d. ], k% ` w' b1 H7 `
014-添加限制连接数的信号$ ~7 j8 N5 J0 @ `4 m: _
015-封装客户端连接对象和编写连接池3 O3 n( H1 _1 X% |
016-GameServer(8-1)+ z6 V9 U/ |% a( j. A% Z9 D
017-粘包拆包问题介绍
8 u% I% s) t. x( n& U018-采用包头+包尾的方式解决粘包和拆包% V. a E2 K) H1 d3 @8 A$ K$ e
019-GameServer(8-3)6 T( M4 ]) u' I6 {/ Y
020实现异步网络接受数据 |# b. W% S; w( Z4 c% x5 O9 M
021-客户端对自身接收的数据进行解析/ a- b! e. N; a, y5 D
022-构造SocketMsg负责网络消息的传递
" ?: x$ u( z; N( V5 T( ^; _: o4 l, O# u023-实现soceketMsg与byte[]的转化) p1 F# x2 v3 m
024-对象的序列化和反序列化+ v, [/ d P, `6 o0 W+ |$ o1 B0 t6 e9 a
025-GameServer(8-3)_2
2 v. ~% {/ M+ L; Q026-实现客户端断开连接' i' i4 t/ Z/ q! [3 ?- G1 x8 d4 V ]
027-实现发送数据9 @4 l0 ^0 h$ E
028-助学篇:带大家回忆一下所开发的内容
. Q H) ^/ ` r6 {/ S: m029-抽象出应用层) r. l+ Q( @- f9 o" }( I# _
030-GameServer(8-4)" J3 v# g; Q) m0 S+ [6 C% O
031-开发定时任务功能(计时器),编写任务模型4 f* {6 d9 a, B- h0 g2 L9 x" H) J- }
032-创建计时器管理类,监听到达间隔触发的事件: x! `/ }. ?+ f0 K2 x1 V& }
033-控制定时任务(计时器)的触发时间
# E) L3 a: T9 N034-开发线程安全的INT类型8 r5 k( _ b+ g; k! A6 i/ G
035-GameServer(8-6)
3 k9 y3 c0 k8 \) ]036-实现单线程池
3 w* w0 E) X* F q/ {$ d w037-Unity2017下载. L3 c8 @& R3 d2 u' H% z
038-创建工程导入素材$ r& Y$ B! P2 Q# p+ L3 X
039-Res
) k5 C" T2 T' x+ [$ [* Z040-Card(8-7)9 d! M3 B% ~; U
041-GameServer(8-7)
0 v( E: X0 \" V5 ^: V: ~043-根据策划创建面板1 c- L. G! c& P& Q1 \
044-导入客户端框架,创建PlayPanel脚本2 J U D9 q$ J: ^9 d! W3 Z
045-完成开始面板) }. p/ v Z! f( o/ B! \" }
046-完成注册面板
$ m6 X+ K% Y% o( B: |047-Card(8-8)
7 T* X8 s9 G- `, v- B+ L. r8 ^049-服务器架构介绍8 ^0 g, i9 [/ w3 m8 Q8 b9 ]5 K
050-按照架构实现服务器( j$ v, F" d3 D# R' K) }
051-在客户端封装Socket,使其连接到服务器
a" `1 a" V6 E' K052-测试客户端服务器的连接
8 h! G" c' f; X0 ?/ q053-解决BUG$ w. R! d6 [/ q4 W
054-Card(8-9)3 X A, y5 [# L R
055-GameServer(8-9)
0 o, O; d9 ^& H4 X$ o056-修改客户端的链接方法# G, Q' A# ?+ q0 w
056-修改客户端的链接方法_20171124142335
3 R3 i% z4 o8 R& ]7 s, A057-定义操作码、子操作码,演示客户端如何给服务器发送请求# {6 Q, f9 s, [. v
058-测试数据传输是否正确
. f' I5 w8 P C- Y# S. X059-Card(8-10): b7 |$ P0 G7 [$ v, B1 W" }
060-GameServer(8-10)# L \. a7 y! f# R
061-创建账号缓存层,实现注册的一些方法
* e/ H- a' ?+ d' H. ~% M061-创建账号缓存层,实现注册的一些方法_20171124142334
& r! j$ O/ m& [062-完成账号缓存的所有方法
/ {, \* G: O+ c h/ i062-完成账号缓存的所有方法_201711241423341 T* Q' I+ d! ^0 [% a4 Z& R( |
063-实现账号逻辑层
8 n4 ~& X1 F4 `5 i$ \( O* x6 o; w3 V064-解决今日BUG
, w( s7 L' B, {065-Card(8-11)- b% H% D( I- K2 _' t9 S
066-GameServer(8-11)* A- H/ W. I" f2 G7 K/ Y
067-开发提示面板
! o Q) z6 ]+ ~/ ]* h: v068-给登录和注册面板添加提示# z8 w" o0 a! p; K7 H
069-处理接收到的服务器发来的消息、优化发送网络消息的方法
0 F: I2 }, Q- {2 g( E0 a070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
$ |6 Q# f: @ B) ?, p$ k071-优化服务器,改变传输结果6 i1 R+ t' O. h1 ^- u& R- d1 M( k q
072-Card(8-14)$ ^) ^& i9 P- [0 Q
073-GameServer(8-14)" G7 @# a* [# o) O0 {. u
074-初步实现场景管理器,融入到框架中
; G O( I) M+ A0 m4 ?075-增加当场景加载完成的时候调用的方法( Z' ^. ]; W0 Z7 }: K b0 J
076-实现登录成功跳转场景" W; B8 ]: E* H* f3 v8 F* V& `
077-设计UI之主界面的信息面板. Z8 Z# ~: ?# s% ~
078-设计UI之主界面的匹配面板
) s* W& U6 X* ?: R# `* B079-设计UI之主界面的设置面板4 P3 L; q. n8 b
080-设计UI之主界面的创建面板" V9 O" Q, X. S" H1 [1 }: j" U/ l
081-Card(8-15)8 [9 v' z1 g: Z- Z" g
082.编写信息面板( B% g% t/ p: b
083开发匹配面板
5 {& K9 Q8 t% |4 _. r5 C; d+ p' N084.修改默认创建的脚本5 F% ]; Q7 B5 I" u% x4 D
085.开发设置面板
$ O$ C0 r* a+ l5 e& W2 X. O086.开发创建面板
, d7 Z/ }4 }& d8 B; f' A$ O2 w! O087-Card(8-16)
% m. }, b. l, A088.创建角色数据模型
c. q4 g Y h089.开发角色数据的缓存层
' Z- \1 q: y2 ~5 x/ d7 N090.完成角色数据缓存层
5 Q! C6 {. L- n091-GameServer(8-17)
4 [& U0 ^8 Z& c6 ?; [1 @* l7 [092创建有关角色的操作码8 s' i: [5 g, m% f
093.实现用户逻辑层
1 r2 T y; ?5 w6 K4 u094.向服务器获取信息,在客户端创建用户处理类
& O! E, t- |; @1 ]3 k1 |" A095.客户端处理获取角色信息的响应$ e( E: u4 H, ^0 ]
096.保存接收到的角色信息并且处理角色上线响应
; }3 z) ?' ~: K8 I" i ~# s, m097.发起创建请求和处理创建响应
/ h' ]! h. Y& Z1 K d( ^098.演示本日BUG
6 {# ~' n* ~" q m5 h099-GameServer(8-20)$ J! o: G) O" u2 A
100-Card(8-20)4 y3 z; O7 F6 D
101.更新客户端视图
% _: s- ]% \: S102-编写匹配操作码
( c5 M0 c; T0 p# h+ H103-定义匹配房间的数据模型
0 M, X% e4 T/ O6 N* t104-创建匹配缓存层,实现进入匹配队列& j6 B$ F4 }& b- l+ {- F# G
105-实现匹配缓存其他所有的功能
( Q& D0 M/ G: u& M$ F8 ?106-创建匹配逻辑类,实现进入匹配房间功能& G( d( s F/ F
107-优化服务器之群发消息5 o1 ]0 O/ [7 ?, m3 T
108-创建匹配房间的传输模型,在逻辑层进行构造
) \8 g. \) g9 ^) A/ a# L109-实现离开匹配房间功能* N: A: p0 D4 E
110-GameServer(8-24)
2 O0 Z! k3 C' [3 q( D/ r0 S0 b% [111-实现玩家准备
2 X" H! r' W0 @! O$ I) K112-在客户端发起匹配请求
+ i* W, z: M7 R( a U0 P0 Y113-GameServer(8-25) v% ~& r2 }3 s- A# d
114-Card(8-25): x2 {9 s6 M/ r
115-创建MatchHandler,接收服务器的响应( c+ j- c& h- w1 M$ p' k
116-保存房间信息,他人进入房间广播处理2 e/ g9 X" K" ]+ w1 K, I( N8 i" v2 ]
117-玩家离开
# f. O% n( v9 v9 S2 Y, y- `( x5 R# x118-玩家准备和开始游戏的处理
/ x c+ w( K( O4 l! s& j( w119-GameServer(8-29)
: \% A' f5 q4 l( B120-Card(8-39) (1)
" p/ N; X2 x7 W7 H5 E. L* w121-搭建战斗界面的左、右角色状态面板' U" K. c5 l, T# [/ G% B7 z/ [
122-搭建战斗界面自我的状态面板 v5 Q! Q2 f8 k3 v
123-搭建战斗界面上边的底牌面板+ g0 G7 z# R4 c# J* k& u
124-搭建战斗界面下边的快捷聊天面板- }2 x( W+ Q# N) k- ^/ D9 a' i
125-搭建提示面板和结束面板
$ R: H* a) j8 H9 B- {. K126-Card(8-30)
) }4 @0 X2 [4 t4 ]127-创建出牌点,实现进入房间按钮功能
: J; G6 E1 Z; t. B: L4 Q" i& i* u4 A; J128-控制底牌显示,编写代码. D0 W! p# A6 u8 I6 L
129-在服务器工程内创建卡牌的传输模型类9 z* n3 q+ L! O" U7 L. q
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
* B+ h- W8 l* g131-分别创建左、右角色的状态类(有破音)
# ]8 i+ I$ K+ d, `+ ?8 {132-ard(9-2)& j1 I4 H$ s0 ^2 z Q
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
7 ?$ e1 ^7 \; \134-如何控制玩家左、右玩家位置?(有破音)
* ~- G* Z/ P; h' ?" T135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
6 F$ w+ g% E! i E2 {: I! y. _1 y136-Card(9-4)
6 H" T- q" G7 ~- V$ G' J137-GameServer(9-4)' {% {" Q; V, J$ J
138-解决左、右的代码重复部分
9 Z1 i3 e8 D3 W/ {) f139-创建自身的状态面板(有破音)
5 a" n. x# T3 U4 L3 B& ^; l140-完善自身进入更新状态面板
9 k# T, q. n m2 G7 U141-CardGame(9-5)
+ p% b7 H! R% j/ A7 W5 p# F4 [142-找之前的BUG(一)
1 E5 b+ A, |! x* O1 C8 q143-找之前的bug(二)
5 z- V: `$ J3 C7 O8 r ]$ ~144-Card(9-6)2 ^) y ?' `) |0 q5 D! l
145-GameServer(9-6)
5 D# I1 h; O) e1 E9 ~* q& r146-发送自身准备的请求5 t! L) z" W! ^4 z. \: @
147-创建下边的面板的脚本. X4 N2 Q1 F' e& B6 O4 I4 R
148-Card(9-7)0 T- m1 h& R( K
149-创建聊天操作码,在客户的发起请求2 k$ c/ @% t+ C5 U
150-服务器处理聊天的请求,创建聊天传输模型1 m: F2 k8 B% l& T
151-创建聊天文字的常量类
5 x) R) t+ E N' k+ } f152-Card(9-9)
. Z6 Y9 T+ R5 }0 g- |, i153-GameServer(9-9)* B! |6 V6 k, q# P6 R0 _ \
154-客户端接收响应,显示聊天文字! T S) g/ e; q9 h7 n9 [" D$ Y& s$ U+ ^
155-聊天声音的播放
- P3 G! ?7 O/ k7 Q- I9 p" }/ ^2 r156-测试聊天BUG& Q: B" Q0 u! O }4 w5 x% b
157-Card(9-10)
' l& V y5 l! r8 l/ C4 d# a158-GameServer(9-10)
7 _- e/ r4 w* `! j# d159-所有人准备完毕开始游戏,使用中介者模式触发
6 L" W- d) q' J; e160-逐层分析,创建玩家数据的传输模型$ _# V1 {5 o% g% n$ H9 X- T
161-创建并初始化牌库,创建花色的常量类2 z' A* S3 K1 {
162-创建权值的常量类,完成创建牌库的过程7 H+ d/ {! e( F4 G- M0 j( P
163-洗牌算法,完成牌库类
8 W" r( X1 y7 k164-创建回合管理类
# R+ T4 s* j! |3 P. ~3 P* p. x165-GameServer(9-12)
+ x5 g2 p- l y' H- f% Z: y3 h% b166-初始化战斗房间,添加第一个方法:转换出牌
# e% E4 X. }2 j0 q4 q167-创建出牌类型,判断能不能管牌
9 X- ~' Y& e' S9 ~# j. }, [& b+ Y168-如果出牌判断成功就移除玩家的手牌
5 N. A3 K- f7 a6 X169-增加倍数和更新回合信息* d% P7 A$ b3 ]. X, C" h
170-发牌
4 |1 C6 D/ N$ j0 W1 I* A6 t' {- y; a171-设置地主身份,创建身份的常量类
2 e: _. L! V. a172-补充一些辅助方法,完成战斗房间所有内容
0 \3 S2 k+ ^* g% {173-GameServer(9-13)5 P- U9 l" o5 _7 A0 S. X! n. [6 x
174-创建战斗缓存层0 R% M& ^$ q) e" f& Q' ^
175-定义战斗的一些操作码; |! `. U' _7 f1 l* L
176-编写开始战斗的逻辑* o: O- H. d7 D0 O7 X
177-关于发送卡牌集合还是卡牌id的解释/ S& \2 f# G" C2 u4 e' u
178-GameServer(9-16)
, [# v0 E' C5 r2 V179-实现抢地主的方法1 D I( _, B4 w j0 J( ?# [
180-创建出牌的传输模型,获取选中牌的权值
6 S9 X& r7 m' q2 M181-判断各种卡牌类型3 U! V2 d2 }: P" S# ~2 ?/ N* Z2 \% z
182-完成编写出牌的传输模型2 V+ }/ m% `; D/ j+ k
183-GameServer(9-18)
7 b6 x, @% m- g4 q& A4 ~1 N184-玩家出牌在服务器的处理
" e- q* ?' c7 Q185-转换出牌的实现+ F- k3 T# ]$ B/ d( t; J
186-游戏结束的处理: |' W- X/ ~' k4 n- T/ y I2 i0 @
187-不出的处理
- b0 A6 V; q/ e8 l( E: H0 h, }* H188-玩家掉线的处理1 Q/ _' G) S' i# D; s. [
189-GameServer(9-20)
5 r' o1 k; e9 h6 h190-在客户端创建战斗的处理类,编写获取卡牌的处理
1 z3 ]7 b, g2 G$ q. k191-创建客户端的卡牌控制类
: p$ d( ]" D& f! \7 U# p% M192-创建自身角色控制类,管理卡牌的创建! n' C3 M: S$ ~- o' [" q
193-创建左、右玩家的控制类,管理卡牌的创建6 c3 [ @; W/ M r H9 x+ ~
194-Card(9-21)
2 ]8 n$ b0 `, L0 |195-给大家录制BUG过程
7 F! [% }6 R6 ]/ B. l196-GameServer(9-23)
) ]- c R) I1 v& e, W3 y197-开始处理抢地主的响应
5 Q# G2 l2 C' W198-发送抢地主请求和抢地主成功的处理
; Z$ S- ?! K* J6 |199-自身的玩家添加三张底牌的处理
. V8 @5 W, h5 V( |200-抢地主成功的处理完毕6 }' ^1 U I! x
201-测试抢地主并修改BUG2 d/ D) s, |& [0 C
202-Card(9-24)
. W: L4 @$ K8 o9 t/ o% Y203-GameServer(9-24)2 F! w4 ], B4 X p
204-接收来自服务器的出牌命令
, Q2 `4 b# V1 S+ @: D8 b205-客户端出牌的处理& p6 l" C' J& A% H- a. Q
206-向服务器发送不出的请求: f5 v1 n0 i# H ]
207-GameServer(9-25)& A4 O! {. r2 o( o9 L7 T
208-Card(9-25)
5 o ^: F. K8 k! q$ O209-给卡片添加碰撞器让他能点击' w$ \6 c1 Y! Q
210-解决出牌BUG
6 p% C! ]9 b) j1 o, \( [211-移除出完的手牌
+ ^) z4 f4 [7 `212-管理桌面的牌显示8 I' U( t# }2 `9 f- d
213-出牌特效声音的播放
5 L% n( f2 Z! l7 t; T; Q214-GameServer(9-27)
, [! W+ X+ |1 x3 Q. y+ ?! W215-Card(9-27)$ j8 y9 a% F1 K( I# W; v
216-测试出牌BUG 上部
! h$ w' z! ?; v$ s217-测试BUG 下部 G3 h# s) |4 h; z: Q. l
218-客户端+服务器(9-28)
1 o7 K- s6 y1 t, R219-创建OverPanel代码脚本# F; L7 C- ?% Q9 `, {. Y; ?7 @6 p
220-通过消息机制表现客户端的结束) |; |8 [* ` {5 w/ d
221-测试游戏结束7 C5 V8 V* T- Q: d2 S
222-创建背景音乐播放控制脚本
: i. x- g8 b6 b223-给前两个场景添加背景音乐
1 i* c% o; \+ r h- ?224-完结与未完
9 U. H; F" @ W* c% s225-Card(9-30)9 O5 [8 I4 \. U% h3 T7 X
226-GameServer(9-30)+ ?$ Y# ^2 O) J! G4 q1 |
227-扩展课之ProtoBuf
2 [- i1 b- H" F% \' k8 r228-扩展课之ProtoBuf(10-15)下载地址:4 g0 A; z/ U# U% [
- D$ q$ i- m4 J& Q
5 }; d9 @! B0 ?+ W
( W* p, f2 q6 k |
|