|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。# S( P3 o3 Y$ M, N
服务器采用:c# 开发
1 l! j) l3 N4 V0 g- u3 |2 |3 V客户端采用:Unity20170 {9 m# B9 ] s6 e- O! J; B' F% E
8 q) g2 v$ Z/ x! \# Z! u
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
2 o/ U! L1 r$ `6 k( }- }$ \5 Y; v课程每天会有更新,难免有一些特殊情况望理解。
5 |$ H6 E8 A" C8 I1 w个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。" k/ Y! s% n$ h& S
6 j% U: ]" w0 s7 C严格意义上来说,本课程应该是两个课程合二为一了。
$ y# B- v T0 J2 `: }8 u% a& I% n. U第一个课程就是《从计算机网络都服务器编程》。
* V" O4 X6 X7 m6 `关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
) C% `# p7 u+ w6 A什么是因特网?# z( b) t1 R7 s
什么是协议?
5 }. Y: Q) _* x* H: {* {7 A什么是应用层?应用层协议?3 j" e5 X0 }: p7 l6 x
什么是运输层?运输层协议?
% |4 Y: P0 |1 K# O8 p8 a什么是TCP协议?什么是UDP协议?
" P/ ~: E( F/ p8 s等等···# x+ e& n+ X" o+ r# e; S4 ` q2 P
(很深层次的知识,大家根据兴趣来进一步自己学习)
7 z/ Q8 |( L) A1 r知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。
) e9 v& R" T6 W/ I* Z9 D2 O
. m& h3 M' ~; j3 t" ^第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。0 H% S' }* ?6 `! Z4 |3 I0 K$ b) T
斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
' z$ M1 d- Q) g0 L; w7 t% ^
6 s0 [' W9 t; y4 o) h' k* s1 a8 J. ]# J0 W; ^* N0 V5 } M
001-课程介绍
; A# }6 I2 Z$ I7 l) s2 j' l003-因特网和协议
|. S* j4 x# f3 m* Q" d004-分层体系结构
0 }' k( N" V- A- U" G006-进程和套接字
}5 e" {, B3 p. `3 q4 G$ c) P007-运输层协议TCP和UDP
8 g$ Q9 u+ r: b+ ^: c7 O008-应用层协议HTTP9 n$ T5 z: K" [" i
009-socket服务端
7 T% R! c4 [% T" w010-socket客户端/ w9 q m4 r- E- L; M# @
011-验证连接
. V; `( J- d9 U/ G h: L012-SocketDemo
$ [$ R" p1 M( n5 W013-实现接收连接的异步事件
, h" I, S. e& X. S( n014-添加限制连接数的信号- w" N1 r) G$ s$ s. Q& u4 V
015-封装客户端连接对象和编写连接池
' b- J" ~) n' l) t016-GameServer(8-1)
+ ~8 h8 I( O V, }; o& _017-粘包拆包问题介绍
9 ~. b( b Z* A, p. T2 W018-采用包头+包尾的方式解决粘包和拆包3 O# b9 y. g0 [
019-GameServer(8-3)3 ~3 L" _$ L- \
020实现异步网络接受数据
E/ B4 z; ~; n7 s. T* a. a021-客户端对自身接收的数据进行解析
# ^& m9 e6 d/ H$ j( h: w }022-构造SocketMsg负责网络消息的传递4 p6 V' }" M; | |+ D
023-实现soceketMsg与byte[]的转化
8 X, D; h; C2 S- `. _024-对象的序列化和反序列化
! C5 K# P* p9 [. Q025-GameServer(8-3)_2
7 n; j, Y* k; R& [; F0 {: z026-实现客户端断开连接
' n) u) }. O7 |, ~! x; V% x* u, a( M027-实现发送数据9 c8 I# L2 y2 C/ \3 z1 C
028-助学篇:带大家回忆一下所开发的内容
" _$ _+ R2 T) V& I; y5 b) n. ]029-抽象出应用层
( C0 a0 n1 m0 r3 A2 h+ g `; U }030-GameServer(8-4)
7 f8 i" V2 Q i0 t031-开发定时任务功能(计时器),编写任务模型
) P; r5 V5 ?$ U. k032-创建计时器管理类,监听到达间隔触发的事件' e! A- B R' M
033-控制定时任务(计时器)的触发时间
2 }( |5 p( W1 s4 ?& M2 I034-开发线程安全的INT类型
/ `/ L$ t" e; R8 }035-GameServer(8-6)
. }5 j! ?* o( U) n' D2 \036-实现单线程池
" } M* f# S7 G" ]3 h037-Unity2017下载
( g+ Q: o, s- f# Y6 Z; S038-创建工程导入素材& r5 S' r. A! k& v* v6 T; o2 V
039-Res- x) z5 m: `; u/ b2 M
040-Card(8-7)
6 [" \6 t, Q. D8 x& l7 D4 T041-GameServer(8-7)
, J: u* Q9 z" r8 v043-根据策划创建面板+ b6 k) Y& m% P6 P, t
044-导入客户端框架,创建PlayPanel脚本 V/ @) _6 a2 H+ F' E# H$ ~
045-完成开始面板
- D' l: F3 w) w3 W( O d$ `046-完成注册面板
0 L& b; g7 h7 T" v& B4 K047-Card(8-8)* {% x6 z# C# P( [
049-服务器架构介绍+ Y9 S" f% A7 G, P. Q
050-按照架构实现服务器9 ^( Q( H, A/ a% z# o/ k
051-在客户端封装Socket,使其连接到服务器0 ~. H! `$ q; ]7 H: Q, N, I0 ]9 R
052-测试客户端服务器的连接
: E9 p! m) _7 {) s053-解决BUG
6 U S! j( C' {* @8 x+ n# ~054-Card(8-9)
- J. ^, \6 i7 r4 d055-GameServer(8-9)
, ]; R6 R5 ~$ L" R7 t5 U056-修改客户端的链接方法; I& K3 g$ I$ a5 d/ {
056-修改客户端的链接方法_20171124142335+ e& i) v+ _. W1 n+ q, k
057-定义操作码、子操作码,演示客户端如何给服务器发送请求
/ w( y1 s) x1 _) S+ d. M058-测试数据传输是否正确& j& h5 r: O- b/ D- g* W
059-Card(8-10)
0 S+ Y$ p: d; \- S( p, }060-GameServer(8-10)
' d7 q8 y" {- T1 \ {061-创建账号缓存层,实现注册的一些方法
[3 q- z* F) w7 X: {% M) p061-创建账号缓存层,实现注册的一些方法_20171124142334* X0 e' L& l+ g! c5 D' U2 z
062-完成账号缓存的所有方法
# J% b( q3 N! g062-完成账号缓存的所有方法_20171124142334
$ S4 L7 `! A' Y3 o063-实现账号逻辑层" y2 L8 o1 U1 y7 t; p5 u
064-解决今日BUG
# U4 e0 B: f0 B5 i5 |0 c9 w E+ w$ U065-Card(8-11)
2 p; o7 {' K2 J066-GameServer(8-11)7 I, N, i; ?6 U5 J" m; h
067-开发提示面板
3 L' Q9 a4 n! v0 Y8 b; R068-给登录和注册面板添加提示6 z* J3 b; C4 `: W1 t
069-处理接收到的服务器发来的消息、优化发送网络消息的方法! Y" S1 [( f W+ ]( v# @) E
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)1 U6 T6 |8 F2 c7 t
071-优化服务器,改变传输结果& j% r1 |! Y& `! O1 v; I
072-Card(8-14)
% l# e# c. Q& E% H073-GameServer(8-14)
: @) H( m' a7 A074-初步实现场景管理器,融入到框架中
' u/ f! s F2 c: P( b# e075-增加当场景加载完成的时候调用的方法! |/ N( I1 D% O; O5 x7 N
076-实现登录成功跳转场景3 P% p8 ?$ o$ I9 u! G. @
077-设计UI之主界面的信息面板
( Z% ~4 L( r P$ B078-设计UI之主界面的匹配面板
- w+ H1 b9 o, O' `079-设计UI之主界面的设置面板' X& \# f" F$ Z0 U
080-设计UI之主界面的创建面板
- D$ e# ? V( z3 g. k081-Card(8-15)
6 V) W+ ^: E* E3 R5 W' N082.编写信息面板
; w+ L# m- f8 u7 N4 e* o0 d( d5 Q083开发匹配面板' X& R: f, h6 u
084.修改默认创建的脚本
0 T" M( ~/ V \2 C3 B7 v7 S: y9 D: ]- n085.开发设置面板 s" K( y! f! O. `* m! |
086.开发创建面板
A& U5 l5 }% k) f4 y087-Card(8-16)
; j; ?4 u- f9 E( q/ _3 v. a: I088.创建角色数据模型% \( _! X8 I, F5 l6 x
089.开发角色数据的缓存层
8 u3 p8 T. f3 }; s0 [090.完成角色数据缓存层
1 X, i- A6 q9 c" ]+ P! X091-GameServer(8-17)
' R# s5 Y- F, h092创建有关角色的操作码1 x- t. b# c# U2 I C( g
093.实现用户逻辑层
& z8 P- _* e$ [2 c [8 s u* L/ [094.向服务器获取信息,在客户端创建用户处理类
5 X) O2 ?9 E- d2 h* H095.客户端处理获取角色信息的响应
( M/ b# Y% i6 | N3 K& m096.保存接收到的角色信息并且处理角色上线响应+ {" n) i W0 u" z
097.发起创建请求和处理创建响应' j% R1 [1 I; Z n; N2 C; Z
098.演示本日BUG
: n6 k! @, Z% G4 m099-GameServer(8-20)4 F3 t, t9 D. J- H. Q. r( ?; Y s
100-Card(8-20)1 Z z$ k9 r8 t( H
101.更新客户端视图
" d! z5 Z) P$ ?) }) T102-编写匹配操作码
% s! T7 V8 o/ ~+ q0 P+ m" j: O2 Y103-定义匹配房间的数据模型
0 X! o; ~8 c# a% }& _8 U0 K104-创建匹配缓存层,实现进入匹配队列" G! y; |' j5 \. }
105-实现匹配缓存其他所有的功能 q1 l6 z% p d o; m6 {
106-创建匹配逻辑类,实现进入匹配房间功能
* Y. J4 x1 ~9 a+ C8 d107-优化服务器之群发消息9 X8 X; {) W( C$ S4 I/ x# _
108-创建匹配房间的传输模型,在逻辑层进行构造* R. d+ |+ `, z% g- e
109-实现离开匹配房间功能
8 c L! R: V x% A9 G110-GameServer(8-24)
5 C% e# }/ `1 O! {) J111-实现玩家准备
; i* T/ o' ~8 k9 `9 \; P112-在客户端发起匹配请求
. c H: W( S' `( x113-GameServer(8-25)
' p, L S' L f114-Card(8-25)
8 L7 V& a2 g* s4 ~4 q. v) `) {115-创建MatchHandler,接收服务器的响应
* j+ R4 M+ I, E: S& K# M B116-保存房间信息,他人进入房间广播处理
6 {8 r) L+ q) p; W. v+ v/ K117-玩家离开4 j: E0 c" S+ i. l* Q
118-玩家准备和开始游戏的处理
" X2 `/ K" X2 r# [1 y+ O119-GameServer(8-29)
" a8 K1 p5 Z* G$ ^7 c. @120-Card(8-39) (1)6 x2 {8 ^- Z" g& F' f
121-搭建战斗界面的左、右角色状态面板
1 ~) r) X, O# \% v122-搭建战斗界面自我的状态面板. z1 u, a9 x- o; ]4 c
123-搭建战斗界面上边的底牌面板7 X6 W. g) j9 J1 o% ^% o6 n
124-搭建战斗界面下边的快捷聊天面板
6 e `' j' r1 s/ Q4 V0 g! K125-搭建提示面板和结束面板
6 [" b0 _" ~+ G4 |$ K n( M126-Card(8-30). l: d# P, v/ u4 {. B
127-创建出牌点,实现进入房间按钮功能
& r' D }! Z% B* @9 S$ t128-控制底牌显示,编写代码
/ ~6 s' B/ ~, k y. J; c1 [129-在服务器工程内创建卡牌的传输模型类1 ]+ U2 }" ` \& }
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
# t3 |; q# t+ ^# r( P131-分别创建左、右角色的状态类(有破音)7 r% m3 t2 E. v, Q* f' J; f; ^% `% o
132-ard(9-2)
- [7 i) k7 x: O: v; C8 C133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
w8 p3 l4 d; P$ h1 x/ h6 x134-如何控制玩家左、右玩家位置?(有破音)! n! @0 ` g$ g# R( Z
135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
3 u* e6 S' ^! ]6 h# j" ]7 o136-Card(9-4)
& H( h3 P! b* v& G% l137-GameServer(9-4)
4 w4 `; p/ t$ L! Y4 Q0 s) B138-解决左、右的代码重复部分
9 w1 S L B* j+ O6 \139-创建自身的状态面板(有破音); s9 z* m- m& U) `2 z& H
140-完善自身进入更新状态面板9 Y7 x; U" D: [0 @6 g
141-CardGame(9-5)
; ~$ ~3 @2 D Z142-找之前的BUG(一)
; K. B4 {2 J' n143-找之前的bug(二)
9 E6 C6 y+ d( d0 e0 F3 J144-Card(9-6)
- O5 }1 f; R& @3 e7 L145-GameServer(9-6), i0 I1 G, Q5 {- R$ \
146-发送自身准备的请求: r5 T" f9 G# \' [) z- R# Z: \
147-创建下边的面板的脚本2 ?$ a; \: ]& d
148-Card(9-7)3 r0 ?$ X( N; h/ E4 i
149-创建聊天操作码,在客户的发起请求
& c: {, |4 O# Y; N" O150-服务器处理聊天的请求,创建聊天传输模型
) i6 t. V+ [" m151-创建聊天文字的常量类% E6 m- Y0 y; o3 M
152-Card(9-9)
) c! H0 `* Y6 W+ T; r: S+ {153-GameServer(9-9)6 K) S- q/ [6 x9 q/ e' t) y
154-客户端接收响应,显示聊天文字
! t/ I0 J1 U8 e155-聊天声音的播放5 ?1 t' D4 [5 K5 V+ v+ X3 g. h
156-测试聊天BUG" b& j4 U4 N% V+ f, A# k# Q: }0 v7 V. P9 R
157-Card(9-10)
% d$ l. W& O x. k8 ^9 n( }0 N# u5 G158-GameServer(9-10)' S( Z6 d, j# d6 [
159-所有人准备完毕开始游戏,使用中介者模式触发
4 v# q; m4 k7 Z* T& l! [- h160-逐层分析,创建玩家数据的传输模型8 ]& \2 l6 F/ w6 o! V" t2 s
161-创建并初始化牌库,创建花色的常量类8 d) x: y! [7 {! Q/ g& L$ q
162-创建权值的常量类,完成创建牌库的过程
. l" h% `, `$ V/ R8 u163-洗牌算法,完成牌库类
+ X7 m( `# ^& e! ]" [5 I+ F. q0 a- R: @164-创建回合管理类, j( a2 o0 B2 B3 ?9 ?! U
165-GameServer(9-12)
9 c: E* {* O- Z; W166-初始化战斗房间,添加第一个方法:转换出牌
+ ]. }4 Z9 t* R; A, A; R. n3 N167-创建出牌类型,判断能不能管牌
7 n$ ]! j4 _& S6 W168-如果出牌判断成功就移除玩家的手牌- g ~8 J m0 R4 I$ q
169-增加倍数和更新回合信息
* |4 E: ?2 d# d6 @; a170-发牌
* D, b# U& y, e171-设置地主身份,创建身份的常量类% `9 ]% T# R5 g7 f% F9 ^. O4 D
172-补充一些辅助方法,完成战斗房间所有内容- O: o3 c {# L4 `! N
173-GameServer(9-13)
) Q7 g) t$ ~6 e# s' W) N174-创建战斗缓存层
% q c- r5 _- C/ _175-定义战斗的一些操作码
( X: g: H1 `) s' B! P9 o176-编写开始战斗的逻辑% S) a/ k( m% Z: p* }
177-关于发送卡牌集合还是卡牌id的解释
" U& Y! X& e @3 f' a178-GameServer(9-16)0 q) f$ \- O- ]+ u/ z& g( s
179-实现抢地主的方法1 U) S6 _1 d5 V5 B+ h1 |" p4 o
180-创建出牌的传输模型,获取选中牌的权值
. K: U: X5 T w8 }1 }2 W181-判断各种卡牌类型
) i! A# @( ?+ {. b4 L182-完成编写出牌的传输模型4 }% l: T, p! J/ b" j f
183-GameServer(9-18)8 e& G; \2 R9 l }
184-玩家出牌在服务器的处理% q! s, [. x* w1 w
185-转换出牌的实现 {5 u: H6 W, L/ J
186-游戏结束的处理/ e8 O6 [4 {0 m9 f, ^
187-不出的处理
6 [9 C/ a4 c" M188-玩家掉线的处理
+ m/ G/ @' ^; W- d189-GameServer(9-20)( B$ D7 ?/ }2 \! D; R7 f
190-在客户端创建战斗的处理类,编写获取卡牌的处理
' i+ }8 J, d P5 _& o1 R191-创建客户端的卡牌控制类0 x: A N) `# {. A8 J1 U8 E4 j! t
192-创建自身角色控制类,管理卡牌的创建
+ n, `( }/ K+ i" X4 i193-创建左、右玩家的控制类,管理卡牌的创建6 ^. C9 Y; ~5 E' I Q
194-Card(9-21)
6 j1 @: ]7 d: j- \! M: H! _; x195-给大家录制BUG过程- D# ^" u8 F% G+ _# j
196-GameServer(9-23)
! G; r$ k7 w' P7 `- u197-开始处理抢地主的响应1 ^, }8 o2 F+ P0 s( O
198-发送抢地主请求和抢地主成功的处理
5 x% V! ^( g: M7 }0 J, U" }0 k199-自身的玩家添加三张底牌的处理
% L- t+ z1 u' q0 N) F9 x200-抢地主成功的处理完毕8 B6 P8 D2 I3 ~1 c" ^( F
201-测试抢地主并修改BUG
6 ~/ V9 t3 j0 x6 C% ?. @ ]202-Card(9-24)
% j, v7 p- p* g7 t2 ?203-GameServer(9-24)
( V e6 {" g: e* p204-接收来自服务器的出牌命令
3 |6 J6 T; A3 ~: v& Y0 A k205-客户端出牌的处理
7 m3 K f$ Z, w }/ a4 X206-向服务器发送不出的请求
7 w4 S0 k) x- c6 L, ?. a207-GameServer(9-25)" B3 }' A( J) W) a+ U! f
208-Card(9-25)( e& [* Q0 j6 g
209-给卡片添加碰撞器让他能点击
2 i: T& g. Y% t! m210-解决出牌BUG
# [2 ^" A% q5 v8 d# x211-移除出完的手牌
% }4 [+ C1 Z7 C4 [9 g L! _0 x212-管理桌面的牌显示9 l% @9 A9 O! e6 l7 _
213-出牌特效声音的播放
4 d3 p% {( Q5 v6 W- a8 Z& f214-GameServer(9-27)3 x) k# s T; ?9 D2 F
215-Card(9-27)6 z% c7 Y+ t& {+ m) ^4 z% B$ ~
216-测试出牌BUG 上部. _/ q3 l; P6 y+ j; g
217-测试BUG 下部
( N* C, r2 m' G! |1 T) F$ q218-客户端+服务器(9-28); {2 w# N0 H. @' h# F
219-创建OverPanel代码脚本5 b% N& D8 e/ E- b9 H3 Q/ Z
220-通过消息机制表现客户端的结束
: g9 ?6 _- ?4 j8 [* D& F1 [- N, ]$ a221-测试游戏结束
- b, _' _6 {& X' w# A/ {' ?222-创建背景音乐播放控制脚本
# ?& [( R* ?, y5 a223-给前两个场景添加背景音乐) s' Z3 d d+ ]
224-完结与未完& Z- i4 V- M' I7 \
225-Card(9-30); q( c) G9 L9 s
226-GameServer(9-30)8 a# i8 @$ p2 J3 ~" a4 q
227-扩展课之ProtoBuf q1 K. V6 A- G. I! m
228-扩展课之ProtoBuf(10-15)下载地址:4 m, L$ s. ^6 K' j) U
0 y4 |" Z( E2 @) w( E/ c9 d
& L* Z2 V& z) I3 K4 y" I& n3 e" n
; z" c$ }$ f4 h# ]- b4 h- q) y |
|