|
如果你会一点C、C++语言,你就可以学习游戏编程了,开发真正的游戏!如果你学过一点C++更好,没学过也没关系。本课程教你从零基础开始开发7个完整的游戏:Brainiac、Light Cycles、Henway、Battle Office、Meteor Defense、Space Out、Stunt Jumper。教程无KEY wmv版本,手机平板等移动设备均可观看!
- w5 F: T" f! b+ R2 j" c5 z" F【课程目录】, L( r. N" Y/ N8 K7 y
第1部分 入门
& y9 @9 H1 f. j" {2 z& ]$ o% l) z$ z第1章 学习开发游戏的基础知识 3 |* _: f+ Q& S5 ~2 r6 I: \6 k( O& [
1.1 认识视频游戏 ) z$ V* k0 W) P+ ^
1.1.1 为什么人们如此沉迷于开发视频游戏
; t( j* R# k" X! Z7 A! ]4 ? 1.1.2 视频游戏的类型
6 O1 c% f0 p: ]7 _% b! H! @* F1.2 学习游戏设计的要素
' x+ }( c' |' G; P; T 1.2.1 提出基本思想 & E: f8 j6 ]$ \6 f5 ]0 S4 L, t# V0 @
1.2.2 整理剧情 x" p& P4 g. d; O3 ^+ n
1.2.3 可视化图形
( q( r% G/ s, o8 g 1.2.4 为游戏选择正确的声音
0 ^4 N( ?9 \7 K, w' G' m4 u 1.2.5 使用控制器控制游戏 & n3 C6 B" n9 ^: v$ R3 ?
1.2.6 确定游戏模式 7 k0 z' m7 G3 H7 ?3 m" I
1.3 面向对象的编程和游戏 $ @+ W6 _0 p. `* H9 ^8 P& p' y
1.3.1 理解OOP " [* s) b1 e! V/ p
1.3.2 在游戏中应用OOP ( E4 V6 V- ~$ R
1.4 研究相关工具 " _# E2 `4 O z9 _4 g6 x
1.4.1 编译器和开发环境 * Z; s3 S1 E4 O- |9 i+ |
1.4.2 选择图形工具
) \, Q5 |4 b1 [6 ] 1.4.3 选择声音和音乐工具
0 G- \; [# X* v5 c) o1.5 小结 5 F/ A: N R/ B8 ?4 Z( T |7 g
1.6 亲身实践
! m6 E- h3 c+ B' p4 `第2章 创建游戏引擎 , F! [/ W5 ]! |$ d8 T% e
2.1 什么是游戏引擎
1 }5 a! d x) K, S2.2 考虑游戏引擎的作用
+ `9 ?) Q+ t- \5 g9 p, Y 2.2.1 将游戏分解为事件
3 U# F& z1 s0 _9 [ 2.2.2 建立游戏的计时机制 3 b$ o1 q3 ~8 P2 | l1 S
2.3 开发游戏引擎 4 W6 Q# B, Z# S+ F3 g
2.3.1 游戏事件函数
2 r2 ~$ P9 z( n T 2.3.2 GameEngine类
/ `% o# a: T* e# p' ~; K3 q, K2.4 开发Blizzard示例 & `; ]+ i" z% _" ?
2.4.1 编写程序代码 ! V' \0 g0 ~7 F6 I: o8 p; I" s
2.4.2 测试完成的程序
- Y" o1 p! s: M0 p7 T# @& K2.5 小结 . b: @5 s u3 T6 _
2.6 游戏大变身
5 X7 j( F9 u2 I第3章 学习绘制基本图形 1 j9 U( F e+ z$ K' p
3.1 图形基础 # n6 k- j F/ A& V2 U8 M, a* Q
3.1.1 理解图形坐标系统
; u, Z% E4 s8 g/ d 3.1.2 学习颜色的基础知识
9 G$ `) R, F+ _% ]3.2 查看Windows中的图形 $ ]0 r i0 A+ A; v, s
3.2.1 使用设备环境
' K* \. h& U2 b) C* d; j- _ 3.2.2 使用画笔写 1 j# x& E; h: L8 p) e+ X
3.2.3 使用画刷绘制
/ R% H" g+ P y' T c9 z; I 3.2.4 使用位图绘制图像 4 i$ z1 {! L: t# [1 M) n3 w+ C/ g
3.2.5 使用调色板管理颜色 ( e+ A: b7 u0 u( E4 u' N8 w
3.3 绘制窗口 $ J5 f5 q/ N/ ^ e1 H8 z6 Y
3.3.1 绘制文本 0 r/ q+ s, }8 M4 x1 E
3.3.2 绘制图元 & k& ~7 h2 U7 P* _6 d9 F
3.3.3 使用画笔和画刷 1 u9 i: \ X3 | P V
3.4 开发Crop Circles示例
6 p0 F1 t8 N# ^; e g/ X! O2 | 3.4.1 编写程序代码
f0 {" m j: x$ L% C 3.4.2 测试完成的程序
/ x) }2 q1 l" U! B! H( V3 c& s+ C0 q3.5 小结
. R" |( i- l+ v, ~9 n4 q4 @3.6 亲身实践 6 y' O0 d8 I5 L* S1 Q* i; i
第4章 绘制图形图像 ) ?$ V U% H* [: N' D x
4.1 位图图像的基础知识
/ e9 N8 p( ?, E0 N" X0 h B4.2 深入学习位图 : F2 ?8 M6 I1 a1 x
4.3 开发位图类
8 @, g$ x8 l) ~2 W9 W 4.3.1 位图类的工作原理
) o# b( F2 `- C* o, G 4.3.2 整合代码 3 t8 b, ^7 D8 r7 ^8 |
4.4 开发Slideshow示例
, i! O5 R; ^9 q 4.4.1 编写程序代码
5 q5 E1 }4 ?; G6 X" d b& n+ E 4.4.2 汇集资源
5 f% }3 d7 [, ?- B& S! r 4.4.3 测试完成的程序
( _$ w4 y4 L9 s# N: r% z+ W6 @% }/ |4.5 小结 * u; |0 a$ k9 Q) F# Q
4.6 游戏大变身 % {! r* Z! l! E! D# d: }) I* p
第2部分 与游戏玩家交互 ; f# ] [ J" I- I0 _* c+ I
第5章 使用键盘和鼠标控制游戏 - _* u9 N+ j" X2 p0 I5 q4 u/ ~
5.1 游戏与用户输入 $ o% a! W+ D: N" g# P
5.2 了解用户输入设备
& y5 o; u- G# M7 P$ q 5.2.1 接受键盘输入
! D" H/ d0 S5 e, Y4 E0 l: l' P 5.2.2 响应鼠标 9 e, n/ B7 H9 p9 G4 s5 g
5.2.3 使用游戏杆交互 5 I j$ C# m: G$ `6 ~
5.3 评估游戏的键盘输入
2 R H- M: ^: {( s) M5.4 跟踪鼠标 \( A7 g2 a. G7 H
5.5 向游戏引擎添加输入支持 & o: b$ a( v, c! o% r
5.5.1 添加键盘支持
4 V) Q% j2 B1 ?, T( d& F 5.5.2 添加鼠标支持 # \. q; z( B9 ]6 g7 P
5.5.3 修改Bitmap类
' u) e+ w. Z" q# D+ l5.6 开发UFO示例 " ]) Z% T1 t0 \
5.6.1 编写程序代码
2 J) q* U3 [' N: Q 5.6.2 测试完成的程序
3 B( [: z" R" k1 U5.7 小结 $ p" u: Z2 a8 i9 Z+ ]+ e3 R) g
5.8 亲身实践
( H8 a: L5 r( Q6 j! H3 ]第6章 示例游戏:Brainiac
& u T' V: ]" n6.1 游戏的玩法 ; v! o( f0 M9 h4 V& s
6.2 设计游戏 ) P9 ] Z0 R* V. t
6.3 开发游戏 2 c) x) w. G p4 s# c6 Q. Q
6.4 测试游戏
8 |# u: a. W Q$ I; L# Z Y6.5 小结 ( W* P$ A6 U6 r0 e; A4 T! [
6.6 游戏大变身 2 Q0 ^- L- J9 E) P& T
第7章 使用游戏杆改进输入 6 Z! N/ t$ B; E
7.1 了解游戏杆的基础知识
5 c! h8 D- Q: L# s$ y9 p7.2 校准游戏杆 " H i8 s/ \/ v+ k' M% c: z. w
7.3 追踪游戏杆的移动
: k; E. Q, W K3 W# i! p3 P8 n7.4 向游戏引擎添加游戏杆支持
' g9 i5 ]- S- U) |1 V 7.4.1 访问Win32多媒体功能 # p+ f4 S9 y' X' M6 c
7.4.2 开发游戏杆代码
& \& N7 @* o5 y) E7 t/ M2 K& r+ E: h7.5 开发UFO 2示例
- c5 G' Z* _3 ^9 I5 _) @4 M6 { 7.5.1 编写程序代码 5 O+ e2 z8 H& y% H5 v
7.5.2 测试完成的程序
' y) e t9 v; P H7.6 小结
$ P" N8 j* N) [7.7 亲身实践 : O% P# e/ _6 N* u7 o% [& V
第8章 示例游戏:Light Cycles
+ K/ Y( t( d9 Z$ @* |! A8.1 游戏的玩法
0 v' L, \/ x3 C/ O$ _) V8.2 设计游戏
9 d: S$ Q3 _8 x% R) l6 _8.3 开发游戏
; s5 ^5 w: n) n, F8.4 测试游戏 ! X0 Q6 Q% N- h0 _0 M
8.5 小结 8 o, O9 H$ q" U" a1 A! ^) h
8.6 游戏大变身 ( f9 J. ^+ u6 D5 r9 H/ g4 q) y
第3部分 在游戏中使用子画面 8 D+ G9 ? Q1 D" F7 W- Q, I! f
第9章 使用于画面动画移动对象 . v& q9 j* O& b3 |% W+ W% s/ F
9.1 理解动画的基础知识
, ~. I0 h3 u& U. d5 O1 C9 W 9.1.1 动画和帧频
% X. n- U0 _0 Q( m. W$ B 9.1.2 了解计算机动画
+ V8 w$ e/ B6 g9.2 2D动画与3D动画
$ f2 Q9 E. z$ Q# f6 U" W9.3 理解2D动画的类型 . |. Q8 A. u+ |0 n$ O2 @9 q. z
9.3.1 基于帧的动画 6 m# |) `6 ^0 X, L' W
9.3.2 基于形状的动画 ! u' h/ x3 a3 ?, t
9.4 将子画面动画应用于游戏 - w7 a8 V% A/ Y: O# @
9.5 设计通用的子画面 8 D& [, ?9 z. T3 S+ m& l
9.6 创建Sprite类 , g, r/ o4 n2 M. a+ U5 B
9.6.1 创建和破坏子画面
2 S! b" B- s8 @3 u 9.6.2 更新子画面
$ W$ q( i$ p4 |+ \# k# f: a# l 9.6.3 绘制子画面 2 b( F/ B* T# }; W; x
9.7 开发Planets示例程序
* c8 T$ O$ _0 B 9.7.1 编写程序代码
6 {$ ~3 Q' h: m! p% L 9.7.2 测试完成的程序 * X. R$ w, g9 w( f! ^
9.8 小结
U! H7 W; t7 A4 \5 Q9 P( i9.9 亲身实践
; d. G) C5 O/ D& E( |1 w/ A第10章 管理子画面
3 O" M/ U# ~7 x, U3 ]5 m10.1 了解管理子画面的需求 : |: e7 n6 `1 u3 [
10.2 设计子画面管理器 : d& {$ L- l0 O# ^ Y o2 G3 P
10.3 向游戏引擎添加子画面管理器
& _8 w& q8 r( F0 _/ I) A 10.3.1 改进Sprite类
; M8 v! V" |0 f: g$ v) C 10.3.2 增强游戏引擎
n q0 }' X# l' O10.4 使用双重缓存消除闪烁 & a/ I; J# x$ O: k" X3 C( p
10.5 开发Planets 2示例 " m8 C* o* Z M/ l6 e& s
10.5.1 编写程序代码
3 i/ Y o! B5 n4 i/ {0 {( [: ~ 10.5.2 测试完成的程序 1 H. ?: K) S$ K* x* F8 F
10.6 小结
" C0 {: \5 W, g10.7 游戏大变身
) s2 ^8 @: g7 M* a% q$ u第11章 示例游戏:Henway
0 z' t, h' x \, E% t11.1 游戏的玩法 0 u" W/ a$ Y/ c/ w
11.2 设计游戏 $ l$ s; ~; v6 D5 }; X" S* w
11.3 开发游戏
; b0 O8 l7 r! E! C0 ^11.4 测试游戏 8 |3 n. J6 r+ v7 B
11.5 小结 " m [* W! h3 [8 N3 Y* z; g
11.6 游戏大变身 1 m$ H, i% @2 L# f3 ~
第4部分 使用声音和音乐 * a: d+ c/ ]1 ^+ X7 s6 O: y4 ` j5 e
第12章 播放数字声音效果 2 ]; f- Z& O; Q- h, i, q$ g
12.1 理解数字声音
h% u6 h3 ]4 z12.2 了解Windows波形声音
: z4 I' B- o% Z1 ~) c$ O0 ~0 a12.3 了解声音工具
7 w, _0 S8 x# A( g5 Y) K 12.3.1 Sony Sound Forge
/ B; z# R+ ]- H% r \0 h; Y' ^" y 12.3.2 Adobe Audition
4 S: A# t' ]$ O3 v% P" d& c3 Z8 H 12.3.3 廉价的声音编辑器 : D' e- C; J0 q' e
12.4 创建和编辑声音 6 d* K- t3 m* j: M e
12.5 查找声音和音乐 0 @* U4 J* H$ }- m. I
12.6 访问波形声音 . j0 ` z4 `! a" E! P3 C
12.7 播放波形声音 / X x: f5 h& n, p
12.7.1 播放文件中的波形声音
8 y1 K: o8 i, J2 W: O p 12.7.2 播放作为资源的波形声音 / u4 V* `$ b9 @$ P* `8 W7 c
12.7.3 循环播放波形声音
3 g. C! x- ^& d. g8 `5 M% k. f 12.7.4 停止播放波形声音 / e8 { s! n9 b
12.8 开发Brainiac 2示例程序
9 g2 s: a; L0 E0 r, ` 12.8.1 编写程序代码
7 M+ Q3 K0 q6 ]$ D8 b0 P 12.8.2 组合资源
3 z6 ^2 w8 W& }6 J4 K0 M- l 12.8.3 测试完成的游戏
; a v# W4 k5 o, ~( h6 g12.9 小结 k3 K; p1 N% [
12.10 亲身实践
: G- h: D0 ~6 L& w% |5 Y第13章 播放MIDI音乐 9 E7 y% P: h0 ]
13.1 感受MIDI音乐
1 G' ]+ F+ A4 ~5 T6 j5 S+ w13.2 理解Windows媒体控制接口 % F& e9 r$ @* }, q9 K7 n
13.3 使用MCI播放MIDI音乐
; L7 Z9 O* l; W 13.3.1 打开MIDI设备
/ Z/ f% S+ \0 U+ k p 13.3.2 播放MIDI歌曲
/ @ T/ {7 L% D9 N 13.3.3 暂停MIDI歌曲
% k1 m" m8 O" \ 13.3.4 关闭MIDI设备 9 v5 @4 n2 [( ^3 L7 e* R
13.4 向游戏引擎添加MIDI音乐支持
$ d2 l. d0 x" z( {" l13.5 开发Henway 2示例程序
/ o! u8 j( t% _3 d 13.5.1 编写程序代码 ' b1 u& [( ?! R5 F, w- F
13.5.2 测试完成的游戏 1 C4 @/ U1 v! Q, D9 X
13.6 小结 & {1 y3 R# U" c/ [ a+ X
13.7 亲身实践 0 A( E; n* f/ Y1 A( @
第14章 示例游戏:Battle Office
( C3 \" X- `/ l1 b- z6 T8 R14.1 游戏的玩法 - D8 n( T* K6 o& k
14.2 设计游戏
+ e* s, X. `+ d3 x; E5 U- d* Z6 k+ \14.3 开发游戏 ; V/ R- D. l z- {& L$ m
14.4 测试游戏
1 d) w& B. F: `14.5 小结 1 U4 q$ P8 j$ d
14.6 亲身实践
/ s* I/ B3 G) c0 q9 K8 t* f O第5部分 高级动画 ( V% Q9 [, E/ X; N, U/ L
第15章 实现子画面外观动画
P' c# t+ o0 J2 ?4 U/ g( O4 j15.1 再次介绍帧动画 1 J0 R3 f) L; X! C$ Q
15.2 设计动画子画面
3 ?1 a/ B! N- g/ r5 \4 Z15.3 向游戏引擎添加动画子画面支持 : Z' I6 L5 Y7 G1 }7 J! o3 [
15.3.1 只绘制位图的一部分
, b6 o( V0 V" k) t5 M1 Y9 S 15.3.2 对Sprite类实现动画
+ ~# r$ T7 a8 f15.4 开发Battle Office 2示例程序
1 ]: T! ^ r4 Z$ K3 K; ] 15.4.1 编写程序代码
9 q9 D' i. J: k- x 15.4.2 测试完成的游戏 + I, j$ J- H+ o3 w
15.5 小结 O! I5 {2 n6 g. u+ @! e2 d% T; I1 @
15.6 游戏大变身
" p/ @3 G; w- c" B1 |( q* t) q2 v第16章 创建子画面背景
, o, y, K3 d. e( ~" D16.1 了解游戏背景的重要性 1 `* t* h1 t" l- v' f" H4 R
16.2 了解游戏背景的类型 + y; }! n, I) I
16.2.1 纯色背景
v- U4 e9 H; K: G8 Q! }5 ^ 16.2.2 图像背景 . w0 ~$ K( K0 P( ^5 x4 x* W0 L
16.2.3 动画背景 d! X7 k3 ^7 a* H: p, D
16.2.4 滚动背景 % } \3 S8 w6 s( ~% w* ^
16.3 向游戏引擎添加背景支持
" i) x+ J* T& e. z8 A! h; v# A 16.3.1 创建基本的背景类 & g% M5 w( S6 e7 a4 Y/ \
16.3.2 创建动画背景类 . d+ j* a# g" p: t
16.4 开发Roids示例 , @% |3 n, F. O0 w
16.4.1 编写程序代码
$ I3 u% v1 S1 j/ I 16.4.2 测试完成的游戏 8 v5 f4 S) L* D' D
16.5 小结 & P9 H, h$ I. a/ t- Y: X; J$ \
16.6 亲身实践 3 N3 N& k; q% G
第17章 示例游戏:Meteor Defense 9 D' D7 g7 l# ]
17.1 游戏的玩法 4 W7 C7 p O8 g s0 B
17.2 设计游戏 1 x2 `1 a; g% f. m
17.3 增强游戏引擎中的子画面 ! k; G4 C( ]% x b1 h ]7 ]
17.4 开发游戏
. K6 P* s* b- h$ X17.5 测试游戏 1 l* S* m# I, \" f8 D
17.6 小结 p( @* X3 j2 z7 s$ ]
17.7 游戏大变身
+ @ ^9 K2 Z9 j. {1 Z9 o第6部分 让游戏拥有大脑 0 R. J* x; g( l1 R b( Z
第18章 教游戏思考
! J. }: A6 E2 l* S: R/ I+ d18.1 理解人工智能% l0 H5 H: U' x2 _' M) \
18.2 了解游戏AI的类型 ; u4 r/ I! W3 e6 X
18.2.1 漫游AI
# G9 z+ y4 {! ^ h& x l; @6 j# Y! T 18.2.2 行为AI
/ m! T# [6 J. N& W8 w# l' ?- K 18.2.3 策略AI
9 k ~; S8 [: S% h18.3 开发AI策略 1 K1 o* s& K# q3 z- p$ `$ V, s
18.4 开发Roids 2示例程序
_1 K: \# f# g2 ]6 K! l' z& \ 18.4.1 编写程序代码
1 A$ L. r4 i* s ?5 K% [$ l 18.4.2 测试完成的程序
3 k6 M9 [( Y C- i* w5 Q18.5 小结
6 K r# B/ ?6 [& J- ^1 r18.6 亲身实践 / J! W6 y0 |/ u' D. r9 u
第19章 示例游戏:Space Out : c" ~) N. ~2 F ~- w$ |
19.1 游戏的玩法 4 }; [5 q- }: k. I$ W
19.2 设计游戏 G7 z9 k( {' _, \+ W& r V
19.3 向游戏引擎中添加另一个子画面特性
3 m8 D( e+ w, ~9 T19.4 开发游戏
, a# R! U7 M/ X4 d7 h19.5 测试游戏
5 j9 E# f" |6 {0 B, F% n6 f9 C19.6 小结 " |5 i: k; J" l- D; e0 S/ W
第7部分 增添游戏的趣味性
$ P! l- y% c2 k0 O* p `第20章 使用闪屏增添游戏的活力
9 P2 \" }9 j" M20.1 闪屏的重要性 : L* m2 C5 c# U$ L8 M
20.2 了解闪屏 ( G6 x$ N7 \% ^" W1 f! L
20.3 创建Space Out 2游戏
7 D0 x# {" ~7 v 20.3.1 编写游戏代码 $ U U) R/ o H1 g5 c. u
20.3.2 测试完成的游戏 & ]' t! J+ B5 Z) u
20.4 小结
! D) e: A6 A* l0 _3 r, Z20.5 亲身实践 $ N: y3 n2 K* ~) A
第21章 使用演示模式展示游戏 : d! b- v# [7 a. r: a% x n
21.1 什么是演示模式 - u/ Z- s9 i6 D) m: S1 t
21.2 演示模式的细节 9 v8 F' z9 c Y" c$ b$ q# C
21.3 开发Space Out 3游戏 4 o' L0 n0 {1 P$ t L6 b0 S
21.3.1 编写游戏代码
- ?* r* g& G8 S6 r [% L/ l 21.3.2 测试完成的游戏 . H3 B: ?7 l/ Z" H
21.4 小结 # W( @6 H) ~5 y; w- S
21.5 游戏大变身 6 a, A F% `7 z9 F! q5 @
第22章 记录高分 9 {4 ^ p( t, g3 [& i: i) S1 A
22.1 记录得分的重要性 / m8 l& e3 J5 Q. A( C
22.2 确定高分数据模型 6 d6 I- w: ?4 L
22.3 存储和检索高分数据
+ ~: q: a3 g" v/ {. e22.4 开发Space Out 4游戏 ' s: t+ R. O X8 X
22.4.1 编写游戏代码
3 `. F! M9 ?# A' e' m+ x. H 22.4.2 测试完成的游戏
1 L5 {8 p- j9 O) M/ h" W22.5 小结
) v4 J% R" V4 h/ z. x1 l# \7 Z22.6 亲身实践
/ x$ |' l. x% n2 @) e第8部分 附加练习 ; T5 ^, Z2 e. |' f) c7 f+ b' \- w
第23章 使用滚动背景更改远景
% r8 K4 Y$ B8 s" Z6 E9 P23.1 什么是滚动背景
9 y' U# c3 `. L p `' L r3 Z0 J 23.1.1 横向滚动的背景
! I: U" r/ x2 a9 o% O 23.1.2 纵向滚动的背景
' r7 V8 `, O1 @0 n& Y1 ^; [ 23.1.3 视差滚动背景 7 b- s" A% I2 ?7 g, u8 i+ Z
23.2 理解滚动背景的工作原理
9 }5 @, f# B( _# U2 l23.3 向游戏引擎添加滚动背景支持
3 T- `& J7 b0 P1 \ 23.3.1 创建背景图层类 M: a) J3 }4 B% |) o) G
23.3.2 创建滚动背景类
: f/ _# f- z; r" V* p+ x, s. A$ U( r23.4 开发Wanderer示例 % }5 S- m1 W9 V' E2 M
23.4.1 编写程序代码
# u7 ?9 K( Q2 o6 I 23.4.2 测试完成的程序
% n; [3 s2 h- q* J' f: t8 G1 K& A23.5 小结 $ | X. ]& x0 v: W
23.6 游戏人变身
% Y; x: D$ u, b' i( D0 `第24章 示例游戏:Stunt Jumper A& O: v6 ?2 M- R5 Y6 t y
24.1 游戏的玩法
0 K% p( L9 i+ u3 Y: x: M8 x9 E9 Q t24.2 设计游戏
7 F o' w5 \. Q3 b5 _4 W' I24.3 开发游戏 6 g: {' S+ @. ^& J$ j! P
24.4 测试游戏 7 m' G3 r7 x9 _4 y( v) B
24.5 小结
. F/ l5 N6 W0 L D. r24.6 游戏大变身 ' D5 ^# c4 t( a' C) m
24.7 亲身实践 " c$ F! @, m- H2 i
" g/ ]- z2 B9 C! Y; n
【下载地址】
# J: z7 V X" h( J' |7 X6 j" z. g$ C: ^+ r; E8 o" A
5 Y. u) t3 h3 s3 D: X M- [- G7 H3 V |
|