|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。! }& }3 _9 j6 x: A
服务器采用:c# 开发 $ K& g0 ?% k5 W, Y
客户端采用:Unity2017
" e5 A) ^% D; ^$ c2 Z! j8 A) w% J0 Y+ ?: ], y
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。- x1 ^+ q+ \5 x
课程每天会有更新,难免有一些特殊情况望理解。( A( v1 s+ i; L- ?* m1 J
个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。
6 \+ d# S; p6 D) R2 | v0 a
4 Q) i( r& [2 o4 W严格意义上来说,本课程应该是两个课程合二为一了。
+ I* B# M/ e5 w( w& W第一个课程就是《从计算机网络都服务器编程》。2 T2 F6 f+ U' q3 w9 p, \+ W1 |
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
5 T+ o* W4 X* Q! T什么是因特网?
8 q- h; P' _ b% c8 p什么是协议?2 ?3 Q7 b5 g G' c3 F
什么是应用层?应用层协议?
4 U9 |- r, r; X9 n% d什么是运输层?运输层协议? Y2 m4 P5 \+ T9 u8 E H! E
什么是TCP协议?什么是UDP协议?( s' e/ x# r& K5 b8 O4 G. X4 d5 @
等等···( Z, h. ?! y" k) n" I& I. T
(很深层次的知识,大家根据兴趣来进一步自己学习), f. O8 ^1 {, g n" V2 F
知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。2 x" G. a8 A5 M8 g; F/ e/ l
$ `& N% q: F2 L5 f第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。. p4 E5 M1 a0 `, D; B& y
斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
2 [9 j" z1 q) r7 M8 z
% m4 ^' L" R0 L
2 N: [4 r/ r x0 g001-课程介绍
' x$ W, K J6 r' \003-因特网和协议+ e4 A+ J# v. S; s6 ~/ J+ }
004-分层体系结构; D6 v+ O8 P( m2 p/ D/ M
006-进程和套接字* s0 I( g V- [9 | B
007-运输层协议TCP和UDP0 r2 ?! w+ Q4 u; }
008-应用层协议HTTP$ ?2 _4 u2 N' d6 d
009-socket服务端4 K: _' X7 v- V3 Q+ {
010-socket客户端0 d, O; M# @% v, I$ j7 {3 j* P
011-验证连接
* R& m( P! p1 p2 d4 ~) n3 r- c S012-SocketDemo
: C. A5 h- H1 m" j- k" a013-实现接收连接的异步事件
/ W" ~1 a ^9 T$ t014-添加限制连接数的信号7 q- @$ t# p( K0 p- N) o
015-封装客户端连接对象和编写连接池
/ r8 G/ k2 c4 C( I016-GameServer(8-1), M# O) a c0 t @# C* o
017-粘包拆包问题介绍
& W9 n; u$ \1 x018-采用包头+包尾的方式解决粘包和拆包
]) l ^( H; E9 j/ a019-GameServer(8-3)0 U0 b7 S' }$ K! M$ t
020实现异步网络接受数据
1 s0 E0 Z) G' W0 H! k021-客户端对自身接收的数据进行解析
. l& A$ _2 a# M' J022-构造SocketMsg负责网络消息的传递
3 e+ E/ n% h" o j( b* m+ R023-实现soceketMsg与byte[]的转化
" }8 K- E# z: ~2 G024-对象的序列化和反序列化
. k! p- C$ D2 o: m8 U" w025-GameServer(8-3)_2# J7 y8 N1 u+ G8 Z O% d7 }; X
026-实现客户端断开连接1 n! K& ~, L O! B5 w: T
027-实现发送数据* o# x' D& K8 \) R2 P4 _8 `
028-助学篇:带大家回忆一下所开发的内容
- |' `, {& @; y" w; r: g; a& ]2 p029-抽象出应用层# {4 f ~- G3 t8 h3 f# T2 t
030-GameServer(8-4)( U; e- A0 N) J9 S: c( ?4 _- Y% T
031-开发定时任务功能(计时器),编写任务模型( m# W/ B& s! ~6 E+ u- `
032-创建计时器管理类,监听到达间隔触发的事件/ B- {7 \5 m) G5 U5 Z; E* w0 T
033-控制定时任务(计时器)的触发时间
# U: W' W. Z: `$ j$ T034-开发线程安全的INT类型
2 J J! S$ {; P: |1 Q6 h- `5 c3 y035-GameServer(8-6)
* J; {* U) _( r7 X" m5 A036-实现单线程池
' e4 |2 y2 d+ t- i' _$ }037-Unity2017下载
3 l/ X) c4 R) t: n5 |038-创建工程导入素材$ n a0 m- q$ j3 a' L; k' R
039-Res2 G! w0 g" d$ {; k! B) ]
040-Card(8-7)8 G0 p4 \. ]! B! b% I: r" y
041-GameServer(8-7)4 Y9 i! P( e& i0 [* n: [9 N/ I
043-根据策划创建面板
0 _/ q, |- |9 H0 |) l# t) [7 B044-导入客户端框架,创建PlayPanel脚本
# O4 Y) w5 d6 B+ U, j045-完成开始面板
- ]9 j" M- o$ t2 f+ L2 }046-完成注册面板
; g2 h2 c( u. u7 j047-Card(8-8)
: T" D6 b/ h0 W- X049-服务器架构介绍% v* T5 X h; K& }
050-按照架构实现服务器0 c4 t7 _: z |! x' K
051-在客户端封装Socket,使其连接到服务器% J- S" Y: w8 a5 x- x; e8 y( p
052-测试客户端服务器的连接; `9 c% b5 j* h: A7 X( u3 h- p
053-解决BUG% X% m0 G3 ]( E% Q
054-Card(8-9)
' R* z" U \( {! s055-GameServer(8-9)' `* Q" o7 A) Y% J$ ~+ w
056-修改客户端的链接方法
9 C, }: v! x% s2 S; i7 q056-修改客户端的链接方法_20171124142335
# n7 y+ n- n7 G' |# Q6 Z' f" U057-定义操作码、子操作码,演示客户端如何给服务器发送请求* e; ^1 M$ `$ Y t3 d9 ?4 c
058-测试数据传输是否正确
7 g$ y; }& f% @059-Card(8-10)
, X2 ~0 d+ C j+ v0 r% a2 j; h/ I060-GameServer(8-10)
a0 p- W; k6 z# u8 g061-创建账号缓存层,实现注册的一些方法
9 S o3 t, B- V, I; E061-创建账号缓存层,实现注册的一些方法_20171124142334* g0 j0 k) i- h( s6 M% T1 l- m
062-完成账号缓存的所有方法0 D) W. ^- Z- } I1 Z
062-完成账号缓存的所有方法_201711241423344 W) f k$ q0 K; o4 U9 k
063-实现账号逻辑层$ A) b7 v3 M! L
064-解决今日BUG
/ E: ]2 a) w; q065-Card(8-11)3 P ]+ f* M D0 e4 U
066-GameServer(8-11)
6 n, R& ?0 c' |2 n067-开发提示面板$ I2 f& u$ J0 p
068-给登录和注册面板添加提示
1 Y7 H' z7 s6 |2 o6 G( _+ k069-处理接收到的服务器发来的消息、优化发送网络消息的方法
, c. M! h. M' ?% b& @% N" G070-实现客户端的账号处理、怎样和服务器交互(后面调个bug). S% T$ Y1 N& u( {+ |+ N
071-优化服务器,改变传输结果- b2 ~; k; w4 l+ E+ o5 R# m5 T
072-Card(8-14) f) ?, X2 s; E
073-GameServer(8-14)
. w+ P5 N: u9 G" H+ _/ O! a074-初步实现场景管理器,融入到框架中
. z: `6 K9 |, O' X. i% O5 t: ~9 N7 Y075-增加当场景加载完成的时候调用的方法) X8 x9 F! y! G. }* y6 y
076-实现登录成功跳转场景2 z$ L. S0 U" \$ I
077-设计UI之主界面的信息面板
# x. P5 b5 z' _( B078-设计UI之主界面的匹配面板9 z4 x" Y0 ~1 c" V! g. [
079-设计UI之主界面的设置面板
0 U4 b6 N! ^/ e4 W! |080-设计UI之主界面的创建面板& ~( Q5 e N- V: G( c0 O8 W
081-Card(8-15)
, T7 a0 q2 j# e- C082.编写信息面板3 p2 R' s6 K U+ d* R
083开发匹配面板
b5 }9 n! u9 V+ x! W. F084.修改默认创建的脚本
0 h( L _! c4 ?& ?5 O. B085.开发设置面板( ]6 B3 W; o% A. n' l5 u6 q( n5 r
086.开发创建面板. J9 K7 A$ i2 M
087-Card(8-16)8 C. A o; l; S/ A- P. s0 @ U* @& }
088.创建角色数据模型" A6 Z7 i8 s; I) X* w: p" v
089.开发角色数据的缓存层, {% J# @, Q9 G9 l \
090.完成角色数据缓存层7 y Q, |8 m- {- C6 I; B
091-GameServer(8-17): B8 V' A3 \2 F& s/ M ]
092创建有关角色的操作码' \# C8 L4 r( P& y/ ?' Q4 |
093.实现用户逻辑层
8 g$ {3 S3 t5 s( w* b0 x! O5 k094.向服务器获取信息,在客户端创建用户处理类
$ N/ L. S& B# K, i' g095.客户端处理获取角色信息的响应$ N+ F) Y' p. f. E) e. M
096.保存接收到的角色信息并且处理角色上线响应8 G$ U, v- [6 f% [1 z
097.发起创建请求和处理创建响应0 v1 }5 E3 g2 m7 g$ F0 Q2 k
098.演示本日BUG3 q) s0 |; {* d4 Z9 s/ I
099-GameServer(8-20)
" F, e9 h; P# Q$ j100-Card(8-20)* e4 s8 r# n, _3 f! @% @2 y
101.更新客户端视图
5 e7 h5 a3 v$ N3 m/ E6 [. ?102-编写匹配操作码
( h5 |, u0 M6 w- U3 w- j. o103-定义匹配房间的数据模型4 v) [9 F0 ^! O4 Y& J
104-创建匹配缓存层,实现进入匹配队列: Z- r _( _- r! n% W4 Y
105-实现匹配缓存其他所有的功能
% V% _1 q( w2 D. u' B# ~0 b106-创建匹配逻辑类,实现进入匹配房间功能9 t. z5 ~6 z- F8 u4 Q1 E9 d4 |5 n
107-优化服务器之群发消息
4 ~3 x3 u+ j6 |, x108-创建匹配房间的传输模型,在逻辑层进行构造' b7 h; [8 {, U2 t( ] x$ O% d
109-实现离开匹配房间功能
" m+ i( ~. s* `; h$ j# G; I110-GameServer(8-24)$ j3 x1 c- Y5 o8 r
111-实现玩家准备! H, I; Y* Z3 u! n! q! D# {5 P% d3 i7 p
112-在客户端发起匹配请求; T! R. d" j+ ]% r0 \1 y
113-GameServer(8-25)) ^6 A$ A6 Q9 B
114-Card(8-25)
. b9 a8 Y, |3 V3 g, S115-创建MatchHandler,接收服务器的响应
$ {1 H2 \/ W d; @# K/ ^116-保存房间信息,他人进入房间广播处理
. h' G: E% p2 e+ [( n+ d117-玩家离开6 w% V& U i$ w/ C) A- S8 R. ~
118-玩家准备和开始游戏的处理9 t8 k; g r; G* N- c/ F3 n, A
119-GameServer(8-29)
1 L6 ]$ n# ?2 T. } c% r120-Card(8-39) (1)
6 u0 `' L3 n8 w& i8 Q) ?121-搭建战斗界面的左、右角色状态面板
$ Y* |* x9 ]! U- J; D; N8 L122-搭建战斗界面自我的状态面板$ n: [+ C- W, C# h8 Z) G
123-搭建战斗界面上边的底牌面板
' ^6 ]* ^- f6 X9 I/ z( S2 E% _124-搭建战斗界面下边的快捷聊天面板2 I9 f8 H5 J( ^7 [) \! B( z" \
125-搭建提示面板和结束面板
1 @, F' [2 j: J4 [- F126-Card(8-30)
& j% I; t$ s7 L( g4 T: G! F' F127-创建出牌点,实现进入房间按钮功能# V4 H# q8 g( Y; w% ], B7 g) U" @
128-控制底牌显示,编写代码% h$ Y$ i8 g2 I) `5 R; ~
129-在服务器工程内创建卡牌的传输模型类$ N t% v# v* E0 `! a2 i8 S" m' l
130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)- E3 R7 y9 k- e; r3 i
131-分别创建左、右角色的状态类(有破音)* N% k5 q0 ?! J3 s R$ n7 y
132-ard(9-2)1 Q: {5 d: q0 a* s( H0 K
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)
1 X- t% {0 I, {# o$ l134-如何控制玩家左、右玩家位置?(有破音)
. t* d# p5 l+ Z8 @135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)' g4 G* W7 o& S) V! |* E7 |9 R
136-Card(9-4)" i# l3 X0 e5 }5 u7 P" Y5 [7 n
137-GameServer(9-4)0 T! A v. V. k: ~, C: N/ n9 Z1 w) [
138-解决左、右的代码重复部分
9 k3 r" F% F# P# a139-创建自身的状态面板(有破音)
8 S5 V, D4 z; g' k& ~4 @5 P( ~( |( q140-完善自身进入更新状态面板
J* Q$ [3 H/ v9 V; B$ X141-CardGame(9-5), e" |" ^4 e, ~ O: n) _
142-找之前的BUG(一)0 P; x$ w8 L- Q1 o8 U4 w
143-找之前的bug(二)
$ Q% n0 E) Z2 R4 x# [6 s144-Card(9-6)6 u" f/ U. U* \4 f7 h
145-GameServer(9-6)
( U. p5 Z5 |3 p3 A146-发送自身准备的请求
( d! i/ `) C- v* H) ?( ^2 p147-创建下边的面板的脚本
$ ?! \9 D+ `" R6 h$ N5 ], y8 S' X148-Card(9-7)
, [! O- g [+ \$ H4 p* p4 X2 Y+ h149-创建聊天操作码,在客户的发起请求
9 d6 {% l& k& ?150-服务器处理聊天的请求,创建聊天传输模型
% q% m# K0 f/ A( l2 ]* X151-创建聊天文字的常量类
0 T& T t5 y7 A9 N0 p152-Card(9-9)$ V6 y2 s& N0 l$ [, D2 h
153-GameServer(9-9)! y! b6 Q: {7 y+ y! p$ |1 g
154-客户端接收响应,显示聊天文字
. Z5 w1 z9 M! \. C7 P8 w# z155-聊天声音的播放$ d- N8 v% g( L1 j5 ^
156-测试聊天BUG
1 ?) u# { ]0 ^157-Card(9-10)6 }9 F( A4 C) r, c
158-GameServer(9-10)" A M- w6 @1 `1 H7 ^
159-所有人准备完毕开始游戏,使用中介者模式触发8 I3 \+ S3 c2 g
160-逐层分析,创建玩家数据的传输模型6 T' I8 ~) W7 V/ c
161-创建并初始化牌库,创建花色的常量类1 Z' l; G6 R& F0 Y
162-创建权值的常量类,完成创建牌库的过程
. P* {9 H8 B# k) b8 \9 D( ]163-洗牌算法,完成牌库类2 X" d" j8 M" z1 s+ L8 w1 `( P S
164-创建回合管理类
8 H6 M C" Y5 G" |" _165-GameServer(9-12)
8 W( ~" x& ]; Y166-初始化战斗房间,添加第一个方法:转换出牌
6 v/ a* c: t) ?167-创建出牌类型,判断能不能管牌- t( I3 O. Y) f6 V) O; b. p
168-如果出牌判断成功就移除玩家的手牌
! v( _7 B4 r5 @ ]$ c: q7 H J169-增加倍数和更新回合信息
( B+ ?' T" L$ W4 x170-发牌
. U/ d% Q6 c. w0 W: L5 C1 ]+ p171-设置地主身份,创建身份的常量类+ C# p5 Y7 ?+ n( f; B
172-补充一些辅助方法,完成战斗房间所有内容& `) D( p; W3 ]8 Z
173-GameServer(9-13)
! w) ^9 h. Z3 w' a. k2 |174-创建战斗缓存层
- J2 \* A8 K/ J0 X5 C, r175-定义战斗的一些操作码
2 M u1 o* J0 B2 c1 y% S6 f176-编写开始战斗的逻辑" t' q, a# R" A$ K7 B7 u6 L
177-关于发送卡牌集合还是卡牌id的解释3 N* s- x4 O. \6 N: H
178-GameServer(9-16)# r/ U: x2 @3 M5 F; B. y
179-实现抢地主的方法
9 Q! ~/ [1 T! q8 V/ [180-创建出牌的传输模型,获取选中牌的权值
2 i! F. N6 p$ c% H$ b- w5 ^, g181-判断各种卡牌类型5 ^+ }4 F1 T8 i9 m( m3 t! b/ J
182-完成编写出牌的传输模型! Y& E8 z. C+ c) A% j
183-GameServer(9-18)
% z- L+ m0 o6 ]2 x184-玩家出牌在服务器的处理
$ V% `, Q0 H S b2 v% ]185-转换出牌的实现
4 [& I" N, S7 O g/ w186-游戏结束的处理
! }/ d# A, v# b1 r1 K0 T: F% C8 N187-不出的处理
7 j' D( a# W; I188-玩家掉线的处理
0 \+ [# R9 I2 P: |( ~$ v189-GameServer(9-20)
$ g \* Z, m% J# d9 t( o9 S190-在客户端创建战斗的处理类,编写获取卡牌的处理
6 H3 ]- i V8 S; V5 ^191-创建客户端的卡牌控制类" @$ P9 z% ]8 i: E; K* m# {
192-创建自身角色控制类,管理卡牌的创建7 W' J( W: {, z- k, D4 H' ?! w
193-创建左、右玩家的控制类,管理卡牌的创建2 {, q: z' R2 V7 x6 m0 f
194-Card(9-21)
& _. n e9 n" `2 n2 W7 Z195-给大家录制BUG过程
& x0 [* c9 S) D, v7 _196-GameServer(9-23)- u. k5 ?7 X. S* X( ]
197-开始处理抢地主的响应
) c' k5 q, B2 P& a2 |0 X198-发送抢地主请求和抢地主成功的处理% G' x, f! c4 Y8 [7 j
199-自身的玩家添加三张底牌的处理
$ h: @/ c9 r9 }% ^200-抢地主成功的处理完毕
2 f! |. H- @* b. A6 M' k3 i201-测试抢地主并修改BUG
1 L- B( d" S/ Z: k0 H5 ^2 \202-Card(9-24) C) c$ `. {$ h; A4 i, ^+ F9 h$ Y4 ]
203-GameServer(9-24)
H) y3 I U6 v8 A204-接收来自服务器的出牌命令1 Y7 \: L: p: K. i0 X% z
205-客户端出牌的处理
( t* Q- L' H0 F0 x$ B- T206-向服务器发送不出的请求
. O0 U$ c, x7 F% C. G. e v$ k207-GameServer(9-25)3 x8 B# u3 @* o! c+ o1 y, U
208-Card(9-25)
0 S {. O+ g4 N$ X209-给卡片添加碰撞器让他能点击
0 r* D, R: m# Q5 I210-解决出牌BUG
7 T# i1 k1 Z$ W" Y( ?) k( R2 C2 u211-移除出完的手牌
% W. D0 i# o. Y& q5 U" }7 l& e212-管理桌面的牌显示. y2 M5 }* e# t" ^2 L
213-出牌特效声音的播放0 Z+ i* p6 v/ W, x6 `. c) _
214-GameServer(9-27)
. R- t4 c3 ]7 ~5 N& |" h' l& N215-Card(9-27)4 Q' K, p" n' W
216-测试出牌BUG 上部' T* B$ B7 Z* P: x: M4 v
217-测试BUG 下部
3 F- p6 ~# R* L/ ?. B' M9 V0 R218-客户端+服务器(9-28)- {$ Q4 |& P/ c) W1 ^0 r8 `( A
219-创建OverPanel代码脚本
7 _! J1 V/ W8 v/ f& F4 e220-通过消息机制表现客户端的结束" [* T! A0 k( p
221-测试游戏结束" H6 Z( z1 {5 F0 m# ^+ j+ h
222-创建背景音乐播放控制脚本5 U3 h" W3 p v G
223-给前两个场景添加背景音乐
# l4 W9 b0 B9 L( f224-完结与未完
" a4 O' _& P# k225-Card(9-30)
1 E5 u1 B3 i# u7 W: P9 Q% s226-GameServer(9-30)
5 l8 Z# {3 ` e' O4 ?( M; C227-扩展课之ProtoBuf
3 `" ~$ Z) q. x: C# x* d228-扩展课之ProtoBuf(10-15)下载地址:! h1 E0 D! T5 {3 s
9 x, |( Q, b" b! f% H% z# x0 E: p$ u! Y. k# C
( ^' k9 F2 b) O, S' s
|
|