|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。5 K- y1 R& `/ N+ t
服务器采用:c# 开发
+ b6 i7 w8 j0 L# L) ~) H% g客户端采用:Unity2017
6 K2 g" B! n8 a7 k4 `& q: W! F1 F A/ D0 V- r8 @, ~, J+ b- T# J
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
# Y" t! x, k4 X2 Z2 X课程每天会有更新,难免有一些特殊情况望理解。
/ M( f" L: F& U: K/ Y个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。; K; X2 v3 R+ o. r
8 ]6 w/ x X3 R6 i! N/ ]* K严格意义上来说,本课程应该是两个课程合二为一了。
5 Q9 e1 e6 U7 ?第一个课程就是《从计算机网络都服务器编程》。
$ _; P7 r* p% }- ]$ s关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
. |& o: F8 ~ H- d- h) T9 S4 L& `3 Z0 J什么是因特网?% L, J( n) t) ?/ \5 ~
什么是协议?, N t' v3 z% x% {) v% T) u( v
什么是应用层?应用层协议?! X: T8 E3 d7 e. _7 U
什么是运输层?运输层协议?
$ H$ ^6 W$ y& j( f1 i什么是TCP协议?什么是UDP协议? @- d# f$ @! D3 v N& H, i8 V9 m
等等···0 K1 \; a! |; i8 |
(很深层次的知识,大家根据兴趣来进一步自己学习)
( d0 E9 l p) P& E) R$ Y知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。4 Y2 ^& e) }3 `7 y1 P
6 f8 Y% z% r* z' G, D# i7 V# A第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
" L* I1 ^' c1 z% O, U& l# j斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。( m7 L% l( W1 g: d7 c/ D! n
b* D( h$ G. d$ @! _
# q5 b7 y3 i4 s( W001-课程介绍& |/ q/ }$ U( `: u
003-因特网和协议
2 B- v( c& Q b2 p6 P* l5 c9 I4 z8 I004-分层体系结构' A; s* g# Z" T! h4 T* T
006-进程和套接字
8 [' |& u L' s5 c007-运输层协议TCP和UDP. ]% _2 i& K+ o$ t) ]: d
008-应用层协议HTTP% q1 I4 n) o, B( X$ |( J% F+ q
009-socket服务端6 @% v8 V4 h4 G9 }! G; p
010-socket客户端
6 Z m( Y) P& i a$ C: X& s0 q011-验证连接; D6 `+ f3 V3 N* f9 h
012-SocketDemo
" j3 I. T/ z$ m7 b0 Y013-实现接收连接的异步事件4 Q" O0 e/ _2 \
014-添加限制连接数的信号
: ~" o5 G- O, Y. ? f4 r+ O; i/ x$ f015-封装客户端连接对象和编写连接池
! n" C! ^0 @; F7 }8 ~& M" V016-GameServer(8-1)
% j c# C# Q6 s2 S) B3 r017-粘包拆包问题介绍6 a% C2 `/ a+ u6 J2 B0 {
018-采用包头+包尾的方式解决粘包和拆包* L, @/ K5 e E
019-GameServer(8-3)
1 Z+ _* Y/ t9 |$ y020实现异步网络接受数据( P8 z) F% ]) V, O
021-客户端对自身接收的数据进行解析
/ q( u& `2 d2 x! {022-构造SocketMsg负责网络消息的传递8 l' ~ l# t2 y( p
023-实现soceketMsg与byte[]的转化, O8 N2 p s6 t" `# u) M2 B; {
024-对象的序列化和反序列化
& G* D2 r& ]9 k- }- S025-GameServer(8-3)_21 n/ `" |$ }, r) I: j, G1 I
026-实现客户端断开连接
$ Y9 ?6 d; L9 l" e7 c027-实现发送数据
0 M8 i) ?4 H" \6 [+ B028-助学篇:带大家回忆一下所开发的内容
) Y" l! f }+ q1 }" j# Y029-抽象出应用层4 H( ]+ Y1 X( c
030-GameServer(8-4)
+ f3 H) u! _" @+ u* |9 M$ L2 h031-开发定时任务功能(计时器),编写任务模型, L& m- @! q" x* L1 x* W, O1 ?
032-创建计时器管理类,监听到达间隔触发的事件; U- ?: `4 T P- Z; ^. ?; c0 \
033-控制定时任务(计时器)的触发时间 a; v& I8 |4 g. V
034-开发线程安全的INT类型) }7 {5 ^- U6 J8 X. h& P! @
035-GameServer(8-6)/ |/ L3 N+ C/ \+ K/ m" ~6 g
036-实现单线程池
3 L! A- S$ i' J$ X0 [! z037-Unity2017下载
9 f3 E) L: L) S! U* S038-创建工程导入素材
: D+ `0 W7 x$ r, S7 w% e/ b039-Res
4 ^% V8 V2 u. O" I040-Card(8-7)
1 e9 L9 _. u5 |7 _041-GameServer(8-7)3 u/ n% l1 E! s8 G6 |
043-根据策划创建面板, J. F! a9 C5 i/ K# X% k
044-导入客户端框架,创建PlayPanel脚本
5 c: u( r/ A- h" K3 X! ?7 }& I045-完成开始面板) H- y+ W( I! n6 J+ p( ^7 x
046-完成注册面板
" w! Q+ _0 P/ W047-Card(8-8)% G* R8 I6 O7 v# x
049-服务器架构介绍
" |6 b9 T) z" z8 x$ h" Z0 c9 w050-按照架构实现服务器! O" X$ b+ K% c6 _
051-在客户端封装Socket,使其连接到服务器9 g) M# `4 o& Z
052-测试客户端服务器的连接# x; N' g, r- s3 B5 A H2 U
053-解决BUG
% ?$ e( a' ], I" k, |054-Card(8-9)
+ Q: j) A: R2 f( J5 t& o' Q055-GameServer(8-9): H+ Q& q7 v6 _; m G9 f* t
056-修改客户端的链接方法$ f# V* d4 }6 q
056-修改客户端的链接方法_20171124142335
7 }, V! |3 Q. R9 [3 H q" l& T057-定义操作码、子操作码,演示客户端如何给服务器发送请求
3 ~. J( m) V- n; ]6 l: M058-测试数据传输是否正确
3 K6 b. C9 o" g, L059-Card(8-10)1 d9 x5 h' u' C; B
060-GameServer(8-10)( _3 `' C( P b5 r
061-创建账号缓存层,实现注册的一些方法- ]$ T3 b0 N6 g: t! R/ K
061-创建账号缓存层,实现注册的一些方法_20171124142334
$ P4 Q s* f Q7 Q( _062-完成账号缓存的所有方法4 ]& a, ^7 i. u1 D+ t
062-完成账号缓存的所有方法_20171124142334
7 x; F5 [9 Z$ i, W: m6 B& f063-实现账号逻辑层) x O+ H( `- i$ a' P: T
064-解决今日BUG
6 n5 b* }* C6 R) O9 J" I2 V065-Card(8-11)4 }6 r) h3 L0 L1 M
066-GameServer(8-11)# b$ ?. ]! e3 t2 h# {/ p
067-开发提示面板
, m& {8 f3 ~1 R1 W8 `068-给登录和注册面板添加提示
6 K2 v6 N& r) m- Y' A: g, e069-处理接收到的服务器发来的消息、优化发送网络消息的方法
0 }. f. {, f) u* ]+ \& Q070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
' f( z4 N6 B% Q) L071-优化服务器,改变传输结果
, n+ ~; e% e! {072-Card(8-14)
2 R+ l5 [5 `& {8 Z. i6 r073-GameServer(8-14)
2 k4 g; O: v9 t0 K: ?/ S+ o074-初步实现场景管理器,融入到框架中1 z3 W5 R- N+ k: _5 `
075-增加当场景加载完成的时候调用的方法' t4 ~& h/ u$ v1 T$ Y& P" d
076-实现登录成功跳转场景. l* w' N7 d$ J0 g% j
077-设计UI之主界面的信息面板* {7 L. y$ E0 [0 U+ m- u
078-设计UI之主界面的匹配面板
: q3 l$ C$ W' Z, ^+ ]4 E5 h079-设计UI之主界面的设置面板! B- ~* T' G+ r* C$ f/ V
080-设计UI之主界面的创建面板4 H! {8 P- u5 P8 v
081-Card(8-15): K5 B: @' K" B0 H' G2 t! j
082.编写信息面板
}" v+ V9 s. z, ?! Z+ S* L% A083开发匹配面板
7 s' a3 D. o6 ], N% H084.修改默认创建的脚本
1 E0 c% [: n9 \; M$ {085.开发设置面板1 j4 M' ]* ~- Q/ j3 ~4 {% c
086.开发创建面板
$ l: W6 d* I$ N5 Q2 V& d087-Card(8-16)4 n5 X9 x6 r! ^( M& v- P! O
088.创建角色数据模型! B$ h1 c. W0 P% [" \3 B- x
089.开发角色数据的缓存层4 r1 e7 p% R, Y5 }& M0 r
090.完成角色数据缓存层
: U9 B) u, \: P, k- R091-GameServer(8-17)
5 d3 b9 t& S1 Y* e6 B092创建有关角色的操作码
4 X D5 D8 F' c. v, B093.实现用户逻辑层
) G* d: o3 K$ X% M' ^. }094.向服务器获取信息,在客户端创建用户处理类" B6 z g( G4 N, ^
095.客户端处理获取角色信息的响应
% \+ W3 _( |# |! N) G096.保存接收到的角色信息并且处理角色上线响应
% o% E" R( {' B097.发起创建请求和处理创建响应
" N$ y1 T+ T) @) }- d2 D098.演示本日BUG" b% L0 \' ^+ D
099-GameServer(8-20)
+ {, W* n( \ y* ~# H% D; Y5 t U100-Card(8-20)
9 w- m' J0 Q* U$ d0 |101.更新客户端视图
/ H# h) N* B. R. @! w+ Q5 v1 P102-编写匹配操作码
2 P9 O, b8 ?# I' B8 n" b103-定义匹配房间的数据模型: [% Q5 J/ n6 V' Q- d- W/ `, L
104-创建匹配缓存层,实现进入匹配队列
0 u1 |1 u- d8 @3 `105-实现匹配缓存其他所有的功能2 ?. F, _+ a: j8 X
106-创建匹配逻辑类,实现进入匹配房间功能8 g2 H' G- _" Q' C# v$ W* G
107-优化服务器之群发消息
0 p4 y* k7 V5 z6 m108-创建匹配房间的传输模型,在逻辑层进行构造
! b) R5 a# a/ E5 P$ _109-实现离开匹配房间功能
5 v" x3 |5 o# k `$ K110-GameServer(8-24)( [5 G _" e1 @
111-实现玩家准备# [$ m( z! W) @- K0 @
112-在客户端发起匹配请求1 I6 W# x; x% @: v% j* ~
113-GameServer(8-25)
& M0 S9 }( R; M6 }114-Card(8-25)
: z& z, }4 H* Z& j1 t) J' `' k$ h, @115-创建MatchHandler,接收服务器的响应; ^$ g5 J2 C, o$ g# g8 c
116-保存房间信息,他人进入房间广播处理5 R# B( a/ Y3 |* A
117-玩家离开3 w5 a& w ?& `5 C# H) O! U# I, i
118-玩家准备和开始游戏的处理
3 K; t, ~, _! I, s% I119-GameServer(8-29)( V! z0 _, h. U' f' ]
120-Card(8-39) (1)
3 Q, A; `# L, [2 _* a# s121-搭建战斗界面的左、右角色状态面板
" M4 K/ Y7 H' |122-搭建战斗界面自我的状态面板
! A. `0 f" }3 O1 k0 j; s123-搭建战斗界面上边的底牌面板
, S+ b' b. Y- m124-搭建战斗界面下边的快捷聊天面板' A$ I, V3 j1 `2 K# y
125-搭建提示面板和结束面板
& z1 k( c8 g+ G) U126-Card(8-30), G4 x( c5 Y, ^' @; z
127-创建出牌点,实现进入房间按钮功能9 K Z: o9 H: Z) A) m! J
128-控制底牌显示,编写代码
" k" ~, R* i+ Y- U1 B) Y' ^129-在服务器工程内创建卡牌的传输模型类
. U/ @6 Z3 `+ a% o( ~: s+ i7 o6 v130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
8 z0 ?* r m6 B7 { O131-分别创建左、右角色的状态类(有破音)5 ]( ]" U% n0 i$ ]. {6 u4 S+ h
132-ard(9-2)/ \" f1 |* u2 e
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
0 X: H) D; \% v* }% U9 n% Z134-如何控制玩家左、右玩家位置?(有破音)- c; z3 v3 E6 K, p
135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)1 O8 y9 v& `, c8 S" F8 Y1 p
136-Card(9-4)
" s: m/ \+ n3 F% Z0 i% Z* O$ {7 k137-GameServer(9-4)
, G5 \! O9 Y: T+ d138-解决左、右的代码重复部分7 a9 ^# e$ O! B. T0 ?
139-创建自身的状态面板(有破音)
c9 @1 I4 G" K3 _; {140-完善自身进入更新状态面板
' `& N3 q) Z w1 K141-CardGame(9-5)
+ a; z. n8 o# v1 r: S9 P! L3 m/ b142-找之前的BUG(一)3 e" ~8 E/ V& w% w) u
143-找之前的bug(二)
, e4 F/ \# b, n; L% r# r& N144-Card(9-6)
9 j3 Z: q0 S( d# I145-GameServer(9-6)3 ?/ D6 P" h; v, h' c! n6 z5 k
146-发送自身准备的请求
7 f& j9 Q3 V1 }, N/ T147-创建下边的面板的脚本: y+ m3 u) m7 r, B" F' T- g
148-Card(9-7)2 c+ N: A* e% R8 {1 q
149-创建聊天操作码,在客户的发起请求 C- i3 G; p8 ^7 m$ e
150-服务器处理聊天的请求,创建聊天传输模型
: u/ }1 z1 R1 C% u151-创建聊天文字的常量类$ W. ^" ]0 O3 Y& l
152-Card(9-9)1 m1 u2 b- V% b+ T2 x% F
153-GameServer(9-9)' h% n6 }6 M' n# B. B5 E
154-客户端接收响应,显示聊天文字# Y- M: p% O3 z' [. Y+ O9 Y
155-聊天声音的播放
' y3 B" a( I k156-测试聊天BUG) e, j5 s4 s: @* d
157-Card(9-10)9 T+ z+ b( P( h
158-GameServer(9-10)
& F( Y" @3 @* u4 D `( { B159-所有人准备完毕开始游戏,使用中介者模式触发
4 X. z ~6 `8 H160-逐层分析,创建玩家数据的传输模型
) x3 @' N1 J! f. k( q8 n- b: D161-创建并初始化牌库,创建花色的常量类# n+ l6 w" K# a/ T5 ~
162-创建权值的常量类,完成创建牌库的过程
0 B( Y2 ^& Q1 J3 _: F/ ]163-洗牌算法,完成牌库类/ m; t, f! _; \2 D8 B& b3 f. B8 ]( g
164-创建回合管理类
. P. O; k' J, t* \) R165-GameServer(9-12)5 d3 j4 q- n1 g" e' i$ h3 q0 U
166-初始化战斗房间,添加第一个方法:转换出牌
4 g% `; `, V0 d; {5 G167-创建出牌类型,判断能不能管牌% k( u4 V# E! N: \3 j0 B7 W
168-如果出牌判断成功就移除玩家的手牌
* S( Z& W5 s6 O% [169-增加倍数和更新回合信息
5 y! F+ f# a7 c4 P! [170-发牌
: _& P3 p) q$ t0 n' \2 f8 O171-设置地主身份,创建身份的常量类
! Y! k- J6 y9 s$ h0 c8 |172-补充一些辅助方法,完成战斗房间所有内容. n0 `; _) x' }( a
173-GameServer(9-13)1 S7 u% {8 {8 y+ b
174-创建战斗缓存层
% N5 Q& R9 Y, f( P; Q175-定义战斗的一些操作码
1 l# V' h4 `1 N6 P! N176-编写开始战斗的逻辑
2 p# [8 G! `' p, F- Q. h177-关于发送卡牌集合还是卡牌id的解释
3 Q. L5 p* O3 L/ X178-GameServer(9-16)1 j0 m7 k, Y7 |+ q
179-实现抢地主的方法
6 _6 ]2 S) }3 r180-创建出牌的传输模型,获取选中牌的权值
. D* m; n/ m0 d9 H* L181-判断各种卡牌类型
. P V h* u# g: M182-完成编写出牌的传输模型
4 i8 @ i+ s0 _! b; n' D. _183-GameServer(9-18)& _1 t) ~ L# d
184-玩家出牌在服务器的处理
% _ a/ `& W) k2 {! I a185-转换出牌的实现( f0 o3 } I i/ _
186-游戏结束的处理
1 Q7 n/ }* D! Q+ O. k; N; c) q187-不出的处理, Q( |3 t# T" e c( B* U
188-玩家掉线的处理" l. E0 s% N# ^( ?9 l# X
189-GameServer(9-20)
' ]- Q* u" E% h1 B190-在客户端创建战斗的处理类,编写获取卡牌的处理
1 c/ W0 t; x2 `# E- n8 e191-创建客户端的卡牌控制类
, {: U/ ?+ U8 {7 S192-创建自身角色控制类,管理卡牌的创建
+ X7 m2 C2 M. c% y. p, ?6 T193-创建左、右玩家的控制类,管理卡牌的创建4 p; Z4 K/ c& c! X h7 t. L; z
194-Card(9-21)6 i! F9 t# ~! y4 l% _( W
195-给大家录制BUG过程
1 y7 w; a( j# F196-GameServer(9-23); C, x/ M4 C* Z5 y3 N9 t
197-开始处理抢地主的响应2 Q: E6 |, x8 } D% }7 F4 i4 C
198-发送抢地主请求和抢地主成功的处理3 R9 ?2 b( }# Q+ }' C- r( q% O p' @, R
199-自身的玩家添加三张底牌的处理3 K* F" \0 z) x# O( N: c9 x. l
200-抢地主成功的处理完毕
7 A$ V, q% N% N( n, b( G201-测试抢地主并修改BUG
, I5 F9 X$ Q+ A Z2 p" ]# C, M3 B0 t202-Card(9-24)
( I, o- ?9 A1 y% i; s203-GameServer(9-24): p" X6 W9 p% ?3 v0 I
204-接收来自服务器的出牌命令4 W1 u+ s3 v! @8 Z" m
205-客户端出牌的处理
+ K, [, g6 Y( [3 }206-向服务器发送不出的请求
6 H' y$ ^$ q2 ]1 |207-GameServer(9-25)
( b/ G& ?' [9 H$ I208-Card(9-25)
4 J/ K2 r5 M4 m M% W209-给卡片添加碰撞器让他能点击
Z: S7 E7 I+ D210-解决出牌BUG5 W8 t4 c1 I! j: a
211-移除出完的手牌
/ L" P% p' k- _8 ?+ H" T212-管理桌面的牌显示
. m7 W& \4 g4 f; U0 ]' g213-出牌特效声音的播放
. e% e; X8 @! T0 f7 w* p2 v214-GameServer(9-27)# x+ R) {6 a7 J! }4 \9 S
215-Card(9-27)
/ q. g3 s% G. a5 c( W; h216-测试出牌BUG 上部
! H4 n* e' z# p* H217-测试BUG 下部" w4 u. c) A% C7 J1 l
218-客户端+服务器(9-28)
' P0 P: o* Q$ n4 }' V& N0 N219-创建OverPanel代码脚本- ^* j, i- z% a' A5 {
220-通过消息机制表现客户端的结束
- g5 T( u- P' J7 \. q221-测试游戏结束9 L3 A- ~( N$ i
222-创建背景音乐播放控制脚本
% P" j+ h7 B3 _, Z$ k5 H223-给前两个场景添加背景音乐
% u K" s+ Q/ X% w7 I5 C224-完结与未完
3 z* C$ h# n6 d& D' e" L225-Card(9-30) u( O2 N; {, j: l5 D
226-GameServer(9-30)- F6 X2 j2 ~5 p4 M e4 ^
227-扩展课之ProtoBuf
" B- D# R+ f5 F& F228-扩展课之ProtoBuf(10-15)下载地址:- v, ~! v7 ?- c! i2 ~* o
& c# M1 c# Y: V+ J" P
8 P6 J1 P& i. u1 C
4 z0 ~6 F! |8 e4 ^0 R" b) ^
|
|