|
本课程会带领大家从0到1的开发一款强联网卡牌游戏:斗地主,不容错过哦。
) g/ O8 B* k" V- f* N# M服务器采用:c# 开发
/ q/ z4 S0 m$ S& a客户端采用:Unity2017
. O! o/ A' z5 O6 d- e4 P1 Z* ^0 v
学完并熟悉掌握本课程会熟悉网游开发模式,独立设计并开发出一款不错的网游。
; T" [2 F, Q1 @2 o: k课程每天会有更新,难免有一些特殊情况望理解。
6 g# e7 ]9 w) ?. J个人独立开发,素材都是从网络上搜集,如果瑕疵,请见谅。4 E! S0 j. e2 f* J# a
/ |6 |3 ?/ _0 }/ V V; w严格意义上来说,本课程应该是两个课程合二为一了。- w% w2 K/ E1 o2 Z* l; J; ]+ {% \
第一个课程就是《从计算机网络都服务器编程》。7 p, p, d- h, N$ S Y* A
关于服务器,很多初学者都不了解,就觉得它很神奇,而且一接触它的代码就会发蒙,就是看不懂。为什么呢?因为不了解,所以我觉得应该从计算机网络这一层次开始说起,比如:
$ T( J) Q$ D# h6 B6 A; |什么是因特网?
+ S* h# T% h" t5 I# n5 u什么是协议?# T. |% U$ I _ Z; X* Z) ]
什么是应用层?应用层协议?2 P' n7 e5 f+ n3 e$ Q" l+ T2 d- _
什么是运输层?运输层协议?
. y" X' u2 l* M, `7 [什么是TCP协议?什么是UDP协议?8 W+ C+ M. O6 }. G
等等···
4 N: G6 X! X# U% c(很深层次的知识,大家根据兴趣来进一步自己学习)
0 N0 W) ~- G1 _5 ~知道了这些之后,就可以开始进行服务器编程了,包括协议订制,数据传输等等。其实大部分.Net都给封装好了,我们只是调用一下而已。最后做出来的使用方式和Photon Server基本一致,如果学过我之前课程的话那应该就会使用,不会配置一些乱七八糟的东西,而且调试错误可以直接断点,很方便。由于Photon Server适合某些特定的开发者使用,面试或者一些公司应用不广,而这个socket就很通用了。: O# X4 Q$ e& e& F# ?
0 ?8 {& F. W( w6 R
第二个课程就是《斗地主》的游戏开发部分了,通过实战来教大家服务器怎么使用,怎么实现多客户端的同步。' r4 U% }6 o! T8 S5 y/ `: P5 C
斗地主大家应该都不陌生,所以这一部分就不用过多介绍了。客户端的架构是使用的之前的课程《基于消息机制的框架》,采用消息中心的思想,开发类似发邮件、收邮件的机制,来彻底杜绝脚本之间强耦合现象。
* N% k N: e% X) x% L" i
# t( T' f$ s D) o9 V
. o q0 y3 @8 K1 m" N1 g001-课程介绍
+ r9 m a4 E6 C3 |003-因特网和协议+ }6 d( ]# W; C; f1 l- x7 u
004-分层体系结构5 M: u, o, e6 `
006-进程和套接字
9 n4 E% ^/ P; C" k! t$ u007-运输层协议TCP和UDP
8 ~2 s6 h- d( W3 Z; i008-应用层协议HTTP# [8 }, S1 \8 c: R3 r9 C
009-socket服务端
% }; {, m- M$ u: U, G; A010-socket客户端
( k0 f6 e0 R( y! O011-验证连接
" o5 w, |6 p! z1 `012-SocketDemo: [- t \0 @, w/ A
013-实现接收连接的异步事件, g4 P; P% o4 F0 F( k4 s+ J2 j
014-添加限制连接数的信号1 q0 s- ?/ ` \5 z1 g
015-封装客户端连接对象和编写连接池
3 {! r$ E6 M2 R! |: s% d! f016-GameServer(8-1)2 z+ ^1 E9 _+ I$ W; y
017-粘包拆包问题介绍/ |! o' n/ |$ b, w4 H, j: s) J
018-采用包头+包尾的方式解决粘包和拆包# h' n7 ~% O8 G; F5 h5 D" `
019-GameServer(8-3)
/ m; M% R3 `! Z7 U020实现异步网络接受数据
( p2 w! y5 q4 i, b0 ^021-客户端对自身接收的数据进行解析
; Q; _) v& F D7 I022-构造SocketMsg负责网络消息的传递/ C! T8 h- v- o; K. \3 c
023-实现soceketMsg与byte[]的转化, {0 ~$ F7 M* T; c c, J
024-对象的序列化和反序列化6 ^* U* n, f3 z" {5 V' n
025-GameServer(8-3)_2
1 R8 H: M) r4 K7 c' n' @026-实现客户端断开连接
. @4 E5 \ z/ V, X0 I027-实现发送数据
# J d: l1 E3 Y5 _$ W }5 ^028-助学篇:带大家回忆一下所开发的内容+ G/ [: s2 ?. w1 t+ p3 ^+ `
029-抽象出应用层7 r7 ?& _# {( e$ |8 n. }
030-GameServer(8-4)
( d! G8 l/ h" [* G; Z8 Y031-开发定时任务功能(计时器),编写任务模型
, Q5 r& A3 `1 x$ Y6 N6 D8 i032-创建计时器管理类,监听到达间隔触发的事件
3 P; L" v8 L; d( m% Y0 f2 ^, ?033-控制定时任务(计时器)的触发时间
% K: Z4 Q5 w1 p- V$ E2 W+ F034-开发线程安全的INT类型
6 H/ O) W" P2 p1 A8 s% \ N9 }035-GameServer(8-6)6 j% E. n Q1 j. v4 Y9 ~
036-实现单线程池3 G E" w, z4 s9 Z
037-Unity2017下载% Z; A% E7 {& p. \' q
038-创建工程导入素材
8 R y- ]. R/ [( t3 Z4 B039-Res
; \7 k2 X# X y% x$ {. q040-Card(8-7)4 {5 i' T' }% B6 g2 r* K) r
041-GameServer(8-7)) g: m" o" m3 O! l* N* G2 l
043-根据策划创建面板+ b F" n5 f3 h8 Z5 C. K
044-导入客户端框架,创建PlayPanel脚本
2 V7 S( \0 E7 j% ~045-完成开始面板
- o, q+ e% E' e* I2 N9 ^7 G046-完成注册面板
f4 [: P1 I9 T( X# z6 Y047-Card(8-8)
! B/ P0 ?, i- \: J1 N049-服务器架构介绍. Q6 p1 {6 U8 Y" `* a. a. [) Z
050-按照架构实现服务器
3 c5 `0 Q5 m% W* ]+ ]; p3 \# f051-在客户端封装Socket,使其连接到服务器
4 x7 K: j5 e! |9 n7 |052-测试客户端服务器的连接6 \$ U A( y ]
053-解决BUG
) \& o, [5 C) v1 ? C054-Card(8-9) Y7 k# x% @9 f5 }1 B% K9 h% i& x
055-GameServer(8-9)1 v7 R. R' d# T6 B
056-修改客户端的链接方法
9 ~! k0 E3 I$ n- C& S( s056-修改客户端的链接方法_20171124142335
! e0 v% L7 m$ }057-定义操作码、子操作码,演示客户端如何给服务器发送请求& P# M9 u2 m3 L4 E
058-测试数据传输是否正确, A# t& E1 I' e
059-Card(8-10)- X5 U/ `8 t7 \3 D% i
060-GameServer(8-10)# j& @/ i! W/ I8 o6 p: q% R
061-创建账号缓存层,实现注册的一些方法& M+ b r8 y/ n) y
061-创建账号缓存层,实现注册的一些方法_20171124142334
3 G3 R5 q" E( v; h4 P4 \062-完成账号缓存的所有方法- q% @. `: b+ s B
062-完成账号缓存的所有方法_20171124142334$ R$ O: ~) h8 N8 |: F- a
063-实现账号逻辑层5 |2 A! }$ A+ p
064-解决今日BUG+ s: d }. k9 T0 q" M" V
065-Card(8-11)- G5 ?6 L* v( a
066-GameServer(8-11)8 |4 D9 ^; D2 i9 B8 p! G' j5 M
067-开发提示面板
/ W3 d- [1 g, N2 Y: _' V+ C/ ]+ x068-给登录和注册面板添加提示+ z9 [* l. C6 F! S% Q/ G
069-处理接收到的服务器发来的消息、优化发送网络消息的方法5 J4 n* p4 R3 N/ y& I3 f
070-实现客户端的账号处理、怎样和服务器交互(后面调个bug)) `( u" n# q- O
071-优化服务器,改变传输结果
8 H9 ? A" B' {5 T- H% V7 b072-Card(8-14)
1 R" q- V/ ^/ G- n7 i0 e073-GameServer(8-14)
7 e4 F7 u7 U- ^0 k6 b* T3 _3 J074-初步实现场景管理器,融入到框架中, P, t t+ Y E& {
075-增加当场景加载完成的时候调用的方法6 @1 C, j5 n1 ]
076-实现登录成功跳转场景% l: [; I: r$ K; \$ ]$ z* A3 ^
077-设计UI之主界面的信息面板; }2 ~* p' x( n- k
078-设计UI之主界面的匹配面板
' J6 P7 D% @7 r; t; j079-设计UI之主界面的设置面板
! d6 r+ ?, @6 p9 V0 o080-设计UI之主界面的创建面板2 ^2 q8 k7 ?# e. r( `
081-Card(8-15)
1 l% ~7 w/ X" u l; e082.编写信息面板4 b6 Z0 |, x9 E- k5 u1 ~
083开发匹配面板
) C( C3 W# V; j) ]084.修改默认创建的脚本) H9 `1 f( r2 _& S% O
085.开发设置面板) u. J, M) Y. T1 g
086.开发创建面板
H+ F/ M1 p! B2 ]% w087-Card(8-16)6 O* d9 u! `+ a$ [2 u/ ]) m
088.创建角色数据模型
& G4 a" e% [3 p' s0 }089.开发角色数据的缓存层" ]# }5 D0 c5 e5 ~ ]1 M
090.完成角色数据缓存层( B) B4 x2 g6 M1 l& X6 S# v
091-GameServer(8-17)6 {) w+ I( ~* }
092创建有关角色的操作码
3 W0 N( y3 f2 a G' b093.实现用户逻辑层
, ~# m8 V+ ^" W+ `- \+ f! q$ D. G094.向服务器获取信息,在客户端创建用户处理类& c) _ E) x8 j1 Y. U5 H" Q
095.客户端处理获取角色信息的响应: t1 D6 _9 T# h7 s
096.保存接收到的角色信息并且处理角色上线响应
6 J+ q3 ~. v( D; [4 j- f! Z; X097.发起创建请求和处理创建响应: {$ f) c, V- C4 Q
098.演示本日BUG
; ]6 C: T+ M! I: b1 Z099-GameServer(8-20)
8 P% O5 w8 l& _, F& b8 ?100-Card(8-20)# k4 m9 S2 `* ]
101.更新客户端视图; a4 `, M, ^! n6 l5 H4 r) t
102-编写匹配操作码0 C; w( m: k0 w$ J3 q3 S
103-定义匹配房间的数据模型
1 Y: }) i+ b2 r; C: T7 k104-创建匹配缓存层,实现进入匹配队列5 ~9 A! G6 @) C5 q; n& f
105-实现匹配缓存其他所有的功能
: X/ J# ] P- I8 g8 B106-创建匹配逻辑类,实现进入匹配房间功能& l' K m& ]" k$ l- e: D* U
107-优化服务器之群发消息6 a* F% J: D, t7 h B9 \" R; q+ Q" n
108-创建匹配房间的传输模型,在逻辑层进行构造
/ C2 L/ u9 b& M0 K" @9 \109-实现离开匹配房间功能! f2 w$ z$ A/ S+ H: e1 \ H
110-GameServer(8-24)
* R# a4 b: u# r( w1 M0 \" k111-实现玩家准备
a( ^* Z" q7 k112-在客户端发起匹配请求5 d% N; H& v9 P+ c- v( T! ?* [
113-GameServer(8-25)
5 Z+ t( Z; P2 c" P7 l! m o" m114-Card(8-25)
# q) w( D# `# i! q115-创建MatchHandler,接收服务器的响应8 j. _4 {8 j6 X1 {5 ~
116-保存房间信息,他人进入房间广播处理, |! z" `% f/ u% G y; i/ W; t' a
117-玩家离开
' V/ g+ p) k+ O* `6 b4 q! O118-玩家准备和开始游戏的处理
/ N. u1 R8 I' |6 J: h9 j1 b. T119-GameServer(8-29)" m& n( W8 W- o. `9 c
120-Card(8-39) (1)
- r' z, w0 N4 F1 c) s2 y121-搭建战斗界面的左、右角色状态面板
% T8 ?4 {! x8 E1 a" T( b! r" _. Y122-搭建战斗界面自我的状态面板- [$ Y' O0 i2 e+ U# _
123-搭建战斗界面上边的底牌面板8 I' j J4 a- q* @& n w: ?* C
124-搭建战斗界面下边的快捷聊天面板; U& K9 F/ U2 w- x; q
125-搭建提示面板和结束面板
$ V0 t( l2 b8 V126-Card(8-30)
' t( Y: N# a9 K/ D127-创建出牌点,实现进入房间按钮功能
) x9 |* L! p5 ?/ E" D: u128-控制底牌显示,编写代码! `8 j9 A" ?- V3 D/ a
129-在服务器工程内创建卡牌的传输模型类
' ]/ O# U# S7 N1 [" M6 Z130-分析并创建状态面板的基类(有很强破音,别戴耳机,老师的麦又坏了)
( }3 ^% T, p! r+ W0 S9 a131-分别创建左、右角色的状态类(有破音)
! s4 [; Z0 o' B* s& ]4 D132-ard(9-2)
8 s3 G" Q; @5 N; x7 G) E9 x133-在匹配网络处理类里面和左、右角色的状态类互相相应(有破音)* N5 H4 N$ b0 f, G3 D6 [# c
134-如何控制玩家左、右玩家位置?(有破音)
- F, f" c' D7 `7 {1 J1 s9 e3 Y135-进一步修改匹配处理类和左、右角色的相互响应(有破音、)
4 i% L" L8 [6 J! Y8 G. m" u6 N136-Card(9-4)* M, M! C1 X+ y$ c
137-GameServer(9-4)
1 p7 T; e4 T2 _/ O. }# v138-解决左、右的代码重复部分
% `1 s( G' \0 ?" E% y4 F' _) l139-创建自身的状态面板(有破音)4 c2 |/ D( p- b) \
140-完善自身进入更新状态面板# L8 r7 L1 b! O. A$ S/ d" {
141-CardGame(9-5)
" E" U0 F# I0 @( G! C' K* @2 U3 r) E3 y142-找之前的BUG(一)
: J3 @7 S2 @. b3 R, K143-找之前的bug(二): ?) y% h& u; J
144-Card(9-6)& \ G% ^% \* ?& ~8 n' Z+ z5 R0 x
145-GameServer(9-6)6 ?4 f7 ~9 B2 [0 Y/ i$ a0 E. O" h! ?) |
146-发送自身准备的请求
3 e, ^2 Y. N; p4 @147-创建下边的面板的脚本
3 ]1 j" X* a7 N, L9 j* e2 S: z148-Card(9-7)# ^! A* ?: c0 k6 t& T
149-创建聊天操作码,在客户的发起请求
/ j D" \3 b! T$ h150-服务器处理聊天的请求,创建聊天传输模型/ g! W9 b; i5 p* O
151-创建聊天文字的常量类
* r$ O/ D5 W4 [) N5 X- @" W P152-Card(9-9) P: C+ R8 U) f1 c: U2 l
153-GameServer(9-9)
$ J. y9 q* [5 M2 ?( A. w( h154-客户端接收响应,显示聊天文字
2 T7 G2 ~4 v. ?" {8 }, Q9 V155-聊天声音的播放1 I: A3 |2 P* P# m4 N1 f% a, H ]
156-测试聊天BUG
% T" A! A/ z' s B# y& K+ h157-Card(9-10)
5 A3 |0 m& Z* q6 C158-GameServer(9-10)
& ~6 `+ U; v/ _, q4 [( c! i159-所有人准备完毕开始游戏,使用中介者模式触发7 |! m3 V/ n) m- g
160-逐层分析,创建玩家数据的传输模型: {% U, G( d( P5 k! z- [6 a1 y/ m& ]
161-创建并初始化牌库,创建花色的常量类
# F" K) T8 e) L) s! U. f7 D' x162-创建权值的常量类,完成创建牌库的过程
5 g! Z1 d6 y/ v+ h! _8 n4 o163-洗牌算法,完成牌库类
/ B5 V. j% T+ B2 ^164-创建回合管理类# H: @& B8 ] F
165-GameServer(9-12)! \" r: j: f3 L" l! z c- E' V4 v$ U
166-初始化战斗房间,添加第一个方法:转换出牌7 I" k/ x! {, G. h0 q" e2 s
167-创建出牌类型,判断能不能管牌
" Q- b: K5 R6 }9 p% p168-如果出牌判断成功就移除玩家的手牌9 Q) q8 v0 Z+ w# k" j; c; \
169-增加倍数和更新回合信息+ J8 n) K5 i# Q8 C" F
170-发牌
* v+ o; R9 z( A! _1 i" f1 D$ P171-设置地主身份,创建身份的常量类
. F# U( {0 @5 _8 H1 Y$ G172-补充一些辅助方法,完成战斗房间所有内容8 P8 B& ]' J4 q1 @
173-GameServer(9-13)
3 x* H- F7 R$ j h% Z174-创建战斗缓存层- o4 X: a& V. \3 S. o6 w, m
175-定义战斗的一些操作码, \; h% d) v$ N% [' o
176-编写开始战斗的逻辑
& ~' p/ E( Q* Q5 k7 @ i% ]177-关于发送卡牌集合还是卡牌id的解释8 W; c& v! R6 m I
178-GameServer(9-16) F+ \( n6 M' k
179-实现抢地主的方法
1 @# n" h H1 y4 u! `180-创建出牌的传输模型,获取选中牌的权值+ T& G; b( n# s" {" O
181-判断各种卡牌类型) M1 r6 h1 F7 @5 @ l0 D* Z: Q
182-完成编写出牌的传输模型 r' ~1 V1 s6 X8 ]: J" N
183-GameServer(9-18)
; q7 S% k$ i& d184-玩家出牌在服务器的处理$ B1 ?3 h8 K0 n* A# @: q$ A
185-转换出牌的实现
6 l: H" R" x& ~, b" G8 O2 }& x* K186-游戏结束的处理
; d _1 t$ L; F' R187-不出的处理
+ k& f; [% S- o0 l* E188-玩家掉线的处理; V- p% `; b. @8 m5 i$ G4 Q* m- i
189-GameServer(9-20)
1 |6 p9 r; J* J; c$ b+ i, q190-在客户端创建战斗的处理类,编写获取卡牌的处理
& q0 o9 h, P; C191-创建客户端的卡牌控制类
/ e6 g5 {6 ^+ k192-创建自身角色控制类,管理卡牌的创建3 ?6 N3 s. P( V5 h0 C: G/ S8 `
193-创建左、右玩家的控制类,管理卡牌的创建2 \' D' R+ a8 k1 O0 v
194-Card(9-21) J* ~' G! k4 ?
195-给大家录制BUG过程
' W( M9 a) A% r, A' V+ B2 @196-GameServer(9-23)
0 J6 G7 m8 R" k6 Z197-开始处理抢地主的响应
+ Z' o: C/ i t( V, ]& D198-发送抢地主请求和抢地主成功的处理
& ^3 `, e% Z4 P. E5 Y199-自身的玩家添加三张底牌的处理
# ]/ F0 j: H6 R5 @6 J4 q) I9 n200-抢地主成功的处理完毕
/ @* E4 p6 a; x- Z8 ]; I1 @& c201-测试抢地主并修改BUG* s% m5 |* l& d1 p
202-Card(9-24)5 [+ F* U9 [# h
203-GameServer(9-24)" U \6 a$ @8 a: R! n
204-接收来自服务器的出牌命令
3 e- Z. F$ j. C# h1 A. q: Z7 v205-客户端出牌的处理( M$ u8 H) [" P+ R/ i0 |1 W0 Q2 V( e/ |
206-向服务器发送不出的请求( T* ?* B- B2 }: b! g. o
207-GameServer(9-25)9 F' l1 a$ M, n" l
208-Card(9-25)# c# F3 p/ w z* z7 b x
209-给卡片添加碰撞器让他能点击' L: F# T' l/ c: f$ g$ h. g
210-解决出牌BUG0 }, v# Y2 l+ t1 B% } f3 q4 @
211-移除出完的手牌
0 S' ?* t p, F2 C$ t212-管理桌面的牌显示& K: Y. {% K8 g5 W
213-出牌特效声音的播放
7 |. R% p: W! J2 S( X$ `, n214-GameServer(9-27)
7 I$ c0 F$ p) l* |* c2 j215-Card(9-27)
9 F& d( i, `1 _; F216-测试出牌BUG 上部 S* V, L& G; |+ `
217-测试BUG 下部4 ]3 q% C: j- F9 u6 b
218-客户端+服务器(9-28)
8 K" ?$ z; Z8 w9 d R219-创建OverPanel代码脚本8 W8 Z5 c4 Z0 V3 [' G
220-通过消息机制表现客户端的结束: Z# T8 g3 p5 X4 f& q
221-测试游戏结束
% A/ K4 V) _) b+ S. t2 i" }6 K- Y222-创建背景音乐播放控制脚本
5 E0 h* z8 q& q5 l4 X, l# D5 G8 n' }+ |223-给前两个场景添加背景音乐$ C( k. f' ]# \ B8 n! X3 @5 C! k6 G2 m
224-完结与未完; l0 d S" p0 F- a, g' Q
225-Card(9-30)/ k, p7 L9 G L& i7 a
226-GameServer(9-30)
+ f& Q c! W) W227-扩展课之ProtoBuf
7 a6 G& D9 _5 {2 n, z4 a4 e228-扩展课之ProtoBuf(10-15)下载地址:
3 ~5 o7 O/ a9 o8 d( |
% {+ I3 T; q+ K! t9 T) |
3 X( ?6 [6 m& y$ k! N& F" V/ ~. A6 `! t+ ^2 _' G& {
|
|