|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。7 C0 I& f" q) F4 S7 b, n
服务器采用:c# 开发
/ L2 N. z% p0 k8 ?* r客户端采用:Unity2017
+ {, V4 O" E! q2 ~+ x$ G9 A4 b; @: N+ ^
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
8 }. k4 c* X' f$ p! g课程每天会有更新,难免有一些特殊情况望理解。
; ~. Z6 }& G' y; `个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。' J$ A2 W. X7 a" t* D
9 m% g9 r2 f1 f6 W1 u严格意义上来说,本课程应该是两个课程合二为一了。
* u3 V z7 S% D [; [第一个课程就是《从计算机网络都服务器编程》。& H/ d% a- \' L" L
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:1 \5 W8 N% i9 q$ Y) j6 Y+ o
什么是因特网?$ M+ W H- c9 x: Q: U
什么是协议?
5 |3 L- X8 ^8 g0 \5 o+ C& X- u" X什么是应用层?应用层协议?7 K0 V8 [% y1 c3 E
什么是运输层?运输层协议?
% {; Z7 j0 p6 {4 C& _1 c5 w+ _什么是TCP协议?什么是UDP协议?6 V" O/ `) D4 J( ]. k6 K
等等···
" e; d* f* H* O: w1 I(很深层次的知识,大家根据兴趣来进一步自己学习)
% X6 W8 T) Z6 T7 m知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。
. M1 E" z, b0 u9 ? @4 k( z+ I( \- |' A& \# a" A% E
第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
! g% E$ b- Z6 ^% `% v4 l z7 D9 g斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
- R/ V% S' m+ G' t& }
: W7 x: D2 j+ W5 J; I- Z2 S9 k2 w7 w
001-课程介绍
) _- m6 W( z$ @+ e2 a' i" E2 n003-因特网和协议; H1 l* @% C( Z- S" q. j9 S6 X' t
004-分层体系结构6 O- N. w+ s3 r: O1 i" P/ i
006-进程和套接字
6 L! u% u# a: w$ ^- b007-运输层协议TCP和UDP
* j' W& Y; ?9 v* ^008-应用层协议HTTP8 P* m b0 P ]9 H
009-socket服务端
! T! B* e: v" p3 ^1 {3 a5 u0 y/ d1 T* j010-socket客户端
# X6 o2 [8 H0 \4 E# ~* Q011-验证连接5 u, f1 r6 q2 O! y
012-SocketDemo
* k; W* e! }1 ^) }* L013-实现接收连接的异步事件- i7 H( P4 W, W) ]5 V1 v8 t
014-添加限制连接数的信号
S8 I# T$ j5 [015-封装客户端连接对象和编写连接池
+ J) n7 d6 Q: m0 n. I016-GameServer(8-1)+ B5 G4 N6 S5 M; [
017-粘包拆包问题介绍
2 Y6 ]7 i: I' V e! j. Z018-采用包头+包尾的方式解决粘包和拆包, X- T8 R ^/ @) t6 J5 R
019-GameServer(8-3): ~9 J% r9 q, Z) w& l' Q+ p0 L
020实现异步网络接受数据
# k6 }) G4 r( N021-客户端对自身接收的数据进行解析
& u% S5 A% {4 q% V% l022-构造SocketMsg负责网络消息的传递7 H7 L$ ^% D% d" o; f- n4 c8 s
023-实现soceketMsg与byte[]的转化
3 K" Z1 N4 s7 W( b1 j$ f024-对象的序列化和反序列化1 Q# k1 x q. H
025-GameServer(8-3)_21 e6 c2 [& g' k1 w9 X, |
026-实现客户端断开连接2 I7 ]( F, T' ]0 y+ [8 s/ s! T
027-实现发送数据( }5 S# L; a, E4 X* G. I
028-助学篇:带大家回忆一下所开发的内容3 |* O8 v1 O' [
029-抽象出应用层# @8 c+ B! N8 J& X6 T8 `8 _
030-GameServer(8-4)% D3 c, P7 y/ Z1 A9 R
031-开发定时任务功能(计时器),编写任务模型* Y. u3 \. ?, \' u
032-创建计时器管理类,监听到达间隔触发的事件
1 Y+ F2 r8 G9 Q4 V2 I033-控制定时任务(计时器)的触发时间
5 ]+ X- w- H; F8 r3 d& p2 U9 I034-开发线程安全的INT类型5 W" ?& E1 u# y; M' m
035-GameServer(8-6)
2 q$ @) y5 p4 i036-实现单线程池) r1 }7 _6 r" G' _3 q
037-Unity2017下载% P& p2 L! ^: {
038-创建工程导入素材
5 x; {: l# z. N$ r6 Q039-Res
0 D9 F. _4 {: _4 b6 S040-Card(8-7)5 L2 G5 n4 Q. B8 p$ _
041-GameServer(8-7). J5 O+ `# }2 t h5 T
043-根据策划创建面板+ p' |; ?0 s* C+ d, g3 H0 e
044-导入客户端框架,创建PlayPanel脚本
, m6 D; {; n8 N; ]045-完成开始面板
3 ~1 m( X# {$ R: \046-完成注册面板# K3 F' y2 }; P7 ]
047-Card(8-8)
5 b- @7 r) T) o& }7 G049-服务器架构介绍
6 k4 {6 J i4 g8 ?* b050-按照架构实现服务器 t1 J" D6 [4 H- ^2 g
051-在客户端封装Socket,使其连接到服务器
" A" u$ E1 i* U' r! E% f5 T, F052-测试客户端服务器的连接
: a3 t( `* O7 ~# ]) K- v053-解决BUG' @0 a3 s* Q: O6 d7 {- ]( b: w
054-Card(8-9)0 N% d: i$ G$ G# G4 q) C1 z
055-GameServer(8-9)
0 M& P+ w$ R3 g. [" f& E1 W, e+ d056-修改客户端的链接方法
4 P1 s& }( P; F- G0 m1 u056-修改客户端的链接方法_20171124142335
8 V; F7 U" H8 i1 _057-定义操作码、子操作码,演示客户端如何给服务器发送请求
; I0 _# J) y0 x058-测试数据传输是否正确7 p G' u, q# w; m
059-Card(8-10)7 a" t ?1 L/ o [% G
060-GameServer(8-10)
2 \' n0 {; o3 B+ L, B061-创建账号缓存层,实现注册的一些方法# E( D/ F3 U( B( g0 D7 z
061-创建账号缓存层,实现注册的一些方法_20171124142334, e9 w$ e' ^. X% ]$ i1 T; u1 P
062-完成账号缓存的所有方法
1 _/ h% k" N% b- ]062-完成账号缓存的所有方法_20171124142334+ ^1 N+ A5 y- h- D8 E5 f
063-实现账号逻辑层% t" s! b8 r" _: @7 D
064-解决今日BUG2 X+ p$ L5 j; H' l7 F2 u* R" C
065-Card(8-11)
/ l: J' E$ G! Q5 p066-GameServer(8-11)
8 N9 t6 Y% Z& a- H2 M: |8 P067-开发提示面板
) y( s) @7 Y2 c @, s1 E E+ l068-给登录和注册面板添加提示& J0 N0 G5 B$ r' p* U
069-处理接收到的服务器发来的消息、优化发送网络消息的方法) k8 y& m1 u* W2 x7 S
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
, k0 Z6 m" H* @071-优化服务器,改变传输结果8 m1 I, L# P8 q& P3 i) X
072-Card(8-14)
, K5 {# n; h% p: r: G073-GameServer(8-14)
; Z8 x) ] u) Y074-初步实现场景管理器,融入到框架中
# j9 t. p* [8 M075-增加当场景加载完成的时候调用的方法' n/ N3 g# F( r
076-实现登录成功跳转场景
: B7 F, T3 |' t L6 y) M- ?& S {5 Y077-设计UI之主界面的信息面板- L% [. s% ]! n
078-设计UI之主界面的匹配面板
) Y* X/ H, T. }079-设计UI之主界面的设置面板' G9 e) O9 I, a, S% W" f2 X7 R
080-设计UI之主界面的创建面板! R* C6 q* V0 Q J1 d# e
081-Card(8-15): Y" m/ ~0 v0 h) b. X4 A9 G' t7 |
082.编写信息面板
- @; m5 ^% L( a$ n- h. o083开发匹配面板
7 T f" r$ A( W9 g8 z* o) [084.修改默认创建的脚本
! }2 M8 W2 |6 Y, M( {: K* x, x085.开发设置面板! }# i( A' Q- R" ]2 A, s8 l, T
086.开发创建面板- e* Y+ @, F& x# U9 l
087-Card(8-16)9 W1 J; H/ q! W5 U
088.创建角色数据模型
: @; f5 y) L- i* P6 T3 T089.开发角色数据的缓存层( |/ z/ _' _$ \6 C& e5 `2 G
090.完成角色数据缓存层& N$ C* V5 w7 {' v5 G
091-GameServer(8-17)
4 [+ B j- g/ k" e092创建有关角色的操作码. H+ I1 \ d8 [! u; I- _
093.实现用户逻辑层! Z8 O: D+ D! n. G9 v/ s( H
094.向服务器获取信息,在客户端创建用户处理类! @0 [$ p' j; v' f0 d$ z5 r
095.客户端处理获取角色信息的响应3 X2 J: O$ B. r2 Y- J% }6 ~
096.保存接收到的角色信息并且处理角色上线响应
8 I o% }8 e; j/ }) L097.发起创建请求和处理创建响应
3 Z( y3 Z9 A4 S- w# \4 x# S098.演示本日BUG* A. ^/ Y/ B* P* P& q; p" L, _9 @
099-GameServer(8-20)1 v# c! [% p& u1 U. g- R$ e
100-Card(8-20)! n+ B# K; l6 D8 \
101.更新客户端视图* u: B. l$ k8 s. H: s+ n- Y) g
102-编写匹配操作码$ E- x* n; H& V* f
103-定义匹配房间的数据模型
( t+ ]- o! E! Y% H3 i104-创建匹配缓存层,实现进入匹配队列
. C- Y' G9 Z' m105-实现匹配缓存其他所有的功能
7 F' w$ ^" U! X) g6 n106-创建匹配逻辑类,实现进入匹配房间功能: C+ `' F+ e- B( a2 x* H
107-优化服务器之群发消息0 [. s% [4 P2 ^! a+ @. m! L! D
108-创建匹配房间的传输模型,在逻辑层进行构造
9 [. ]9 t% b: Y, V109-实现离开匹配房间功能* L3 a$ B$ V& S7 x: Z" D8 X2 m* \
110-GameServer(8-24)$ d# w( `4 k5 K4 \( _ u0 E, B
111-实现玩家准备
1 I! l& D O7 s% e% @112-在客户端发起匹配请求5 y) R( R3 U/ Z( i5 c
113-GameServer(8-25)4 s' W4 U8 u7 m9 v/ C! `
114-Card(8-25)
6 }% j# t' s, {/ }115-创建MatchHandler,接收服务器的响应- L% o! l2 L0 q0 Z) S1 t) K0 A. H
116-保存房间信息,他人进入房间广播处理
) \% D {) ?0 t+ g117-玩家离开5 \$ z( ~1 p3 i
118-玩家准备和开始游戏的处理9 j3 o1 b' \! O5 O! p2 Y
119-GameServer(8-29)
) z' |1 ?: O% s; L7 i1 B$ e7 t120-Card(8-39) (1)
2 _) h1 Z% O. A: n. Y121-搭建战斗界面的左、右角色状态面板
+ Z9 y3 H* s, v8 t122-搭建战斗界面自我的状态面板
& V; w/ r8 X! e \: ?; b! v1 {, L123-搭建战斗界面上边的底牌面板. N2 D9 X# z/ z0 v) S" N" S- O4 P1 Y
124-搭建战斗界面下边的快捷聊天面板" M: b! _, z e3 ], }: I
125-搭建提示面板和结束面板
* x t3 p4 ~+ H- F9 v# b126-Card(8-30)
! u9 M; d0 Q& U# |( g' U127-创建出牌点,实现进入房间按钮功能
2 I/ P# q9 f$ v) b128-控制底牌显示,编写代码
' N3 y% C6 o3 `# L3 U. @9 r5 P129-在服务器工程内创建卡牌的传输模型类
# q# n& ^! D- i1 a1 W130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
# `! u# X# o/ T% Y6 q( G131-分别创建左、右角色的状态类(有破音)* v W/ p* v6 Q G+ M* y
132-ard(9-2) i, g- C' ^- e2 `) `& T
133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)* B. z, P: T0 U7 d/ \
134-如何控制玩家左、右玩家位置?(有破音)
, s( G# J1 Z* ?' z1 C135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
& P) I$ D: V1 }* v136-Card(9-4)6 Q3 b" T8 i9 x( c
137-GameServer(9-4)
N9 m! d3 ]# s; k138-解决左、右的代码重复部分
6 o- S, k8 i0 C. m8 d* |9 z. J- N1 Y139-创建自身的状态面板(有破音)
4 \0 u: M# }( Q# e( S6 `/ o4 I2 h) W140-完善自身进入更新状态面板) G& q3 l( q' r8 U2 l3 |; Q
141-CardGame(9-5)0 n$ x6 {1 V/ j; z5 g% I* }
142-找之前的BUG(一)
3 |4 F# i5 [- ]143-找之前的bug(二)
+ `5 o$ D1 ^& A4 U144-Card(9-6)
/ v; F" y1 l [5 w145-GameServer(9-6)
) T- A+ ^/ g. \146-发送自身准备的请求5 M$ ]" d; k- ~4 \: {6 y) ^
147-创建下边的面板的脚本5 O) [6 y, b" s9 Q& B
148-Card(9-7)
) i/ `$ o1 L3 i0 N2 ?* T149-创建聊天操作码,在客户的发起请求
' B' ] C. K9 U: @0 o3 `7 B" n+ @150-服务器处理聊天的请求,创建聊天传输模型1 b, Y8 T+ {, o- P+ k
151-创建聊天文字的常量类
! ~- |4 K( f# Y& y4 p152-Card(9-9)/ H7 h) v' v% o- T/ ~) J( h
153-GameServer(9-9)* z' }; F# N! {, m! |5 o( {8 v+ y
154-客户端接收响应,显示聊天文字6 F( `8 x/ t4 w. {
155-聊天声音的播放
# Q$ g& b7 B6 f* M$ U2 K7 g156-测试聊天BUG
X- w# Z. K+ m5 z1 z( |4 I9 H' G157-Card(9-10)4 h% n, Q$ y E1 L) U1 G
158-GameServer(9-10)) x, t& @/ M6 r. e, c9 q7 E5 R; r/ {
159-所有人准备完毕开始游戏,使用中介者模式触发
/ O- r3 E! H# N/ A$ \4 b2 O j160-逐层分析,创建玩家数据的传输模型
! T: v9 J' b' L9 u8 L A) D161-创建并初始化牌库,创建花色的常量类! X4 K: F3 L t1 P7 h! x) X
162-创建权值的常量类,完成创建牌库的过程
; x& C+ u9 q; R) x163-洗牌算法,完成牌库类7 ]0 H2 B$ [" ?9 m
164-创建回合管理类/ O3 v( f" d2 i- v3 o
165-GameServer(9-12)/ t+ L: V# w# y- ~2 v
166-初始化战斗房间,添加第一个方法:转换出牌) b( O' x* x0 o G/ ]' `) x
167-创建出牌类型,判断能不能管牌0 g' [4 `' q4 d8 ?0 Y
168-如果出牌判断成功就移除玩家的手牌( E; e5 `$ C' f* v, o9 ?- t
169-增加倍数和更新回合信息
9 f/ [$ g7 E, I' e8 T% Y170-发牌, U$ f2 U9 g6 \ w/ K9 |. e
171-设置地主身份,创建身份的常量类
2 s8 v! ~% i/ R172-补充一些辅助方法,完成战斗房间所有内容# G, b, M" }" x6 Z5 ^
173-GameServer(9-13)
: z8 a# O: g7 b! W' R174-创建战斗缓存层
/ `; `2 J7 I: f3 W175-定义战斗的一些操作码
c0 D" z* q: [176-编写开始战斗的逻辑
. A' F" R) B7 `1 @9 L1 g; _177-关于发送卡牌集合还是卡牌id的解释2 E3 @# r' \$ ?6 q2 h) X' t! D( a
178-GameServer(9-16)
5 M. W. I- l+ y179-实现抢地主的方法7 e2 P8 d- [# [: |2 ^
180-创建出牌的传输模型,获取选中牌的权值
" M7 M2 |6 R; x4 `" Q181-判断各种卡牌类型0 C8 P2 C0 U+ ^0 h& u. L
182-完成编写出牌的传输模型2 o* w. }: R2 }6 v1 M+ N; p
183-GameServer(9-18)7 t( g$ j1 U; \2 I) p4 p
184-玩家出牌在服务器的处理
' }( I. J: O {, K+ W. S185-转换出牌的实现
. o4 E$ [( H, G& a0 N186-游戏结束的处理
2 h+ I. ^& U! U" t, V187-不出的处理
0 s6 v7 f5 ^9 m# q% J" W188-玩家掉线的处理
1 b; A/ m7 Q9 e* z- B189-GameServer(9-20)7 X' w0 u- j8 E) r
190-在客户端创建战斗的处理类,编写获取卡牌的处理% K' X( z# y M" H" l! G$ F
191-创建客户端的卡牌控制类- x8 O; V G: ]2 o8 u: n2 ?
192-创建自身角色控制类,管理卡牌的创建
$ c Y( J$ I% Z T0 {193-创建左、右玩家的控制类,管理卡牌的创建
- L8 J8 i5 P* P) _5 I5 }194-Card(9-21)
1 {. n- ^- X) ~7 X195-给大家录制BUG过程% N9 m% W3 A& T/ X
196-GameServer(9-23)
9 }, `2 P. |( h( R5 @! y197-开始处理抢地主的响应9 M% T8 i3 S( z0 M; r0 X- Y
198-发送抢地主请求和抢地主成功的处理% n* i/ }( n, i4 @: X2 F
199-自身的玩家添加三张底牌的处理
, m0 o: e' h1 \% ~200-抢地主成功的处理完毕
0 [0 H; c1 {$ ^1 h) {7 p7 H201-测试抢地主并修改BUG( p* d0 h0 N$ U- N6 E% Y8 K2 {
202-Card(9-24)0 t+ z5 f0 M6 O0 }( A. U- y( E
203-GameServer(9-24)
( {3 |/ [6 F# m8 v9 U: ^# H204-接收来自服务器的出牌命令
" u" Y5 n \0 z! k4 R7 O+ [2 U205-客户端出牌的处理
+ I1 I% K2 A* ]8 A5 X206-向服务器发送不出的请求
8 J( o( O$ x9 [8 p( J+ g207-GameServer(9-25)
3 T( u1 L x/ |2 N3 n1 W2 U208-Card(9-25)
8 J! e+ p1 x' x9 m+ ~209-给卡片添加碰撞器让他能点击
& o2 h% f# @- N0 L3 C210-解决出牌BUG
# F: [* K! `* O211-移除出完的手牌
+ I1 Z, V! I5 n& u9 K1 R6 }3 i0 K7 v212-管理桌面的牌显示" l% T4 e( [- M' V0 b2 }. r+ v
213-出牌特效声音的播放+ c$ d% p3 A) l% r
214-GameServer(9-27). l; F1 E* t, _0 K, ~3 f4 D
215-Card(9-27)5 r& g, p& m) Z6 u( w W( C/ {
216-测试出牌BUG 上部% ^7 k2 {6 l" g) q0 n2 X2 e
217-测试BUG 下部
4 U* f$ A$ \1 L' _. _, q- J- Y0 g$ Z218-客户端+服务器(9-28)
! i! `5 O9 h, X& z. Q+ k219-创建OverPanel代码脚本4 a7 G# K9 V3 g* N# ?% Y) z
220-通过消息机制表现客户端的结束! {! N3 |0 M/ B9 V% L& W) Q9 [3 X
221-测试游戏结束
* F l a- L7 p* k& f222-创建背景音乐播放控制脚本3 R/ J& J2 s& k
223-给前两个场景添加背景音乐- c. f9 |5 P' A# {* B
224-完结与未完
% y. s9 Q1 \& R) |4 B( ^ r225-Card(9-30) s2 X- e/ @" i" q. v
226-GameServer(9-30): E" a6 e! b! o" U
227-扩展课之ProtoBuf
5 G8 v, i) L& k# @0 b8 |0 D228-扩展课之ProtoBuf(10-15)下载地址:% I/ a& L" `* t8 G9 J3 E
% D# U0 |1 j: _9 A. X
5 t! o8 P7 @7 G- R! a0 T9 S2 o5 L' o8 Z& D0 [: |7 r
|
|