|
|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
. V% J8 {; I! g6 V% i- l) c服务器采用:c# 开发
9 E. W2 u( G3 w. p7 o5 t+ q M客户端采用:Unity2017
% i G! R# t: M# f' s1 t
2 H& g: {) k( k+ _; t学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
) L0 e( P) @* S( G课程每天会有更新,难免有一些特殊情况望理解。
* Y' q7 {7 P; U$ Q9 t4 N! i个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。, E6 E7 `1 R0 g2 C. o$ h, i5 y6 d# ^
3 R2 D6 c0 `* Z) A' S" g1 \
严格意义上来说,本课程应该是两个课程合二为一了。
$ d; X8 Y3 [& E) i4 q& F第一个课程就是《从计算机网络都服务器编程》。. T- B$ Q; ^# O7 R1 |
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:& L n2 i; W$ y8 i1 c
什么是因特网?
# G- u* `. }4 ]1 p* l) O3 G什么是协议?
6 `+ H9 d( }6 P+ ]7 ~5 {7 {' a7 p什么是应用层?应用层协议?1 Y8 [1 `+ _# {
什么是运输层?运输层协议?$ Q* q. F0 k" C. o6 F7 o
什么是TCP协议?什么是UDP协议?
: F o6 L6 Q. K& \ `( Z( a4 D等等···" v. N. I O3 h z7 F @$ U S6 y& @2 ?3 \
(很深层次的知识,大家根据兴趣来进一步自己学习), k$ g$ j! ^3 i0 F$ ]+ I/ x+ s$ ]6 ?
知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。
# a9 A9 `/ ~ r7 B+ g9 |3 E; [% f9 _2 b; i
第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。
. Y. S- Y% q) i+ s, ]$ I斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。 O9 o3 b# k% e! ]" l
7 X! e+ T, q, ^/ |" `9 Z1 f9 r I$ }
! O% g7 F0 ]! M, \5 h0 ]001-课程介绍; |# f3 u# d/ j. C
003-因特网和协议% @) x I+ a; X3 T3 k9 |- [
004-分层体系结构- }& j D/ G+ J, @3 R
006-进程和套接字. j' f5 h! N. _6 s% D7 O
007-运输层协议TCP和UDP
- s1 \* r5 T7 [+ {008-应用层协议HTTP$ D" z. |8 D; S
009-socket服务端9 E+ }- w8 o& l3 U( c+ v* h6 g
010-socket客户端
F i% w- t! x" ?6 n3 I, x011-验证连接- h$ q. \# g$ p, ~1 M! D
012-SocketDemo- U( u% F2 U, j" M' q i
013-实现接收连接的异步事件- ?0 T" G! v* k9 S$ z% g
014-添加限制连接数的信号
w, M" {) `3 V5 G4 a# M' @015-封装客户端连接对象和编写连接池/ r" q; N+ i) a @
016-GameServer(8-1)
) ]: K* m: V" S' j G) E* t4 W$ n017-粘包拆包问题介绍
7 t2 O9 y; H6 o/ N s5 e) {9 w1 i018-采用包头+包尾的方式解决粘包和拆包9 B5 f8 h& d5 d7 k. L& [6 L
019-GameServer(8-3)
: g# [: f. Y8 B) `020实现异步网络接受数据
* v& i2 y& e9 Q! I9 ^# {021-客户端对自身接收的数据进行解析6 f% E/ b& _* A' L
022-构造SocketMsg负责网络消息的传递
8 }" `3 }: [6 H& f023-实现soceketMsg与byte[]的转化
1 j" [7 ?5 ~: D- K024-对象的序列化和反序列化
9 k7 X7 v C( P' W0 V# J0 e- `025-GameServer(8-3)_24 y& h/ ~3 l7 ^' c& h/ O
026-实现客户端断开连接4 B G3 Z1 h2 X. V! W
027-实现发送数据
8 G$ u) E5 l3 A2 i" g$ Q/ c028-助学篇:带大家回忆一下所开发的内容
6 P7 H2 x, [0 h3 q: M9 B. @7 o029-抽象出应用层
* _3 W+ p6 k1 K# z7 M a8 l" i4 x030-GameServer(8-4)0 ?" q* R' q, W: }; h" ?
031-开发定时任务功能(计时器),编写任务模型
1 N5 ?4 ?4 c2 d, q+ d9 `032-创建计时器管理类,监听到达间隔触发的事件9 Y% A; \, L' g7 e# V2 z
033-控制定时任务(计时器)的触发时间
: z& g7 L5 S2 Q9 K/ G; p! P, @034-开发线程安全的INT类型0 N- V g j1 ~! f
035-GameServer(8-6)
/ ~# J4 e* ]0 {8 F9 R/ S3 k( [& U036-实现单线程池
0 x9 v/ w9 @' r+ M! ]$ Y037-Unity2017下载
% S3 K! W; W( _038-创建工程导入素材$ }6 D7 G2 ], }# Y( c
039-Res( f8 w( H0 Q' _4 g
040-Card(8-7)
, Y: e+ D& d, Y; m041-GameServer(8-7)
/ e# `# o2 E8 X043-根据策划创建面板
* @/ T, z: x( m0 d! a9 W5 {044-导入客户端框架,创建PlayPanel脚本
* ^9 _; u4 T- {& s" P045-完成开始面板: b d* X! [9 M3 X
046-完成注册面板
! @+ h ^9 S6 s9 z0 T047-Card(8-8)
! p8 U& `, K! [$ p049-服务器架构介绍4 n4 V# O$ K3 S5 |! }
050-按照架构实现服务器- u# s" L2 |, s% z2 i7 z( n3 Z+ K
051-在客户端封装Socket,使其连接到服务器/ O. C" C3 R; N( O
052-测试客户端服务器的连接* a0 I# t+ S8 G0 P& p9 u1 D
053-解决BUG% K# x5 q" B8 r g; I! R8 h
054-Card(8-9)1 M* o5 k$ |( L: ^% F u W/ J
055-GameServer(8-9)# J6 x4 U7 l6 K, ~& b( m* E
056-修改客户端的链接方法
# a' d' y! P. p+ b) O056-修改客户端的链接方法_20171124142335
$ P* R" [' q. b; c8 H057-定义操作码、子操作码,演示客户端如何给服务器发送请求% B: \+ }: v' v% t5 C% H, c
058-测试数据传输是否正确- u4 J* y: W" V6 p: |( x
059-Card(8-10)
$ J; F1 j" W% b; `6 `: }- k; C6 ^060-GameServer(8-10)" R7 Q+ V* q% h/ \
061-创建账号缓存层,实现注册的一些方法3 {: t2 T6 o" j' e# U7 N) @5 C
061-创建账号缓存层,实现注册的一些方法_201711241423341 {: v: L0 h$ ^, Y4 l$ e
062-完成账号缓存的所有方法
( N1 Q% Q b' o% e062-完成账号缓存的所有方法_201711241423344 a# }' g( n% Y9 x% e" W
063-实现账号逻辑层* Y' o+ T9 }, K3 C6 k# m& v$ ^: n
064-解决今日BUG
7 @/ E- W, _( w4 C4 a+ {0 `/ O065-Card(8-11)
5 Y/ \2 ~. @( Q" J+ C' H066-GameServer(8-11)
4 p" Q$ G7 `( {# H9 [067-开发提示面板, R$ I! W: P- v Y; y" \' O3 W2 R
068-给登录和注册面板添加提示4 s; _+ x' N9 [; {
069-处理接收到的服务器发来的消息、优化发送网络消息的方法
h0 ]3 h* e" L5 R# ]$ Q070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)
( Q% W$ W* p2 H2 i; c# b; X3 C071-优化服务器,改变传输结果) U9 ]$ B" U3 ]8 }4 O4 B3 t) C, n8 L
072-Card(8-14)
- J) L- e P4 x+ g; p9 \0 p9 N073-GameServer(8-14)# f) @, r" j0 P1 S0 j+ m5 y
074-初步实现场景管理器,融入到框架中+ V u+ P, b. R9 @5 \( o! b
075-增加当场景加载完成的时候调用的方法. I1 E1 p8 ~, T. v {. e: {( U& s# U
076-实现登录成功跳转场景
/ \+ H: m2 M9 E( s" J6 u7 V077-设计UI之主界面的信息面板
! u' i0 U8 ?0 v. `3 C, G! r078-设计UI之主界面的匹配面板; i) b0 T3 L7 }% ?- L8 x7 l
079-设计UI之主界面的设置面板* `4 m8 F! ^* a# n0 h* r" h& ]
080-设计UI之主界面的创建面板8 `. [& x& `5 ?9 E4 M6 q
081-Card(8-15)
; T) L( X) p. M# D$ a. ~082.编写信息面板
; O' U4 S6 ~# i" K8 p+ @0 O' X083开发匹配面板0 \4 r& [( F1 i
084.修改默认创建的脚本
" m5 I$ C/ m3 z7 }' B" v085.开发设置面板
+ q# h9 k2 b& z/ L/ _; @086.开发创建面板
0 Y& D2 c0 g6 P$ w* v087-Card(8-16)
- y! ?* [7 _% |1 F! I9 R& E088.创建角色数据模型
@6 s! O1 o' G" Q089.开发角色数据的缓存层
# B: ^, H/ j- [ x090.完成角色数据缓存层
! Y n! f5 v4 j/ E8 Y* K l091-GameServer(8-17)0 r; d; {) y% a5 t- s3 o. j
092创建有关角色的操作码
n z+ [) W# O* B" L5 q093.实现用户逻辑层5 R. ` Z5 I0 n3 c; I! s. T
094.向服务器获取信息,在客户端创建用户处理类# |9 H" x( N3 ~
095.客户端处理获取角色信息的响应
' S" |/ u5 R! L6 F4 I096.保存接收到的角色信息并且处理角色上线响应
: n. D: W3 h! D6 U097.发起创建请求和处理创建响应
8 L9 K% u4 V) c; F! C098.演示本日BUG/ |& Q" ?$ Y3 a% R" s3 I( z
099-GameServer(8-20)2 |3 f$ \( ~ d+ C$ A4 h
100-Card(8-20)
& k2 ]" J: w& z; h101.更新客户端视图. j4 H/ O9 y A# e
102-编写匹配操作码0 q5 `& D) z- `( M$ ^- J+ z
103-定义匹配房间的数据模型, n* P' A1 m2 J$ ?# W6 f: ]
104-创建匹配缓存层,实现进入匹配队列) B. A; O( G/ A7 `
105-实现匹配缓存其他所有的功能" V- j: W9 Y& A; V3 x. ?+ Z
106-创建匹配逻辑类,实现进入匹配房间功能/ }- T( l5 B' }2 N# i
107-优化服务器之群发消息
6 n0 L+ ?7 X& i; O5 `0 {108-创建匹配房间的传输模型,在逻辑层进行构造
' E9 I$ G. ~1 I109-实现离开匹配房间功能/ X6 t6 L! X- l5 Q
110-GameServer(8-24)
( [6 w* @1 \5 U: {; t) ?111-实现玩家准备. V8 n# o* V, W% i. s" B1 w: n
112-在客户端发起匹配请求& h" a5 c+ d7 ^ N
113-GameServer(8-25)! {. H: e3 Z M8 t: H; l5 Y+ D
114-Card(8-25). X, B1 |0 k' e
115-创建MatchHandler,接收服务器的响应
g- o! F! R; t0 I5 z116-保存房间信息,他人进入房间广播处理' v v% f; T7 M6 n
117-玩家离开
% J+ B3 p1 x; h" i, N5 y& a118-玩家准备和开始游戏的处理
6 C, W! Q7 I; C" v4 P119-GameServer(8-29)6 n' J% k# V! ?8 P" |4 n
120-Card(8-39) (1)
3 Z) B6 r# X2 q121-搭建战斗界面的左、右角色状态面板. y. `& B6 b" a9 B6 \2 [; e
122-搭建战斗界面自我的状态面板' ?8 r6 o) S6 d1 O! u- q/ P
123-搭建战斗界面上边的底牌面板
2 B6 R p1 B1 E% s& y) ?124-搭建战斗界面下边的快捷聊天面板
9 q7 l$ [. C% o3 M; a1 @125-搭建提示面板和结束面板
- c2 r) A+ l& x, i126-Card(8-30)
( b1 L- j5 I- \127-创建出牌点,实现进入房间按钮功能
+ x* j) S7 I% f5 J128-控制底牌显示,编写代码& F5 `$ M! h6 p
129-在服务器工程内创建卡牌的传输模型类
: R( ] u2 v$ N130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
* R! |8 u0 }1 H131-分别创建左、右角色的状态类(有破音)
7 ^5 E0 @* V$ T& W132-ard(9-2)
! T/ [- B1 m% _0 l133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)3 O1 u6 b6 u1 q0 x$ k- c: r+ t# @. J
134-如何控制玩家左、右玩家位置?(有破音)
; c- L5 ~2 U* b" o$ _9 z2 f7 b135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
" F8 S3 v- l3 [) |; P% I% d136-Card(9-4)% H- w8 V8 O4 P1 ]2 S
137-GameServer(9-4)
; m, _$ Y$ l8 A7 O0 @8 u* R4 j138-解决左、右的代码重复部分# z0 A2 h3 i" s4 |
139-创建自身的状态面板(有破音)3 ]: K: C- a! M4 ]
140-完善自身进入更新状态面板
/ i) k1 ?' d$ g+ U( h8 _141-CardGame(9-5)
7 I7 j$ B' E; I1 @; u142-找之前的BUG(一)
; _" O" K, |5 b! [) o$ F0 Z' a+ M143-找之前的bug(二)% H( N1 S( Q$ D# T2 P1 g; c
144-Card(9-6)1 d* d/ n6 f; e. C4 S
145-GameServer(9-6)
# ?# Q& K S" R. L: l146-发送自身准备的请求
/ C0 C: G, n: a$ w3 [147-创建下边的面板的脚本" k8 a2 K4 C* Y
148-Card(9-7)
3 |5 j. L4 ~. z6 N' b0 |6 f8 |149-创建聊天操作码,在客户的发起请求* d! ]2 }7 S/ ?/ K8 m1 G4 X8 `1 G
150-服务器处理聊天的请求,创建聊天传输模型
! A- G: W% F! A' H% d8 v151-创建聊天文字的常量类; \) C8 C4 z4 y
152-Card(9-9)* b3 r7 }* P& q J0 z" h
153-GameServer(9-9)
; |; w5 s8 h) j$ k4 A) j5 p154-客户端接收响应,显示聊天文字
8 K1 p# l8 ?6 [9 G' I% ?) t155-聊天声音的播放7 o+ L* R' B7 K, T( o# u
156-测试聊天BUG
0 g. B4 ~5 |& U' i' N1 c157-Card(9-10)/ m/ n2 [! H x
158-GameServer(9-10)/ n4 m/ b# ^3 A# v: x
159-所有人准备完毕开始游戏,使用中介者模式触发: p$ [, O% B: @3 X- ]
160-逐层分析,创建玩家数据的传输模型
; r1 O* Y) T+ d6 r3 I, o161-创建并初始化牌库,创建花色的常量类
" `% Q: T+ T7 n' h1 c7 y& K+ h162-创建权值的常量类,完成创建牌库的过程
- a& L( a5 \; L' v6 w163-洗牌算法,完成牌库类
! O I0 w- s- g5 L! b" n164-创建回合管理类
" w4 P# W/ r9 w# @5 I4 _165-GameServer(9-12)
- Z& X8 O& v8 @9 Z5 c5 k# I2 Y! N166-初始化战斗房间,添加第一个方法:转换出牌$ H0 c4 I9 _" W
167-创建出牌类型,判断能不能管牌
# L: @, o. t/ G, u# D9 s168-如果出牌判断成功就移除玩家的手牌
2 P' {, C& i7 N& T, f169-增加倍数和更新回合信息
. T. ]* G, H1 b4 D% }) _170-发牌
Y* k# j# N1 l3 b- p4 t171-设置地主身份,创建身份的常量类
- Y; k& g; w! m: { Q; y# g. R172-补充一些辅助方法,完成战斗房间所有内容" u5 W+ B/ ^3 s1 V
173-GameServer(9-13)% G& d5 v1 h* J8 m h
174-创建战斗缓存层
( Y h0 ~! e0 X) o# T175-定义战斗的一些操作码
* q3 e, M& b6 l( _! `+ d* }176-编写开始战斗的逻辑
2 ?: U/ n' p# G5 V177-关于发送卡牌集合还是卡牌id的解释
" `, c, Z7 b" H& f$ H- D$ t8 v k. N5 B# J178-GameServer(9-16)
' }/ D" ]4 j k5 t1 B& y9 P179-实现抢地主的方法% {5 W2 {) X' ]# ?+ F
180-创建出牌的传输模型,获取选中牌的权值
# u) R2 p8 ~0 r9 t2 U/ T: A181-判断各种卡牌类型; J) q3 k E A- S( I; r
182-完成编写出牌的传输模型
m6 ]/ q, a* w. t" b. q4 V9 U183-GameServer(9-18)
u" o- `$ u4 j6 B, {* q1 p" @# i$ z184-玩家出牌在服务器的处理
6 x3 D- i2 P6 F185-转换出牌的实现
0 }1 }+ } I0 J+ j+ i4 T$ L186-游戏结束的处理
$ j! |5 `( C! o187-不出的处理
`$ z p6 I' I0 E188-玩家掉线的处理
6 ^* Q& H, m1 L- l8 T. c189-GameServer(9-20)
, F# M. n) g2 F' u5 p190-在客户端创建战斗的处理类,编写获取卡牌的处理: P4 O( S! x$ u: Q9 R
191-创建客户端的卡牌控制类
+ s. z! A# s! Y J5 T+ h192-创建自身角色控制类,管理卡牌的创建% d3 I+ \( p% w
193-创建左、右玩家的控制类,管理卡牌的创建9 A1 ~1 g: t& Q) p/ N9 U
194-Card(9-21)
6 E# R( c7 [8 Y5 t. @. r195-给大家录制BUG过程
; K; R9 A: c3 L( S- S0 N196-GameServer(9-23)
6 L8 ]; v& p4 o& d7 _1 [197-开始处理抢地主的响应
7 \8 C/ o+ A3 t$ n198-发送抢地主请求和抢地主成功的处理 u3 r2 U% Q+ w$ x0 P( r
199-自身的玩家添加三张底牌的处理0 T% l/ D% I2 @1 B
200-抢地主成功的处理完毕
: y" q* G6 A1 o/ _201-测试抢地主并修改BUG
" R3 w# \9 z( ~8 u$ Z) i2 C' q" Z p4 V202-Card(9-24)
( V6 _7 W. n- ?% g* k5 X$ h203-GameServer(9-24) Q: O6 j. s7 Q. D
204-接收来自服务器的出牌命令( G a. ^" T3 c' W2 \1 n) e+ i
205-客户端出牌的处理: `) b; |% k- S3 ?
206-向服务器发送不出的请求
1 F( q6 ]5 ~( x2 U( _' O207-GameServer(9-25)
3 g9 }( `% x7 d% s# Q208-Card(9-25)9 K. s0 m+ U$ ~
209-给卡片添加碰撞器让他能点击7 ~2 Z* A2 H1 E/ U& F6 _0 ?2 H
210-解决出牌BUG
2 ?+ r8 ]& P+ w1 d5 w+ X& d211-移除出完的手牌
* j4 E( D/ M$ J9 [6 u- M212-管理桌面的牌显示" h }- A/ [- s* J7 l9 n
213-出牌特效声音的播放
/ p2 s5 a% I/ B6 [! ?214-GameServer(9-27)
, U0 ?* s. m6 g, A; Y6 }215-Card(9-27)
- b5 h% _: l" i% }" n: c7 h216-测试出牌BUG 上部
( e0 m _9 D* L) I% W217-测试BUG 下部
7 c# N9 x! P0 y4 h4 c218-客户端+服务器(9-28)5 r! ?1 c* M" I0 N6 m7 j
219-创建OverPanel代码脚本
3 U* I7 i' T/ z0 T. V- f% H b220-通过消息机制表现客户端的结束7 ]$ j9 |: ~/ _* W) d
221-测试游戏结束. E" k- L4 @! J5 O: `1 c
222-创建背景音乐播放控制脚本3 \) n; y$ x& l6 }& _
223-给前两个场景添加背景音乐3 m$ x1 r* T) @# m" E+ S
224-完结与未完+ i" Q: w; q' I" q c
225-Card(9-30)# V' a/ N' {5 D o1 {3 i
226-GameServer(9-30)% W8 j. B" v; d; ?& j% Q
227-扩展课之ProtoBuf G& t. B5 C& y
228-扩展课之ProtoBuf(10-15)下载地址:# _- S' m* b4 h( ~
& a* L6 O: C- p# l) P6 {
: `' x s; M" F; z. e: ?
; v1 j V; d( o' u" i! I3 V9 ~$ X
|
|