|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
: N( C! I+ _9 G0 o: q/ o( M5 L服务器采用:c# 开发 / y1 b3 `8 b- b
客户端采用:Unity2017
9 A* s9 b3 w/ z2 i4 J
) p6 E% h, X$ { n6 j. q学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。+ L) J: ^" D0 D: F. M) ^
课程每天会有更新,难免有一些特殊情况望理解。
& Y' C$ R! R( L9 i4 F0 O3 B个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。
' H) o& x0 j |$ B- C. _" R* n
严格意义上来说,本课程应该是两个课程合二为一了。: T C8 [# i: m6 H9 g9 U' B
第一个课程就是《从计算机网络都服务器编程》。
% M" O+ C4 a! t0 q' o& k关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
8 E/ f( h3 x D' @7 g! t什么是因特网?' s0 @- T" Q5 ?$ u
什么是协议?2 w% R- @: |. H* q- o ~
什么是应用层?应用层协议?& @1 O+ `) k" p' N4 Q! A
什么是运输层?运输层协议?
4 k" U- Q, B; ]什么是TCP协议?什么是UDP协议?7 K& U5 n( J- s- }2 j) l' d& i1 t
等等···" F/ w! t& Q2 X/ r* p$ p4 u
(很深层次的知识,大家根据兴趣来进一步自己学习)" R. R; x7 I7 e! r" p# r6 B" V
知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。2 e; U2 s7 q& E2 U/ V3 K
9 r) m4 }$ \( q2 n/ [; L, n5 X
第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。4 |4 d( `2 A4 L3 J$ D& Z
斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
* I6 Y; Q5 h) ~% d s. O/ U: _, W5 v- e+ s/ k! E
9 \6 w" c& T" I8 Y5 q4 H4 N001-课程介绍; o4 y- F8 b7 d- `+ Z) a4 y. R
003-因特网和协议
9 w+ p# J/ I) | z004-分层体系结构
$ [, L$ I% H- |: ?4 c, E006-进程和套接字
* Q$ h# g- L' j: g007-运输层协议TCP和UDP. `9 q5 y1 y# v `; \' j# `
008-应用层协议HTTP
0 \" u' R8 U# Q% ~4 n- S- x" M009-socket服务端
: e! m: r J1 {010-socket客户端
$ l$ s$ L. q9 P011-验证连接* P; e" E# d/ W8 M4 |
012-SocketDemo
7 v+ Z0 j2 K5 c q. `, f, T) v' _013-实现接收连接的异步事件
6 D. V9 d3 e2 K5 m# f" R9 G014-添加限制连接数的信号; F2 \7 Y3 W- ]
015-封装客户端连接对象和编写连接池# ?. W- D6 ]8 m& S! L
016-GameServer(8-1)6 L6 y8 D5 U4 Z } H
017-粘包拆包问题介绍
" E! U# y+ p( l5 T5 Y5 e018-采用包头+包尾的方式解决粘包和拆包 t$ S3 H6 g* n+ l! ?1 R
019-GameServer(8-3)7 U1 _4 _# [- L7 _; h
020实现异步网络接受数据
7 O6 V" V, N2 J( p( B( ?6 u9 Q021-客户端对自身接收的数据进行解析
" Y; k: ^1 {# B' }5 I$ ?4 l: x1 f022-构造SocketMsg负责网络消息的传递
/ M7 f, {! _* @$ b. K6 f023-实现soceketMsg与byte[]的转化+ I6 n- p# @8 y% x3 _8 @0 B' q
024-对象的序列化和反序列化6 L; `5 b: B" |3 ^( L4 S+ ^9 h8 y9 k
025-GameServer(8-3)_2) @( Y; T3 U. g9 Y, t( [
026-实现客户端断开连接! R# u- q3 y, F
027-实现发送数据2 V( r& P7 A8 ?9 g1 |0 C
028-助学篇:带大家回忆一下所开发的内容( F" G% f, _ j* X- n! o/ L
029-抽象出应用层
# p$ K$ g( k- o030-GameServer(8-4)" y! f. D/ H% B/ S2 Q) ]. r2 u7 l
031-开发定时任务功能(计时器),编写任务模型
7 u# A- n" u( ~! c2 j: T032-创建计时器管理类,监听到达间隔触发的事件
/ } v( B7 ] p, q, v+ S033-控制定时任务(计时器)的触发时间3 L) Z! M- c0 w" a
034-开发线程安全的INT类型
) A2 x; c$ r. o035-GameServer(8-6)
( ^4 {( C- \7 i+ e036-实现单线程池9 l w$ q! ^3 u/ r( e, a! d+ Q5 D
037-Unity2017下载
4 h6 }. `1 V6 E8 ]5 a5 C038-创建工程导入素材
" b# `3 T6 I4 [3 q/ I( z039-Res! g: D: Q/ d! ^3 b
040-Card(8-7), ?( H: z6 G# H8 K
041-GameServer(8-7): M( d$ a8 m$ ~ O. _2 I$ `, _
043-根据策划创建面板
% v7 u9 ~1 v+ O, F) E: \$ G; K044-导入客户端框架,创建PlayPanel脚本1 _1 u7 D3 t: Y0 ]/ n
045-完成开始面板4 y; `" K( S6 L/ i( m
046-完成注册面板: D: u' f) C3 i- B8 `0 P
047-Card(8-8)) E8 M4 l$ [5 p! r; i8 W$ n
049-服务器架构介绍
* Z2 _2 q* \1 J2 v050-按照架构实现服务器5 J3 E9 @7 l3 W; l5 B& ^% J
051-在客户端封装Socket,使其连接到服务器
6 z7 v8 @) N! |! [052-测试客户端服务器的连接
6 Y A# U2 X: q- a053-解决BUG/ n" ~! T3 ^9 M, {( h1 t8 y
054-Card(8-9)- B/ d B" D- @
055-GameServer(8-9)
/ V# z6 t; @4 o056-修改客户端的链接方法! B' Z) d) W) J9 B
056-修改客户端的链接方法_201711241423351 k) ~. k, c# ~( a
057-定义操作码、子操作码,演示客户端如何给服务器发送请求* G6 t7 S, Z1 w2 C. y8 p
058-测试数据传输是否正确7 h5 R0 S( o& @( v/ ~" j
059-Card(8-10)) ?$ N! V2 [+ x
060-GameServer(8-10)
& h) O. E' b/ s: q, q- M% K. i ~061-创建账号缓存层,实现注册的一些方法) L: x5 C: s$ _, @
061-创建账号缓存层,实现注册的一些方法_201711241423342 N. ^, d: r6 l0 d% u3 J' F( e# z
062-完成账号缓存的所有方法7 f2 l+ T9 M9 a! {
062-完成账号缓存的所有方法_20171124142334% Z+ V1 }% ?& M
063-实现账号逻辑层
8 P" R/ t" p% N l064-解决今日BUG& L$ x2 n) g+ ^/ F7 O/ v
065-Card(8-11)
4 }9 J/ u4 K$ a# V/ S066-GameServer(8-11)
% e1 ^; @) a9 h$ q! l0 l067-开发提示面板- k' x3 K3 a" l; y" ?
068-给登录和注册面板添加提示
/ W1 u" I' p! g3 {7 L! e069-处理接收到的服务器发来的消息、优化发送网络消息的方法% X1 E. s; b: v# U2 K# i {. N `
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
6 s( O$ S3 N- p; K071-优化服务器,改变传输结果
9 f ^4 L8 I* c, N( S- O! |' i4 T8 k0 M072-Card(8-14)" W' m" Z3 r/ p4 W. Z8 E6 f7 L
073-GameServer(8-14)
h- z; D( Z7 o: B0 a074-初步实现场景管理器,融入到框架中
/ @! c: A. D, Y$ X6 u# B! }! l+ r075-增加当场景加载完成的时候调用的方法
+ R+ O [& V& {2 x; K& ]. F! [( m' a076-实现登录成功跳转场景# L* q" {& h. C( ]5 p" W6 h6 [
077-设计UI之主界面的信息面板
7 f9 b8 s7 n8 @078-设计UI之主界面的匹配面板7 e+ S6 _ l: k5 f& ^
079-设计UI之主界面的设置面板
4 R. K) B: W( A$ [- h080-设计UI之主界面的创建面板
# [9 {$ I' `$ J& {081-Card(8-15)( n* q- [; r. C% p0 [, i1 C
082.编写信息面板6 I! X* W4 a8 A' K
083开发匹配面板- T5 |0 D9 E [7 ]7 c
084.修改默认创建的脚本
4 v3 F7 A& G+ M% F4 q085.开发设置面板, h6 L* x5 v) f
086.开发创建面板
! ?2 g" o" v3 E- w087-Card(8-16)
. n: V( s7 }; X4 D8 \088.创建角色数据模型, j* U- `2 Z+ E. A% @& v6 _* i
089.开发角色数据的缓存层0 i$ S" ?- R( A8 X: t; t/ {- f3 h8 w
090.完成角色数据缓存层
' V. M# S) F( Y; R, x8 |% q5 m7 K091-GameServer(8-17)5 B4 M* c0 z* v( ~
092创建有关角色的操作码
5 U0 Z7 M8 z* H093.实现用户逻辑层' b4 c) Y6 U5 ?* u; j6 f! J
094.向服务器获取信息,在客户端创建用户处理类' _1 T& h& w9 |( B/ f; ?) s
095.客户端处理获取角色信息的响应
, L& W0 ^6 w6 D* e! ]9 R0 p096.保存接收到的角色信息并且处理角色上线响应/ @ b% X. j3 t, u1 ?
097.发起创建请求和处理创建响应
9 V* H/ @' i4 R1 T0 d% h098.演示本日BUG
: P" [% J# w1 D( R; j: `099-GameServer(8-20)
7 R s8 I' g8 b O& o* h2 `" u100-Card(8-20)
* }9 E U7 r! s ^5 h8 @+ d101.更新客户端视图
- F3 v. B) q+ b+ b- O102-编写匹配操作码& Z9 X& z: e9 M
103-定义匹配房间的数据模型
: H ~- [' Z: a6 o6 H7 |1 @, O104-创建匹配缓存层,实现进入匹配队列5 J2 c# j5 J: W) c
105-实现匹配缓存其他所有的功能
9 q) J! ]4 o9 f' W: c% B3 |106-创建匹配逻辑类,实现进入匹配房间功能
0 a1 A# r& V% J; Z, ]107-优化服务器之群发消息
9 L; W5 L( ]1 V8 h- ^108-创建匹配房间的传输模型,在逻辑层进行构造4 L. \7 Z2 o" i6 e
109-实现离开匹配房间功能" d0 P1 g: G! V7 `" ^/ I
110-GameServer(8-24)
/ U& ], z7 c j& O111-实现玩家准备
3 f* R2 k% ^* C! H u9 L112-在客户端发起匹配请求
) p! G! u+ a& H1 b9 w113-GameServer(8-25)8 y& F# Z/ K! G* Y a- R
114-Card(8-25)
" R; ^/ T$ n2 h; y5 u/ d115-创建MatchHandler,接收服务器的响应6 a# ^% I! E% ^+ l( m
116-保存房间信息,他人进入房间广播处理
i7 G! D; y4 G, B. J5 w& b# Z% U117-玩家离开
0 E. P# B: w0 J. a# y118-玩家准备和开始游戏的处理+ t! S/ \0 b+ E8 O4 v, q
119-GameServer(8-29)( Z& y* z1 t1 N: f3 l d
120-Card(8-39) (1)8 R. B: i& s3 R' K) B1 a4 X6 A
121-搭建战斗界面的左、右角色状态面板8 ? M2 j: b: e- g! \+ G
122-搭建战斗界面自我的状态面板( b3 h% o9 @. n( ]& F* v
123-搭建战斗界面上边的底牌面板2 t A$ Y7 `& S4 m H5 U' X$ ^9 J
124-搭建战斗界面下边的快捷聊天面板4 q4 O7 Z9 e6 _! E2 Y T i5 U5 |
125-搭建提示面板和结束面板 [) H3 Q' U, x" ~; H# \/ D
126-Card(8-30)
) b3 b8 T9 Z' c! Q) T/ L7 a2 j127-创建出牌点,实现进入房间按钮功能
4 q9 i* [- i9 G; c# U128-控制底牌显示,编写代码) `# l `9 T* J8 _! J
129-在服务器工程内创建卡牌的传输模型类 H# J0 Z$ _. j9 M. s/ ?
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
; c: w+ e1 ^! s! H9 `0 e131-分别创建左、右角色的状态类(有破音)
& ^8 H. a. e! A8 c$ u: k132-ard(9-2)
8 h, L3 k8 H6 a133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)9 X+ O! m( ^& j1 v/ ~
134-如何控制玩家左、右玩家位置?(有破音)6 ~. @/ ^2 P( s
135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
( h8 M7 K* \1 {136-Card(9-4)% x s- W2 j& v7 q& n9 s5 w1 h) S
137-GameServer(9-4)9 w* s9 `( i$ [3 v# D1 M
138-解决左、右的代码重复部分
3 p, j/ [# Q$ t. J139-创建自身的状态面板(有破音)
9 M% u) p! z4 _* `3 M7 ]. S140-完善自身进入更新状态面板
% |1 u0 W/ K6 p7 @3 i141-CardGame(9-5)
" z, t5 S2 J0 l" B142-找之前的BUG(一)+ U+ {8 v' r5 q( Z3 @
143-找之前的bug(二)' ^7 @. s( n3 k4 {! [- ^& p
144-Card(9-6)
& e. \2 r4 o5 b V145-GameServer(9-6)
/ c+ d: V# t3 d- d2 L0 Z: r146-发送自身准备的请求
& z0 J9 \2 R3 S( L2 v7 T" _ H, }147-创建下边的面板的脚本2 ~$ O) y9 ~" w# T0 F* F
148-Card(9-7)
) l" n$ G. e$ ~8 n1 i8 d149-创建聊天操作码,在客户的发起请求( Z4 z: i1 _/ W. t8 i+ y( R
150-服务器处理聊天的请求,创建聊天传输模型
! @6 W7 ]! T0 i6 B* E7 g151-创建聊天文字的常量类: N, c8 s) @' ^: |5 D6 ]8 {
152-Card(9-9)
. _ o* s& d1 n2 ]6 Z; a+ B153-GameServer(9-9)
6 c9 Y# ?: Y& ^8 w154-客户端接收响应,显示聊天文字
: z) S7 g4 ?4 t/ x& |3 X155-聊天声音的播放
1 P1 x- V1 q0 s* o3 J156-测试聊天BUG
, |4 ]& T+ F0 L3 j- `7 c157-Card(9-10)( w, [9 E: Z4 [8 t0 e0 O" c
158-GameServer(9-10)
+ S* I6 ]' a/ Y- [2 |4 G2 @0 _) A159-所有人准备完毕开始游戏,使用中介者模式触发
" k2 B+ y, I- Y4 y, b160-逐层分析,创建玩家数据的传输模型: ]8 |# b# Q$ a* K# t8 W/ _4 p
161-创建并初始化牌库,创建花色的常量类# x5 ^, [% z! t& ~& \2 ]' {
162-创建权值的常量类,完成创建牌库的过程
$ B h+ [7 A. v. H" i: j163-洗牌算法,完成牌库类0 ^* w( v- |. q3 p/ P
164-创建回合管理类
5 f6 Y3 T1 o8 t; s9 }' T+ y" C5 y165-GameServer(9-12): q# u4 D5 h; S* f0 A/ Y
166-初始化战斗房间,添加第一个方法:转换出牌
( p2 V' e P* q1 F* G167-创建出牌类型,判断能不能管牌8 g7 }1 i/ U* E* c, l0 y) o
168-如果出牌判断成功就移除玩家的手牌/ m/ |) h V6 R
169-增加倍数和更新回合信息
3 Z1 @& I7 ^" b( Y; l. n2 @1 J170-发牌
0 g" |; o7 K4 w. G: c2 N$ y171-设置地主身份,创建身份的常量类3 Q) u1 d! s& y0 t. P1 E
172-补充一些辅助方法,完成战斗房间所有内容
6 c* U; Q5 M$ _1 S; r173-GameServer(9-13), @* y; M9 x) d8 Q% \
174-创建战斗缓存层* Y( H& g9 p$ m# z
175-定义战斗的一些操作码! g9 X5 ~1 f# m! i
176-编写开始战斗的逻辑
) d8 h# E" T% V. s$ |177-关于发送卡牌集合还是卡牌id的解释: A, ^; b; v; m
178-GameServer(9-16)
1 o% j) v& |/ ~- m5 `' h179-实现抢地主的方法
* ]! |. Q9 m9 q: K! ]2 c180-创建出牌的传输模型,获取选中牌的权值( d- Y4 C/ l) u! I6 A
181-判断各种卡牌类型
( f: |. z5 ~8 ?3 d k* ]6 Q182-完成编写出牌的传输模型0 b) D8 v6 _! X5 o/ ?: I I
183-GameServer(9-18)& ?2 M6 d, j" K1 h% \
184-玩家出牌在服务器的处理
' ]" P9 B6 x2 W% |5 R185-转换出牌的实现
. u4 w, j4 U( p186-游戏结束的处理/ y4 L* A4 ~ l) U$ q' T/ V4 t
187-不出的处理( R6 [7 Z5 N _- V
188-玩家掉线的处理4 R; U( q% e- p7 D7 C$ Y6 @
189-GameServer(9-20)$ ~# Z( l3 B7 _3 ~1 b# _" c
190-在客户端创建战斗的处理类,编写获取卡牌的处理+ |8 e6 S* c& c
191-创建客户端的卡牌控制类
! m$ s9 j5 n8 Q: l192-创建自身角色控制类,管理卡牌的创建" m% p9 C- m p" q' H2 s! @% E
193-创建左、右玩家的控制类,管理卡牌的创建
/ j8 I& l7 O" s6 G194-Card(9-21): \$ i* ]" K" O, {$ O
195-给大家录制BUG过程 ?/ z6 M7 d8 m ^
196-GameServer(9-23)" A8 i' g8 Y* W$ i
197-开始处理抢地主的响应! ]6 p2 j: V7 L& h3 {
198-发送抢地主请求和抢地主成功的处理
! U) [. }+ Y' u* @7 m+ c7 n' q199-自身的玩家添加三张底牌的处理
: ~$ T' g4 a* A% n200-抢地主成功的处理完毕
( D% T7 |- t; Z8 S/ P4 n0 p9 q201-测试抢地主并修改BUG/ T3 C- q4 I9 C& i: W2 Q
202-Card(9-24)2 e8 R/ h5 j. z4 H
203-GameServer(9-24)
, Q/ p1 o0 L( D3 Q204-接收来自服务器的出牌命令
8 U- r' _. n2 Z6 t9 Y6 e- D205-客户端出牌的处理
) n2 g& b8 e# C4 k) |- f5 Y" F206-向服务器发送不出的请求
6 p6 n/ l. W3 v( U+ L; K1 ?# s207-GameServer(9-25)
& G( G- E9 \8 S5 _- _9 V8 D S208-Card(9-25)
. L; c6 Z; Y6 x s$ h0 ]' N- Y209-给卡片添加碰撞器让他能点击8 C+ x8 O( U0 J" t7 H% E4 s
210-解决出牌BUG9 w" [2 t# i9 ~4 R
211-移除出完的手牌
# N& Y" v9 F( f- `- M4 Y ]212-管理桌面的牌显示) ?8 j/ n- r& f9 e* G6 Y" @+ Y
213-出牌特效声音的播放, P1 C* j3 b j" F, o
214-GameServer(9-27)/ B& V) }' F' s( g) R
215-Card(9-27)3 \# ^$ B; [3 T i8 Q6 Y$ E7 ]
216-测试出牌BUG 上部6 ?8 J( X: o! U) {* N0 g! W6 P
217-测试BUG 下部; H% V& C/ N& X8 ^1 v9 n, M I
218-客户端+服务器(9-28)
3 b6 N0 I* V/ O. V8 X& s* \219-创建OverPanel代码脚本* B. b+ n ^8 O
220-通过消息机制表现客户端的结束0 S g$ m9 h1 w2 ~9 w
221-测试游戏结束" ^5 d( E4 }( F* A! j3 l
222-创建背景音乐播放控制脚本4 m- k' r8 n7 l
223-给前两个场景添加背景音乐
5 c/ y2 ?4 Z+ d* d224-完结与未完) k' F9 Q- g* H: Y$ X( j/ p
225-Card(9-30)* X8 H7 J7 @7 J7 B0 {, D* e
226-GameServer(9-30)5 v6 H& V$ b& a9 F7 v: O
227-扩展课之ProtoBuf& W7 {8 `$ B0 O9 u4 |; y3 ]* m( H
228-扩展课之ProtoBuf(10-15)下载地址:
8 H9 \* ^0 Y& z$ W2 p7 g2 Z- M8 Y4 V- I1 ]/ U4 @
. g" P$ _% K) q, l6 h
! \ a" O* f9 k7 h& A
|
|