|
如果你会一点C、C++语言,你就可以学习游戏编程了,开发真正的游戏!如果你学过一点C++更好,没学过也没关系。本课程教你从零基础开始开发7个完整的游戏:Brainiac、Light Cycles、Henway、Battle Office、Meteor Defense、Space Out、Stunt Jumper。教程无KEY wmv版本,手机平板等移动设备均可观看!4 p; t) D/ d" E$ F5 w
【课程目录】
" h+ ?% c! G5 @第1部分 入门
0 r2 P( {, l1 ]6 u& |第1章 学习开发游戏的基础知识 6 |: g" T0 v1 I1 h
1.1 认识视频游戏 5 C" F" A8 y9 c, _: D" }
1.1.1 为什么人们如此沉迷于开发视频游戏
+ j4 L6 G& q1 I- z 1.1.2 视频游戏的类型
# o6 ?2 e% p9 s# M+ W1.2 学习游戏设计的要素 4 t' r! x: P5 s, q5 g) R+ |
1.2.1 提出基本思想 ' c- {: m: S- y0 c; ]8 m
1.2.2 整理剧情 * M+ e2 U M- x' A
1.2.3 可视化图形
' d% z% @' Q2 F9 T( | 1.2.4 为游戏选择正确的声音 ( L- @% I5 ~/ o; W; K9 X! g
1.2.5 使用控制器控制游戏 " Y# `( d: Z1 [* t6 T
1.2.6 确定游戏模式
3 v S! o6 Z1 t1.3 面向对象的编程和游戏 2 a5 p! e5 u7 Q9 |
1.3.1 理解OOP ; X2 w% O8 J8 I3 t [; C
1.3.2 在游戏中应用OOP 1 o" `1 L, \/ f) c+ v( ?
1.4 研究相关工具
! B: C( D' q5 W 1.4.1 编译器和开发环境 - @% i0 t5 B \: q5 M' h* t; I
1.4.2 选择图形工具 3 t/ [, }+ R2 o* w8 s8 P
1.4.3 选择声音和音乐工具 - {9 e1 W. N# E, }/ i* m
1.5 小结 1 d$ \7 K1 M" T) C
1.6 亲身实践 " L/ B( r e# B& X7 ^/ {) [0 _' k
第2章 创建游戏引擎 + ~6 C# e" `2 \; E4 x
2.1 什么是游戏引擎 ' e& y$ a* G" T: b" z2 W
2.2 考虑游戏引擎的作用 6 d( I7 f( Y5 c
2.2.1 将游戏分解为事件 1 M( ?0 P1 c0 q/ r/ ?9 x
2.2.2 建立游戏的计时机制
' ~* W# G: N" E; C$ v m: K2.3 开发游戏引擎
+ a( _# X# i& a( t& A/ _5 J1 r6 P 2.3.1 游戏事件函数
8 }) e8 I+ \4 q$ x b. B 2.3.2 GameEngine类
3 E+ O, j+ r8 V* ^; ^; X1 K2.4 开发Blizzard示例
9 @+ o/ l7 V" s& v X. v, p$ w 2.4.1 编写程序代码
5 y1 U- E X/ S, D" X- i 2.4.2 测试完成的程序 9 J2 b! q* V( l+ L# @
2.5 小结
. a- @2 b! N3 U9 [0 B$ R# m3 n2.6 游戏大变身
0 H3 u0 m; U4 v第3章 学习绘制基本图形
5 E g6 E& N: X6 g) m$ w3.1 图形基础 e' D2 X2 {' W* C8 Z/ p1 ]0 v" }
3.1.1 理解图形坐标系统
) [2 _, X- g; u1 R3 Z 3.1.2 学习颜色的基础知识 2 d! A0 b2 s Z; k0 w! a8 m" T
3.2 查看Windows中的图形 9 N) P0 d1 I3 Q1 G- B0 Y
3.2.1 使用设备环境 ' @6 n6 N, J3 V0 d8 j+ _
3.2.2 使用画笔写 3 H8 g/ ?$ a, @4 x' G$ {4 S
3.2.3 使用画刷绘制 ! H; V/ r2 l3 M# x9 ~, p \3 H
3.2.4 使用位图绘制图像 w8 ?& R& c9 t. S5 p7 M3 }
3.2.5 使用调色板管理颜色
' e; t8 ], B* H2 G3.3 绘制窗口 ) {: T! u& `! R; V
3.3.1 绘制文本
* \6 n) H9 ~; ^; \! C8 J: W; \ 3.3.2 绘制图元
% i D0 z9 H- f- z" @ 3.3.3 使用画笔和画刷 / G: K' \- u# g
3.4 开发Crop Circles示例
" A: l# t& o) \( | 3.4.1 编写程序代码
2 ~% R- l% C# |+ p X- s. O 3.4.2 测试完成的程序 ) t+ W) M. O' ~ e4 H ]; ~
3.5 小结
0 w. h- I/ i5 r3.6 亲身实践
# G- \- [3 l, x4 v$ a4 c1 s. B. U第4章 绘制图形图像
9 I& I/ m/ ~# j" x0 \( k4.1 位图图像的基础知识 $ _" c& i# t% d
4.2 深入学习位图
6 W; L; c, s5 c& D7 ^4.3 开发位图类 ! H) ^+ i7 u! B: ?
4.3.1 位图类的工作原理
7 A' G. s: a- Z. ? 4.3.2 整合代码 ; C! ^3 u% }* j- D* p
4.4 开发Slideshow示例
5 n; f' |4 Z! a) J) T" \! G7 h 4.4.1 编写程序代码
: e1 B# {; y# W% _3 W 4.4.2 汇集资源 3 x( B8 L- D/ R8 ?3 {6 V
4.4.3 测试完成的程序
3 A$ \2 m; _. ]4.5 小结
1 D5 L8 J$ X; w2 t9 g/ j5 H4.6 游戏大变身 : G0 U' v5 \ L/ V) D
第2部分 与游戏玩家交互
) k' E$ l3 G& O0 m* H- K+ ?第5章 使用键盘和鼠标控制游戏 0 V2 |. F9 T `+ ^' h6 |" w
5.1 游戏与用户输入
; U; I* q4 `# r" D4 s9 P. X |5.2 了解用户输入设备 $ g9 H: [0 z# p, G3 d0 [
5.2.1 接受键盘输入 ) Y. A8 G( i6 A
5.2.2 响应鼠标
; N j: {0 ^) h. N E6 m 5.2.3 使用游戏杆交互 3 m% {9 |! S0 O# ~/ n
5.3 评估游戏的键盘输入 $ l4 ?9 e' T0 r. A) q
5.4 跟踪鼠标
* S- J+ w' |& Q L% P( e" q5.5 向游戏引擎添加输入支持 0 c9 u- F8 ^0 f$ Q& `
5.5.1 添加键盘支持
" ]3 `# M5 U- E8 X3 z; h 5.5.2 添加鼠标支持 4 n3 P# m2 b6 J- J
5.5.3 修改Bitmap类
! j$ f+ f8 X7 ?9 \& C9 _1 E5.6 开发UFO示例 N3 n4 w) |/ n4 E
5.6.1 编写程序代码 . x! P m8 G+ Y. ~) u+ ?
5.6.2 测试完成的程序 6 j" D8 m3 d) u+ I2 T4 D
5.7 小结
2 m7 O0 V+ B) G2 s- g5.8 亲身实践 ) B* A. U0 S% o9 u, l' j
第6章 示例游戏:Brainiac : \! Z F8 Z. K% O
6.1 游戏的玩法 * D) S, | j. Q- [) S. Z% P! d; r' Q
6.2 设计游戏 " X U0 h/ F& V* k
6.3 开发游戏 2 d4 k+ _' ~) e3 l
6.4 测试游戏
% Q: l8 u: w5 X" u% ]6.5 小结
) l/ L0 b& z* r$ b \6.6 游戏大变身
2 ^$ \( u# X# q f第7章 使用游戏杆改进输入
; ~. H: p0 Q1 ^5 B7.1 了解游戏杆的基础知识
- J" E [# n) A; a$ W7 c! ?( v7.2 校准游戏杆
1 s' j z% ^+ R7.3 追踪游戏杆的移动
3 N: c5 [. D: @, z# x6 U/ x7.4 向游戏引擎添加游戏杆支持
. x& @8 I3 x; W- c4 t 7.4.1 访问Win32多媒体功能 ! j5 q. E) M6 }5 ~6 ?6 V! g" K2 w; u
7.4.2 开发游戏杆代码
+ b* P& [: M. j7.5 开发UFO 2示例
' Y% J) P$ a4 e, f8 r: o& m7 e 7.5.1 编写程序代码
& v: a, l5 _; _; d 7.5.2 测试完成的程序 f9 J6 r3 `0 G8 d( _3 L4 d
7.6 小结 d+ u5 G4 {) N1 L2 u5 j
7.7 亲身实践
8 e6 l8 K# b, L% S7 a) O( \7 `# l$ C第8章 示例游戏:Light Cycles
+ @4 C$ W& v' N7 m5 g) q, l8.1 游戏的玩法
4 ?& Z9 y# B! i% n8.2 设计游戏
4 { P1 E6 W/ l$ c" \3 N y8.3 开发游戏
3 ~5 S7 R. i) F7 @6 _$ a8.4 测试游戏
" k3 h( b$ f% ^9 @+ M3 o8.5 小结
' S1 W$ J p5 ^+ |8.6 游戏大变身 & F6 `' h2 W4 Z/ }) O
第3部分 在游戏中使用子画面
9 {% u# E7 Z0 S6 X& I$ N/ j第9章 使用于画面动画移动对象 / a+ Q3 y9 G1 W5 {) s
9.1 理解动画的基础知识
' K6 `; }; g& x2 M1 r S, K 9.1.1 动画和帧频
( e) V8 D# ^: R) D+ P% x 9.1.2 了解计算机动画 6 N: n. D! r$ M, r5 J% x: n
9.2 2D动画与3D动画
$ l' W a7 ^" m% r' o- R( X$ Y. E9.3 理解2D动画的类型 8 O Z# [ t4 k8 C/ o* H. H- Q2 k0 ]
9.3.1 基于帧的动画 5 r" _6 w% P3 M: E1 D6 Y4 `
9.3.2 基于形状的动画 . `. A8 Q0 ?# @
9.4 将子画面动画应用于游戏 8 M4 c) [# R5 c, n* @2 S9 c- |
9.5 设计通用的子画面 7 ^; I: y( z2 j5 C- [
9.6 创建Sprite类
& }* H- c2 a0 `' q6 N, g$ @ 9.6.1 创建和破坏子画面
1 e; @; x; f& S1 I0 }/ _. Q 9.6.2 更新子画面
' l5 U% P& U( W- ]5 N1 R. p: |/ H 9.6.3 绘制子画面
) p" g0 h1 z7 Z3 I9.7 开发Planets示例程序
, T/ F4 x: M9 ~4 [- ^% b% p 9.7.1 编写程序代码
* v/ f5 X8 ~9 `! G; q- s2 W 9.7.2 测试完成的程序
! D# I$ E. P4 Y. J& L9.8 小结
# l, N( L+ T7 @ N9.9 亲身实践 : N2 Y+ k& p; V: H. H
第10章 管理子画面 ( n8 L8 r* O8 F; v2 a9 s% x5 ~6 O
10.1 了解管理子画面的需求
" W5 |/ [5 o4 t* v/ b10.2 设计子画面管理器 ) z7 D: N/ ~, H3 `1 t
10.3 向游戏引擎添加子画面管理器 3 Z( y4 ~6 d, s4 M4 ?
10.3.1 改进Sprite类 , A- J* P2 s" H) B* `+ X
10.3.2 增强游戏引擎 5 a" ?) \' ~: z2 Z5 w
10.4 使用双重缓存消除闪烁 ) N' O/ d7 I/ y) T7 ~6 W( L" q
10.5 开发Planets 2示例
8 O) _6 b1 V% | 10.5.1 编写程序代码 % ?' e) C6 o, r4 ]5 G" X
10.5.2 测试完成的程序
|4 L ]' r, n6 z1 W' q10.6 小结 1 k ?# O1 Q6 S) j1 Y: Z
10.7 游戏大变身
/ G# |8 m2 Z: n, y, a第11章 示例游戏:Henway / R' H- A$ ]4 f9 Q# `! B* U
11.1 游戏的玩法
) Q, C! U& ~$ o' B8 O4 P7 `9 P/ @11.2 设计游戏
2 J3 b9 A2 \. D11.3 开发游戏
8 @9 W( H8 i6 [& x. U/ I3 H11.4 测试游戏
* d$ O/ Z+ Y7 |5 V6 q5 b11.5 小结
+ ^8 o& M$ F8 X q9 u" \. ?: k6 s11.6 游戏大变身
+ }2 ^" G( o6 j第4部分 使用声音和音乐 8 P) T7 L, G, y3 P% \) \3 x P
第12章 播放数字声音效果 8 ]- g1 i5 h2 \7 l. h; ~# D
12.1 理解数字声音 $ d& y4 r7 b6 X0 H7 F" q6 v
12.2 了解Windows波形声音 " {: @; B& t4 y) e8 B" B4 Y4 e6 U0 ^
12.3 了解声音工具
9 J- i% r8 Z. P1 n% d 12.3.1 Sony Sound Forge $ @0 M# h1 B; \2 {4 C
12.3.2 Adobe Audition ; `" f: A/ d+ Z5 L" Q, p0 T* q6 N
12.3.3 廉价的声音编辑器
! A7 p: B: @* E4 i* _) ^- u12.4 创建和编辑声音
* R/ ~! g- w9 B2 Z12.5 查找声音和音乐 % @% [" O, i3 l7 Q
12.6 访问波形声音 6 H: S/ U1 c- s1 s( M p' I* l
12.7 播放波形声音
1 G& w) m3 _1 x" ^- b# ]; e4 a8 j& O& B 12.7.1 播放文件中的波形声音 " Y% R. ]4 K- S/ \5 P
12.7.2 播放作为资源的波形声音
* ^. w" F9 Y; z' Q8 x& I7 v: b' w! S 12.7.3 循环播放波形声音 ) r+ V3 w* ]: Z& Q& a8 D' O+ q
12.7.4 停止播放波形声音 9 l' G# r# Z4 d m- N
12.8 开发Brainiac 2示例程序
+ n* k, R6 Z/ f6 G3 G9 n 12.8.1 编写程序代码
8 B. O; Z7 f- c" k' q. @* |# c 12.8.2 组合资源 . p0 y- H j! D
12.8.3 测试完成的游戏 - e9 D) E4 r# p
12.9 小结 + i* f( @9 c9 n1 z; r
12.10 亲身实践 1 ]5 y) L8 D7 h# L$ H4 `
第13章 播放MIDI音乐
( m' p0 r# P' h13.1 感受MIDI音乐
$ `2 Z/ F" M8 O' F13.2 理解Windows媒体控制接口
. `) `* [) z- x13.3 使用MCI播放MIDI音乐 ' g6 Z) X5 Y. i* I3 i4 R
13.3.1 打开MIDI设备 & t; C( g3 |( ^4 l4 a
13.3.2 播放MIDI歌曲
' d* Z9 F- ?# P/ B: D, v- c! g 13.3.3 暂停MIDI歌曲
$ ?. r1 G- Z8 a9 Y2 e( \ 13.3.4 关闭MIDI设备
5 L/ e7 {: O& U4 Y& w' |8 o13.4 向游戏引擎添加MIDI音乐支持
3 D- n% ?* l% i% n13.5 开发Henway 2示例程序
, x1 \4 Q4 ?8 m& a# i 13.5.1 编写程序代码
! F! c& k" n0 j$ G: j0 D 13.5.2 测试完成的游戏 , z) ], O2 V. m% ~
13.6 小结
- J; z2 U+ \6 ]! ]8 O13.7 亲身实践 9 ^2 r4 L, ]& n. J9 v" d X* b6 m
第14章 示例游戏:Battle Office * o. @$ y# Q; q* e* ]
14.1 游戏的玩法
% [) P- o7 A- i f! }14.2 设计游戏
) E/ g. c5 {1 j! m2 [14.3 开发游戏
. M: k! X y/ C1 D' h14.4 测试游戏
: W' [4 d0 j5 J/ t8 k6 C: H14.5 小结 ]4 C; o0 C+ G* M
14.6 亲身实践 / @& L& Y: o! b
第5部分 高级动画 1 M s2 t7 ^! @% r; P
第15章 实现子画面外观动画 , [4 `# f8 e0 ^8 f
15.1 再次介绍帧动画
) T; I0 j+ P) a15.2 设计动画子画面
1 O$ \9 I- h2 T9 [& N4 \, H15.3 向游戏引擎添加动画子画面支持
2 \8 T6 Z; B7 k; E 15.3.1 只绘制位图的一部分
y, h- K6 a9 M& ?3 M+ @1 c 15.3.2 对Sprite类实现动画 1 h# u* M+ C$ p t/ h: c# o& t
15.4 开发Battle Office 2示例程序
! N# e3 h, c3 s& M 15.4.1 编写程序代码 ) j" U3 h3 Z- ]7 p
15.4.2 测试完成的游戏
3 P7 _8 D5 J$ O- a6 m9 p15.5 小结
( W: Q! b1 y4 T9 ~15.6 游戏大变身
+ X! t0 F# ]5 x, ]. i; Z第16章 创建子画面背景
" n0 f$ _* j0 I. Q, I16.1 了解游戏背景的重要性 ) D) R7 ~" ~2 F/ X. o# i
16.2 了解游戏背景的类型 " A+ E8 O7 L7 M# [; Q+ e
16.2.1 纯色背景 ' D. j6 S/ j$ A* B: x
16.2.2 图像背景 : y. D% C1 k) T: H" H- T# u5 U
16.2.3 动画背景 8 D) j @0 S5 L5 M& S5 A6 C G$ z
16.2.4 滚动背景
8 |( g5 a+ _" T4 ~' [2 [8 Z4 K4 O16.3 向游戏引擎添加背景支持 . ^% f# Q4 b! ?% E2 o) }! H
16.3.1 创建基本的背景类
# V. x$ M" ]2 M$ V* H! @0 |/ z 16.3.2 创建动画背景类
4 {4 B% k9 V# D" ~. e( V' N16.4 开发Roids示例
3 ]* R& s' d1 \, w& K. K9 |: ^ 16.4.1 编写程序代码 - [, F' V* G* p3 P3 ] D
16.4.2 测试完成的游戏
$ j1 H2 M s" L/ \$ ]! l16.5 小结
; d* C `3 P3 V6 O3 j0 X16.6 亲身实践
0 g2 x. P1 |2 v/ q5 f( J) E第17章 示例游戏:Meteor Defense
' Y0 t0 v; Q8 C# k) ?4 j5 c, s/ ]17.1 游戏的玩法 5 ^; ]; L! L9 D5 x9 N
17.2 设计游戏
3 @! p% E, E( n N: X) x17.3 增强游戏引擎中的子画面 5 q: t* @. h; i1 c, U8 z; t) H5 P/ s
17.4 开发游戏
5 s' _5 q* E8 o17.5 测试游戏 6 M3 ]2 T/ }! b9 y
17.6 小结 ' v% `/ M- Y2 _1 d* ?7 E2 k* i
17.7 游戏大变身
8 b( ]4 L5 E- i. H. x% V第6部分 让游戏拥有大脑
1 x5 X! ]* q2 A* ^# @4 y0 y第18章 教游戏思考
4 O ^( @! g+ O4 L( _' i$ A* ?% U7 `18.1 理解人工智能6 b, {5 V6 ~ D; l* D. j6 c4 d
18.2 了解游戏AI的类型
1 @0 A) H* x6 q* x$ G5 F; b 18.2.1 漫游AI
% K( r( s7 p7 o! Z9 U/ K 18.2.2 行为AI
: w, I# `) Y' K3 f3 ?( o 18.2.3 策略AI # K* a$ m/ F6 y/ R
18.3 开发AI策略 / ^6 d; R& Y+ z3 S! C d
18.4 开发Roids 2示例程序
- u4 p# @) Y$ H1 h: @- X9 H 18.4.1 编写程序代码 2 F9 @7 C$ R! h$ g1 f
18.4.2 测试完成的程序
& p2 y/ _8 W4 k, D" a; ?1 h18.5 小结
; h; Y% Q( O9 R- D& h18.6 亲身实践
. n( v0 g6 f) j; s6 O d第19章 示例游戏:Space Out ( T5 ?: O' m; N/ ?; H0 U4 q2 B
19.1 游戏的玩法 7 I8 a$ b8 i6 c# z% o; H
19.2 设计游戏
. x1 o+ k: L. D6 c: F( W19.3 向游戏引擎中添加另一个子画面特性
5 W8 ~2 P; _* x8 [; ^: S19.4 开发游戏 8 U: U: f: Z; [# d
19.5 测试游戏
M& j& {3 s. O; H/ C1 f* X19.6 小结
+ B, n; n& F% c9 |第7部分 增添游戏的趣味性
7 [* ~# w! Y) J: t+ V" H1 |第20章 使用闪屏增添游戏的活力 ) ~$ X( h. t& D5 l
20.1 闪屏的重要性
& Q# L k4 T+ @$ r/ F1 `2 |20.2 了解闪屏 9 u+ Z+ N8 b$ K; f3 k! ~) D/ L
20.3 创建Space Out 2游戏 ! W+ J( k% x, p- b# m( L
20.3.1 编写游戏代码
) r8 Y! S* X# M$ ~+ c: ~ 20.3.2 测试完成的游戏
8 S* u. e/ s+ H2 w! R% @( \, J q20.4 小结 % V3 i, r- X" X
20.5 亲身实践 2 s; @" c& U) Q& h3 p7 x3 T% h! o
第21章 使用演示模式展示游戏 % T- L9 x6 F, d1 O
21.1 什么是演示模式
5 s9 X$ ]9 X2 S) k7 q% w21.2 演示模式的细节 ! R7 P# W- p% b: p
21.3 开发Space Out 3游戏 5 h5 l5 o$ Q% {8 h8 a2 V0 }
21.3.1 编写游戏代码 2 i/ `( F4 j7 K, \/ ^" p+ L( ^
21.3.2 测试完成的游戏
+ A) S7 J }- g. ~2 q& a6 G) ]21.4 小结 3 @5 Q/ I2 j( B* S
21.5 游戏大变身 3 f3 ^( I( M6 N; m
第22章 记录高分
+ {+ P P( y6 a; q" [+ ?22.1 记录得分的重要性 5 ` |* L/ I0 O$ d0 V' i
22.2 确定高分数据模型 + }, S9 e( ~% Z$ R B% T2 S
22.3 存储和检索高分数据 0 Y) q6 b# H& r) b
22.4 开发Space Out 4游戏 " m. @/ _/ n9 M, e( L( ~, p
22.4.1 编写游戏代码 / p+ ^0 ^! ^! c/ k8 H! C
22.4.2 测试完成的游戏 ( b3 N7 w; C4 Q+ @
22.5 小结
0 @- Q& G5 h* E% k22.6 亲身实践 ) ]$ T, m1 t8 h& O) A7 m( ?
第8部分 附加练习
7 a* @ C; c5 S1 n9 w第23章 使用滚动背景更改远景
" u+ a+ W7 Y' J23.1 什么是滚动背景
( n7 d2 x$ w8 }- m% u8 ?5 c" k 23.1.1 横向滚动的背景
& E; f- p Z: F) m* g- s/ z 23.1.2 纵向滚动的背景 1 J {2 i* o* l1 A, b
23.1.3 视差滚动背景
$ T7 H2 h) E+ d3 O- q23.2 理解滚动背景的工作原理
1 z; A; d P& P. A23.3 向游戏引擎添加滚动背景支持
6 T# F! M2 ~; u9 N- C% H. n 23.3.1 创建背景图层类
" V$ N D: q) j! r) q8 H* s 23.3.2 创建滚动背景类
* J! m) p, D6 Z9 [% X23.4 开发Wanderer示例
! g1 _' `' F5 Z; G$ T 23.4.1 编写程序代码 4 b6 {9 n4 F1 w
23.4.2 测试完成的程序 5 A6 n( p, o" r5 J$ r
23.5 小结 ' n6 E' l2 _) k* K
23.6 游戏人变身
0 d% @" q B: a第24章 示例游戏:Stunt Jumper
" [# U, V: z+ L3 L0 n6 h24.1 游戏的玩法 2 x+ \$ m! W+ G' W6 O6 l( M
24.2 设计游戏 . ]1 T/ t/ r3 I% o: O: @0 U1 z
24.3 开发游戏 . z' ?( W" A2 w. o
24.4 测试游戏
' O* S7 u$ i7 z) B# w) y24.5 小结 8 d* ^3 y& M. w# e
24.6 游戏大变身
' ]6 a8 ~7 }. J: D4 h4 d24.7 亲身实践
3 P- z g/ R! j4 g: k
+ [# l; l9 d, _9 O- ?/ u【下载地址】4 P6 N/ D2 Z# W5 q! ]
% a6 k) B7 A4 I9 C$ B7 m' k/ }
& z3 Z* @, a( E8 M: m: f: H |
|