|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
; p" d( Q0 P1 ~7 C服务器采用:c# 开发
3 o+ i( Z- I! J( Y客户端采用:Unity2017
: S, C/ J, |5 F2 C/ z
+ }6 ]% O. }" k) d0 o A+ A学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。) m9 T" T, u! c6 }& g
课程每天会有更新,难免有一些特殊情况望理解。
' x- t" u5 O) Z# ]9 M' y' z" N个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。
/ j8 o( i# B6 ^" h, ?9 L- P3 _7 t7 _2 w. t4 _. H- ^* a' U+ z
严格意义上来说,本课程应该是两个课程合二为一了。
$ f- l1 z& D1 D* _) z( B$ F" j第一个课程就是《从计算机网络都服务器编程》。7 O) |) }1 i. f; |
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
1 q6 o6 A: I9 R: z; P+ R2 E Y什么是因特网?" N/ C3 w& f$ f2 C
什么是协议?
9 T% Q9 E* h0 N: M什么是应用层?应用层协议?
1 f: C; ^% f1 K* `什么是运输层?运输层协议?( l7 C# Z) X0 z! R) r7 T6 ~3 I2 ]
什么是TCP协议?什么是UDP协议?- r0 G! M) b; R! m$ ?! X% p+ U2 s! B o
等等···
. z9 a1 ^. V) s5 a3 E4 w(很深层次的知识,大家根据兴趣来进一步自己学习)& s2 ~9 ]+ X5 q6 p G' ~6 z, A
知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。, ]+ L- l+ a a+ C) i. v1 X* d
. C! L, x" a- S- z& ]/ k0 V0 x
第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。% T$ Z' x. G+ D2 p4 M
斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。! P0 P K9 s& ?5 x* ?' r5 L5 N
' }2 o- D6 S+ Z; B
4 \) ^: g; I1 y, u
001-课程介绍
, V& J/ l7 t$ B+ @/ R+ ^003-因特网和协议
' t; r% T- d# a" w* D& O5 k0 S004-分层体系结构9 A7 }0 U7 ~/ ~- s
006-进程和套接字" R8 {9 p1 [3 j8 k. K8 w- k
007-运输层协议TCP和UDP
: I% m( c- ?' [9 p# ~. k008-应用层协议HTTP
9 I" ~$ m2 l4 v6 s. A# E009-socket服务端
/ s9 B" A# V I8 c' R010-socket客户端
% q" t$ n( \* j" U5 f; J! R011-验证连接
- W L+ M2 e( f$ X+ o. Y012-SocketDemo% N6 q' r; G" n! a' M
013-实现接收连接的异步事件& L& T9 _6 ~0 l+ |0 D; X
014-添加限制连接数的信号
; q; w4 S* E q, d j' d9 ?015-封装客户端连接对象和编写连接池7 r/ t- }3 N$ X9 u
016-GameServer(8-1)3 x8 u! x/ D- e& ? E" w
017-粘包拆包问题介绍
, M7 H7 Z6 T/ T1 T8 K5 _018-采用包头+包尾的方式解决粘包和拆包0 `: |6 c+ Y2 L9 p8 Y4 G v
019-GameServer(8-3)
6 b: L- v% _) F6 j4 w$ |5 Y; a020实现异步网络接受数据4 z* D n! o9 ^- o( F
021-客户端对自身接收的数据进行解析
4 P( `# O3 H6 {4 V) ]3 a+ ]6 }022-构造SocketMsg负责网络消息的传递% l1 G6 }/ D# ~" l. E2 W1 Q4 _8 ]
023-实现soceketMsg与byte[]的转化/ }& ^8 ^& Y' z6 ~
024-对象的序列化和反序列化
. ^# ~" ]& s3 l3 j/ p025-GameServer(8-3)_2$ j$ J- x% O" c7 w
026-实现客户端断开连接
0 p) z# l6 L, _2 z; J027-实现发送数据
N7 `% ~, o1 n/ O' z6 L028-助学篇:带大家回忆一下所开发的内容; E/ ]* |) y+ e& K
029-抽象出应用层% v; K1 [8 l7 A' y" Z" [
030-GameServer(8-4)
; ^! @# x$ i2 P. W: z031-开发定时任务功能(计时器),编写任务模型
! X4 h* z$ Y8 \3 S032-创建计时器管理类,监听到达间隔触发的事件) l/ i: c1 _! l5 O% S6 t% {, n' {
033-控制定时任务(计时器)的触发时间
* T' c8 p5 ` a034-开发线程安全的INT类型9 C# {* c9 h( S( s& h1 @
035-GameServer(8-6)
& D! O4 U' ]0 j- l) o, k036-实现单线程池
. f/ d1 b4 b9 E4 y7 A037-Unity2017下载$ ~& k+ ^2 ]8 p
038-创建工程导入素材1 t$ T3 A* N6 G/ Q$ k
039-Res
1 G. B$ v/ u) |1 j, ]040-Card(8-7)
. _" S5 R& ^. u% C. [+ j1 n041-GameServer(8-7). b- _. G+ [1 J. @: i
043-根据策划创建面板
( V; r. e8 Q; j+ O044-导入客户端框架,创建PlayPanel脚本. B# W$ b3 P& I' b$ ~# f G& o G
045-完成开始面板+ |( c4 ?$ r, A7 \, n# g7 m
046-完成注册面板
: _& T! W" S. F/ {, D) M047-Card(8-8)
& \7 M9 o4 V7 b1 s049-服务器架构介绍
7 b4 S& ?* L. {( q050-按照架构实现服务器
/ u0 Y9 ^) ^3 U: Y* `051-在客户端封装Socket,使其连接到服务器
b; }/ K+ ~( Y# g052-测试客户端服务器的连接
, H3 P! e" O1 p3 K5 N053-解决BUG
+ F+ }" R9 K6 {$ c& e( L% x2 S- \! M054-Card(8-9)
' ?( \2 f) ]. F+ H( W' m055-GameServer(8-9)* K( S" F7 U& p1 A7 U0 q9 D# S
056-修改客户端的链接方法
0 \ h; v$ i2 [% T3 w( K056-修改客户端的链接方法_20171124142335' Q9 p7 Y, i! N# i: d
057-定义操作码、子操作码,演示客户端如何给服务器发送请求
; B( q( E5 q5 L* I& F058-测试数据传输是否正确
" [1 d. a* U" X9 G- V* W059-Card(8-10)/ a- P- x2 {9 }3 P' l: N8 W
060-GameServer(8-10)
0 c8 H' X6 v; n& B' ^8 O4 D061-创建账号缓存层,实现注册的一些方法2 l" e$ [" I7 ]- K8 o/ v4 |
061-创建账号缓存层,实现注册的一些方法_20171124142334% @, B+ N1 Q! }& L
062-完成账号缓存的所有方法
2 L" p" c) y1 O0 o6 F9 n3 P( P0 L/ v062-完成账号缓存的所有方法_20171124142334
( n- |5 b3 u+ t063-实现账号逻辑层
$ _7 [6 z5 r" z( B- r2 _2 `* S064-解决今日BUG, d* Z* p! O- }( D9 D
065-Card(8-11)
/ `1 ~: u% l4 K066-GameServer(8-11)
8 z! S, Z3 L, r& R- |$ c067-开发提示面板
& w3 T4 t6 Z1 a/ ], Y; F( f068-给登录和注册面板添加提示# K. @% i) h- ~ |! k6 ]. a% Q
069-处理接收到的服务器发来的消息、优化发送网络消息的方法" ^ z/ h: V5 T( P" c5 x, j: v
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
* R. x$ U) U5 \9 I071-优化服务器,改变传输结果6 h# A3 u& _ c" W. g* Z" R
072-Card(8-14)5 c# ~ V3 I! N: j- {, l: B
073-GameServer(8-14). t! W4 w" _1 j
074-初步实现场景管理器,融入到框架中
. J* X' }9 `- @: p075-增加当场景加载完成的时候调用的方法
A# m! R1 J- F+ R4 v }076-实现登录成功跳转场景
: r& p( a- G# Q" W077-设计UI之主界面的信息面板
& w. C" z9 c" X5 C3 o4 I1 X! i078-设计UI之主界面的匹配面板% p |- r# b( {( f3 D& y7 P/ b
079-设计UI之主界面的设置面板8 d* C2 p7 n/ ^. U
080-设计UI之主界面的创建面板6 n5 M4 A! C& R1 @# B2 ` n
081-Card(8-15)' r, o) \+ [9 A& v: |/ r' H
082.编写信息面板
$ ?0 F0 n' h D0 R- g083开发匹配面板
5 |8 l! U% I( s: v& ~+ k084.修改默认创建的脚本: k- u7 P) a& }( @8 m% t* B
085.开发设置面板
* r: \: F" A' E086.开发创建面板4 w6 [( U! j: s1 ?9 A- {, R
087-Card(8-16)
8 V& x0 [) s W1 ]088.创建角色数据模型" }8 x9 G) o" |* T: {; ?7 v: Y( R
089.开发角色数据的缓存层3 o/ B7 i4 n0 R
090.完成角色数据缓存层
. _& e! L9 E& f& k* m/ y* @091-GameServer(8-17)
0 I$ E! v" ^# B3 K* R7 b9 o8 Z092创建有关角色的操作码0 N( [; r0 @# w1 o7 w/ V4 t- |
093.实现用户逻辑层1 F6 P' }4 x2 u y% h9 M
094.向服务器获取信息,在客户端创建用户处理类
* S1 P9 ?4 J! Q% r+ f095.客户端处理获取角色信息的响应
, i& Z, Y# `3 @) q096.保存接收到的角色信息并且处理角色上线响应/ Y5 n6 J4 S x+ ~9 @
097.发起创建请求和处理创建响应
( c9 R- T" u0 B- i. |) P% B2 o098.演示本日BUG
: q+ a5 w L, H# ^& D099-GameServer(8-20)5 o& V! i' e, Y7 Z, v4 y
100-Card(8-20)
# B% S6 D9 L2 T( b6 b101.更新客户端视图6 h; |7 v2 y/ @( {7 n, B) y6 G; m
102-编写匹配操作码* u# w3 `6 R* @" A9 ^, A6 }! z& \
103-定义匹配房间的数据模型) p3 X4 G! l+ j- Y
104-创建匹配缓存层,实现进入匹配队列2 G- O! R# J) \+ o/ X6 R8 |
105-实现匹配缓存其他所有的功能
8 ?6 V A0 y, ~. I106-创建匹配逻辑类,实现进入匹配房间功能 Y% E7 M0 k e( F# i( F
107-优化服务器之群发消息1 e S2 }* W. W q( P
108-创建匹配房间的传输模型,在逻辑层进行构造/ W9 U0 [3 k6 J, x. c; e% I
109-实现离开匹配房间功能
3 E' A* n5 z0 ]% ~6 v3 K110-GameServer(8-24)1 a6 {; \2 U; ^7 P9 ?1 d& k; ~4 O
111-实现玩家准备
3 Y: a; d& c9 A1 @: a1 s' h112-在客户端发起匹配请求
; J+ p3 m6 k8 F) Y1 r3 J* \3 Z9 e113-GameServer(8-25)
' D1 O+ P$ s$ u* O114-Card(8-25)
& m# g4 V+ n# ]115-创建MatchHandler,接收服务器的响应9 i: e( n- A) p1 Y2 d9 w* b8 Q
116-保存房间信息,他人进入房间广播处理2 _" ]& } o0 d9 M# n
117-玩家离开! L+ o2 b6 Q1 b# a/ G4 Y
118-玩家准备和开始游戏的处理
& s6 K% c/ Q0 d! h4 {% ?119-GameServer(8-29)* A3 _ Q" S. m7 x
120-Card(8-39) (1)9 s% Q2 |4 W. O1 m0 k
121-搭建战斗界面的左、右角色状态面板
! V3 | m! q2 N7 P122-搭建战斗界面自我的状态面板
' G8 p# p. @0 O3 C123-搭建战斗界面上边的底牌面板. I" F/ N {0 G% E! G( U s
124-搭建战斗界面下边的快捷聊天面板
6 k$ P9 o0 ^, q& N! z125-搭建提示面板和结束面板/ e+ T5 F" }9 z9 P+ f& E2 x
126-Card(8-30)! I/ u$ X, z5 Z
127-创建出牌点,实现进入房间按钮功能' i% [2 j' z2 }3 Z
128-控制底牌显示,编写代码+ B( f5 \' K* J t s% Q i9 z' T
129-在服务器工程内创建卡牌的传输模型类
3 E! {8 H, A' I1 ]0 {1 G130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)3 Y) A, j5 Q$ n. b9 X
131-分别创建左、右角色的状态类(有破音)2 k* N4 Q4 l( R
132-ard(9-2), g" T% A: H6 E8 n% u( m+ A
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
. G4 K; S/ F* D( k' }: W134-如何控制玩家左、右玩家位置?(有破音), J. W7 }) C Q! O8 k
135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
, t/ x. I) w! j6 ]/ W136-Card(9-4)
* E7 v0 P# u. ?: {137-GameServer(9-4)' x5 M& M! i, Z
138-解决左、右的代码重复部分
' q' U& K6 Z$ y6 Z139-创建自身的状态面板(有破音)
% X# e& Q' Q0 H( g' |140-完善自身进入更新状态面板5 m% V6 s: P8 m+ Z8 V* G5 P a
141-CardGame(9-5)
, ]# t, e2 m) g) [! x142-找之前的BUG(一); d O8 j' \, B S2 X( e6 \" U
143-找之前的bug(二)
. x+ V9 b+ a1 C2 y144-Card(9-6)
1 p2 e1 C: q4 S2 X8 s145-GameServer(9-6)9 \" \( ]) c9 K7 v. h* a' B
146-发送自身准备的请求
: z$ Q. _0 @* \6 V4 u: y! F, Y147-创建下边的面板的脚本
# _2 x, w6 s& F6 s/ }) l/ V148-Card(9-7)
+ _- u* J+ s9 T5 [8 b" j# w) b! [149-创建聊天操作码,在客户的发起请求0 j8 q0 { H3 v
150-服务器处理聊天的请求,创建聊天传输模型5 _1 A J5 m$ S" J$ \ G9 g
151-创建聊天文字的常量类# u9 v; l& t; l, h6 I7 n
152-Card(9-9)
|5 m+ A/ m% ?( g153-GameServer(9-9)
5 R W4 N2 m9 G/ p) ]1 \7 F. L9 O154-客户端接收响应,显示聊天文字
2 Y0 U' y- E9 Q# P1 ?9 S155-聊天声音的播放
1 c4 z {" ^3 i1 \" q+ w2 i156-测试聊天BUG
( O! E. ?2 j& j6 I; I2 y2 y, c157-Card(9-10)) A. b0 Q6 ]8 n* ?5 e2 P# ~
158-GameServer(9-10)
0 [ j7 o7 {( x159-所有人准备完毕开始游戏,使用中介者模式触发9 P( e4 A* a2 x+ C1 F4 M
160-逐层分析,创建玩家数据的传输模型' ^ l$ ?. M, }. F1 J! k
161-创建并初始化牌库,创建花色的常量类9 Z2 v: \+ }% f7 J- W" D
162-创建权值的常量类,完成创建牌库的过程
B( A9 t2 f0 c1 d- L3 Y163-洗牌算法,完成牌库类
; }9 H( e: Z- P, q; U164-创建回合管理类- t+ J! _2 [% C: W
165-GameServer(9-12)6 D$ U: `1 C2 q
166-初始化战斗房间,添加第一个方法:转换出牌
/ }* K( u n: i" p167-创建出牌类型,判断能不能管牌
, N; }/ g& q! R% I5 X. F/ T168-如果出牌判断成功就移除玩家的手牌& O6 @6 a c6 k7 D; \1 i
169-增加倍数和更新回合信息 k% m7 v! K) q
170-发牌
4 \4 L2 \( m5 q4 Q' |171-设置地主身份,创建身份的常量类
* O8 Q# l3 T" J" u8 X% U# @172-补充一些辅助方法,完成战斗房间所有内容
+ ?8 x7 R$ v% _3 [- T173-GameServer(9-13), l7 b4 B' q4 }0 E
174-创建战斗缓存层
$ t; E- |6 r, b# ~" T) Z) w* e175-定义战斗的一些操作码& V* c) h7 d" E3 q+ q" R
176-编写开始战斗的逻辑4 t4 ?: i, f8 Z: c: P+ V) h, [) W# r0 ]
177-关于发送卡牌集合还是卡牌id的解释
2 U/ _/ c" H6 L" h' S% T178-GameServer(9-16)
5 i% C. J' I. e9 S! `3 z% G179-实现抢地主的方法5 i R$ q7 _ C# C4 g0 u4 V
180-创建出牌的传输模型,获取选中牌的权值
; ~! o( q* s# O2 T% I! {+ @9 i181-判断各种卡牌类型
1 E. _: i: ?) S6 ~7 z3 h182-完成编写出牌的传输模型
5 ]5 h9 l+ ?3 [$ m183-GameServer(9-18)% q& [7 i0 `" n( q7 T6 r" [: q
184-玩家出牌在服务器的处理* t3 W1 [: x5 a9 {' j' l
185-转换出牌的实现
0 F" L# L4 \0 j5 r: e3 O, B186-游戏结束的处理
6 s+ ~: ~+ |# E1 A3 c187-不出的处理5 C; f( E/ |' ~2 E6 `
188-玩家掉线的处理
9 j3 X! b; E2 @3 v189-GameServer(9-20)
1 D A" c4 U8 ]2 O# K6 o0 O190-在客户端创建战斗的处理类,编写获取卡牌的处理
" u5 J, ?& `- @, O$ K. J191-创建客户端的卡牌控制类 X A6 u+ t2 h' q0 w
192-创建自身角色控制类,管理卡牌的创建
; `5 }( _/ A! P! ^. n3 D" d+ L. v193-创建左、右玩家的控制类,管理卡牌的创建
2 N# p) N$ G+ Q. b5 M. f+ g L194-Card(9-21)0 ^ ^" B1 H, q: q5 j
195-给大家录制BUG过程
5 R6 {5 o* i4 x7 g7 p196-GameServer(9-23)
, P' J0 f4 |, \$ n. l0 a6 |197-开始处理抢地主的响应% Y8 L4 t w* b& m" T3 p5 B# u! c) |
198-发送抢地主请求和抢地主成功的处理
4 k9 `, _, d$ E7 {/ S199-自身的玩家添加三张底牌的处理4 K( G% S' Y% H. J; ]2 }% V
200-抢地主成功的处理完毕0 I; W3 @: D5 Y$ v8 E& }1 d
201-测试抢地主并修改BUG* \) C! U8 e* }' l
202-Card(9-24)
8 L9 G2 S" Z6 \% e+ g203-GameServer(9-24)
6 \* e2 h: V! t5 E# W# D) P( c* ~204-接收来自服务器的出牌命令' T/ W2 m- `$ n4 C4 H N, D
205-客户端出牌的处理
$ m. V$ G) |% _5 L2 }9 i! S- A206-向服务器发送不出的请求8 m W+ [8 I8 t; O
207-GameServer(9-25)6 e0 h1 s' G: X- \+ k: A, |
208-Card(9-25); S; D, S" J# Z
209-给卡片添加碰撞器让他能点击
6 t1 X' N1 ]7 l210-解决出牌BUG" N) C& [) H. i% @& {/ d
211-移除出完的手牌
/ T: p/ `4 r# X/ p {2 d212-管理桌面的牌显示" _* _6 c9 ]) P: m( k$ `
213-出牌特效声音的播放
# s: l$ v" ?6 u7 S0 j214-GameServer(9-27)( ` _ j% O- n/ W9 ~7 J* _& D
215-Card(9-27)
& ?' N6 W4 P: q s6 H2 R. p216-测试出牌BUG 上部6 E8 w( Y* N" n3 i4 P6 K
217-测试BUG 下部
" {! ^6 o* w) |6 n218-客户端+服务器(9-28)4 }% g0 N& z/ z* T8 F
219-创建OverPanel代码脚本5 r! D7 f, u0 l; f- u9 l' T' g
220-通过消息机制表现客户端的结束
. a* L; b7 A3 u# s( c: q; W0 ~: N221-测试游戏结束 d% Q+ G: g9 _" J$ C- L1 f1 H0 R- _
222-创建背景音乐播放控制脚本
/ {$ V. w) x' B223-给前两个场景添加背景音乐
: y1 { _+ |% g; y4 p& a8 d- i224-完结与未完+ i0 N, T1 J2 _% O4 `9 E4 | S
225-Card(9-30)3 U2 u7 b$ f3 ?, Y9 y$ O1 T& M+ F
226-GameServer(9-30)
$ z- {4 V& Z4 p1 Y227-扩展课之ProtoBuf
, x. [9 w/ \/ M! |( F- o0 Z228-扩展课之ProtoBuf(10-15)下载地址:
8 I, S! p4 ]8 A5 T5 z* u
0 S) [5 s5 a1 {1 M( D( Y/ b
' }: K' v7 J9 L3 k
( c' y8 S+ ^/ f% u, q/ Y |
|