|
|
如果你会一点C、C++语言,你就可以学习游戏编程了,开发真正的游戏!如果你学过一点C++更好,没学过也没关系。本课程教你从零基础开始开发7个完整的游戏:Brainiac、Light Cycles、Henway、Battle Office、Meteor Defense、Space Out、Stunt Jumper。教程无KEY wmv版本,手机平板等移动设备均可观看!+ e2 E, d+ U2 X3 a
【课程目录】
9 v/ x- s4 A6 k, @第1部分 入门
: [- b' ~ ?3 Z% t第1章 学习开发游戏的基础知识 o: ~3 [! j7 U; T
1.1 认识视频游戏 + r" E# j+ g- ~) t: H5 A4 Y
1.1.1 为什么人们如此沉迷于开发视频游戏
/ S0 l" x6 d4 q( H! D9 P 1.1.2 视频游戏的类型 8 G$ v. J" r( k$ E6 m
1.2 学习游戏设计的要素 # B) ^+ A/ i+ }, c( e
1.2.1 提出基本思想
+ P! L& ?! P% | F8 T 1.2.2 整理剧情
/ W( S! p9 e3 \ {3 a' ~1 }5 A 1.2.3 可视化图形 4 b9 r' x5 N3 u" I
1.2.4 为游戏选择正确的声音
# |/ v9 O* r, ?- p 1.2.5 使用控制器控制游戏 , b9 s5 {- V' g% a
1.2.6 确定游戏模式
- o+ X. \; b, g5 a1.3 面向对象的编程和游戏
5 i6 V) `4 u: ]7 O7 v) } 1.3.1 理解OOP
7 D& H) c' ?' N8 t+ K- ^' T 1.3.2 在游戏中应用OOP
p( ~+ N5 }% f2 v: C% k1.4 研究相关工具
* D3 G+ q/ C: e$ A! @ 1.4.1 编译器和开发环境 & ^9 D J# N X5 z: I8 V+ U2 r, g* q$ d
1.4.2 选择图形工具 - n, v a, c: _: P
1.4.3 选择声音和音乐工具 & N+ V9 e6 M# }, T6 n5 U1 U% \2 g
1.5 小结 4 a1 F' K( i3 N8 H
1.6 亲身实践
4 D0 T) w0 l0 l' u, _第2章 创建游戏引擎
5 x" P5 P& P. D' p3 w' z2.1 什么是游戏引擎 . o( ^; {# E7 V) Q
2.2 考虑游戏引擎的作用 & P$ B) K- \6 j+ p0 S
2.2.1 将游戏分解为事件 0 Z4 e2 O- n) D7 k ~# A
2.2.2 建立游戏的计时机制
2 A( g4 |* B% w1 I2.3 开发游戏引擎 & w: _( n! _1 Z, N. `
2.3.1 游戏事件函数 8 ]1 G+ Q6 Q/ [/ Q" @# y
2.3.2 GameEngine类
1 ~- a6 r1 r/ ]& p6 g6 B2.4 开发Blizzard示例 2 M3 v b; E( l5 r
2.4.1 编写程序代码 6 @2 u/ P) e6 x1 \. t
2.4.2 测试完成的程序
8 m! F! t) [. ~; x0 M# J/ c& X" p2.5 小结
0 ?) k( H) C$ S2.6 游戏大变身 % E# g) e9 y2 b( l7 [1 M+ d" [8 T
第3章 学习绘制基本图形 , J- j! @+ R2 \! k P4 p
3.1 图形基础
+ Q7 o% Y+ v( b+ z9 i* V/ s, U 3.1.1 理解图形坐标系统
9 `) o. u4 e. t5 [& D 3.1.2 学习颜色的基础知识
4 h: V! ~6 a3 j4 w/ e3 M0 U3.2 查看Windows中的图形 : Y/ h& Z+ S3 ^' f/ c" n" h
3.2.1 使用设备环境 - G/ @2 J$ Q5 E# Z$ \5 d& h1 b
3.2.2 使用画笔写 $ M1 @% d. {$ `7 r8 ~9 L& v/ _
3.2.3 使用画刷绘制 0 F0 J# C- T* _- Q! [5 n6 W2 O# A
3.2.4 使用位图绘制图像
4 Z' \: ~# W3 M* o. a 3.2.5 使用调色板管理颜色 : R3 N4 {) [+ _4 h
3.3 绘制窗口 ' u: @& F" C' L
3.3.1 绘制文本
6 a/ R' ?7 g8 S( ~) \ 3.3.2 绘制图元
- w1 Y1 Y d- D8 d c+ t3 I 3.3.3 使用画笔和画刷
0 O! H9 V7 @6 }8 T3.4 开发Crop Circles示例 ( w+ p y* r4 @
3.4.1 编写程序代码 , Z5 L. M; f( }* u
3.4.2 测试完成的程序 ' T! C2 G/ W! k0 g" q7 G9 [, l
3.5 小结 |9 {: K M( A' {/ r9 }9 u
3.6 亲身实践
' }7 I/ n& `! N% {; F7 |2 V第4章 绘制图形图像
: n1 q, R6 s% J; E' ^, S4.1 位图图像的基础知识
4 ^2 M% n7 H, C+ `6 S4.2 深入学习位图 9 m. F: N+ p/ d- F3 S4 F
4.3 开发位图类
! B8 b& O+ R. S4 q3 a 4.3.1 位图类的工作原理 # S% |- R9 i& T# X2 |8 R _
4.3.2 整合代码
9 _- `" e" n* s4.4 开发Slideshow示例
" u7 }6 [3 R1 `! r4 P; j6 @/ F 4.4.1 编写程序代码
1 I5 n0 I9 g( ~/ M0 x* w* Q 4.4.2 汇集资源 3 {- B% v0 y; J: l6 j# z! K# h
4.4.3 测试完成的程序 - v) j Z' ]! H7 R2 ^4 b
4.5 小结
8 b5 ~6 r! T# t4.6 游戏大变身 3 U+ d9 @/ l" p
第2部分 与游戏玩家交互 6 b$ d& n( W9 E
第5章 使用键盘和鼠标控制游戏
: P2 |, K; y/ j4 C) r5 O" g, G7 g5.1 游戏与用户输入
% f! S" L e7 o7 Q" i5.2 了解用户输入设备
8 r& \" v' X9 e f/ A$ U. { 5.2.1 接受键盘输入
: d, B6 W u& K9 p9 J- a 5.2.2 响应鼠标
; {" f" G+ o ^/ ]; q3 g3 u' R$ T 5.2.3 使用游戏杆交互
5 @* E2 @ ]) P' l3 h" }5.3 评估游戏的键盘输入
2 k) Z1 s8 c- d5.4 跟踪鼠标 ( O! e7 n& ^: y$ I
5.5 向游戏引擎添加输入支持
+ K# Y( O5 l1 \0 r# {) q 5.5.1 添加键盘支持 - \* H# K0 T8 Z# K* N) U$ ~0 s5 ^
5.5.2 添加鼠标支持 b: j( V; f; b+ `. g
5.5.3 修改Bitmap类 & m8 Q" t1 E$ x9 q
5.6 开发UFO示例 9 y1 \# s) S" a9 \
5.6.1 编写程序代码 1 n f2 n/ W |# T7 ^7 J5 A- @
5.6.2 测试完成的程序
+ l& z0 a% ]8 Q+ x5.7 小结 0 \3 k, I* l$ e* O, l' k* E
5.8 亲身实践 * I, x4 l$ ?9 w# m' [" w: C
第6章 示例游戏:Brainiac + b/ `% c8 C) P k1 y9 @0 R
6.1 游戏的玩法
, ]1 d9 N) Z& D/ w' c2 Z& S6.2 设计游戏
1 Y t! ?7 k" f* z" t6.3 开发游戏
3 @; ~8 N7 j* F. Z6.4 测试游戏 : n: q( N5 X9 R0 M4 @2 p9 ^; e1 @
6.5 小结
+ i4 c& y# r( V! t1 G. c6 ~6.6 游戏大变身
* z2 P" m' B) D* M% [第7章 使用游戏杆改进输入
3 d; p6 h2 T4 t7 t! q5 f! m7.1 了解游戏杆的基础知识
+ i I' P- d* g7.2 校准游戏杆 " p" x" `* f5 N6 ^& r+ R
7.3 追踪游戏杆的移动 " o( |( g) m) k& v
7.4 向游戏引擎添加游戏杆支持
9 f7 R# S( |! m, I( `% Z 7.4.1 访问Win32多媒体功能
1 U1 ?7 W# i/ @* J 7.4.2 开发游戏杆代码 ?* a' R' T' i* Q, n' J
7.5 开发UFO 2示例
6 Z% t- {3 d$ O& w" G" g1 _( T 7.5.1 编写程序代码
1 H0 a7 y" F: P 7.5.2 测试完成的程序
3 c% A6 `: X7 Z1 g' r3 m, o, i+ s7.6 小结 2 P& ?5 {6 `% s. f; a: n, a
7.7 亲身实践
: b. i2 P( b0 Z! p) v. f; a第8章 示例游戏:Light Cycles
8 l9 O% z0 ]3 Y% n8.1 游戏的玩法 ; p5 H; F* {4 j& f |& V
8.2 设计游戏 e2 H3 G6 | k, ~
8.3 开发游戏
- u5 M4 @6 n8 D8.4 测试游戏
/ W8 l% u `3 G" y& n8.5 小结 & q9 ~7 [$ q! c7 T) {" I
8.6 游戏大变身
/ q, ^6 U" W1 |; B$ s第3部分 在游戏中使用子画面 " q2 N I' \! w+ H" x
第9章 使用于画面动画移动对象 3 J/ ?) H) A* c' W/ _
9.1 理解动画的基础知识 0 {; h6 L4 L4 E% K1 E& S' `2 `# J) T
9.1.1 动画和帧频
' i5 G& c1 Z5 y6 A5 O' ^, [ 9.1.2 了解计算机动画
2 J9 E; B8 v- U1 p5 Q b" }9.2 2D动画与3D动画 * }" c& q, h2 @& j8 C ~, p
9.3 理解2D动画的类型
" v" ?- F, ^" ]' G- a 9.3.1 基于帧的动画
8 L" t a! \$ w2 a, V4 T 9.3.2 基于形状的动画 ( |1 V) A0 y9 e0 g+ g
9.4 将子画面动画应用于游戏 3 U) A! [( L4 d* Z! S
9.5 设计通用的子画面
* j3 {8 K+ }+ Y: O9.6 创建Sprite类 * {+ V+ t. {& n( A/ T
9.6.1 创建和破坏子画面
C. c# c# w; x- O* Q 9.6.2 更新子画面 1 \" ?. @" r) ]- w6 T, B) j
9.6.3 绘制子画面
2 z" J1 E3 K# ]# Z1 o0 w/ }9.7 开发Planets示例程序 ! b: e' q& w, h6 y' h
9.7.1 编写程序代码 4 a6 ~% b# y( n+ J5 L) U5 c
9.7.2 测试完成的程序
' A5 _ M1 @' w/ }9 P( r9.8 小结
5 r( h& F5 n; j2 \; H# y2 ]9.9 亲身实践
8 u+ k" y7 Q' S" X第10章 管理子画面
8 Z4 f9 n5 O* |0 Y D; N, x10.1 了解管理子画面的需求
4 w' @# F& s" @: t10.2 设计子画面管理器
, x. d# j6 N- I* |9 S$ s* O9 j; ?10.3 向游戏引擎添加子画面管理器
1 }9 ?9 J; | T" Y- j4 D5 F 10.3.1 改进Sprite类 + f; i; Q3 P6 y- f' L4 z4 ]
10.3.2 增强游戏引擎 " h4 H0 F) P( r
10.4 使用双重缓存消除闪烁
\5 d& F N& }10.5 开发Planets 2示例 # y+ ^. z0 O, Q" Q+ J( m6 H7 R: u
10.5.1 编写程序代码
$ g# A4 z7 y" }" x% [. n 10.5.2 测试完成的程序 0 Q U! [* N/ {# S G' Y
10.6 小结
. s& ^6 k2 n2 X# K% B! |10.7 游戏大变身 8 x3 P+ `* u& d( D! X8 F% o
第11章 示例游戏:Henway
0 ^+ C% ]5 g- _8 ^/ o# R0 c* j11.1 游戏的玩法
# d! n# { _: c* r11.2 设计游戏 3 a9 e' V/ o+ U) m1 P8 T4 Z+ k
11.3 开发游戏
, i, U6 f6 T; g. D' V1 v9 U11.4 测试游戏
0 W" \1 G. U& _11.5 小结 ! t! m2 M( q+ h: ^; a$ a
11.6 游戏大变身
9 G. H3 d* y% a) C, ]第4部分 使用声音和音乐
' E0 k% r' k5 f; o第12章 播放数字声音效果 . I. @8 v- B+ o) L2 b' J8 z; B! Z6 _
12.1 理解数字声音
5 u( @$ l n) m8 \; U) ]$ Z: I12.2 了解Windows波形声音 " a7 O1 _$ n4 i6 g8 a4 I
12.3 了解声音工具
; ^! j; h) ^3 ]$ |( l6 B 12.3.1 Sony Sound Forge 9 e' o# h& t; H% Y& N7 k$ n8 `
12.3.2 Adobe Audition ! i; c) K$ ?8 Q/ f7 l* X7 X( j; \
12.3.3 廉价的声音编辑器
6 G0 _7 Q& o% C( `+ L! l; H, J12.4 创建和编辑声音
# I6 R0 Q! K% ]8 x12.5 查找声音和音乐
: m |4 x& ~# S- [. U! M. @12.6 访问波形声音 7 ]# \/ @% c( ^. D
12.7 播放波形声音
L# L+ a$ p% s& m, r+ k 12.7.1 播放文件中的波形声音 2 b5 k/ y8 s+ L1 G9 R0 ]
12.7.2 播放作为资源的波形声音 ( Y4 h# W$ U# l
12.7.3 循环播放波形声音 0 y2 g, f- a* _- W$ |
12.7.4 停止播放波形声音 9 F1 ?* t/ x$ p2 i9 C
12.8 开发Brainiac 2示例程序 2 {7 Y: u8 M) `0 ~ n
12.8.1 编写程序代码
& Z3 N, x% m+ a S k8 S) r 12.8.2 组合资源
1 ], I* [1 S, t# x 12.8.3 测试完成的游戏 0 ]6 E5 a9 |& E: X1 W2 G, D
12.9 小结 1 ]' p7 I+ R# K6 T* z- g
12.10 亲身实践 6 H; R/ n( @" B( v1 F9 z9 x$ W- D
第13章 播放MIDI音乐
* o* M; d" X% `0 t2 v p13.1 感受MIDI音乐
, A* j( @" q3 ^- }, L5 `13.2 理解Windows媒体控制接口 ) j. F! K6 X2 E
13.3 使用MCI播放MIDI音乐 7 o2 S$ D5 L. J+ `& ~( O
13.3.1 打开MIDI设备 " d* Z1 z# N' Q4 w
13.3.2 播放MIDI歌曲 : ^9 M3 G- Y. v# v* G) P- }+ Z9 d Z5 @
13.3.3 暂停MIDI歌曲
a8 l! x7 C4 n" j2 O" K( q 13.3.4 关闭MIDI设备 4 u) j$ D- I7 f: J r: j
13.4 向游戏引擎添加MIDI音乐支持 & u1 P: d! A) m" W+ D
13.5 开发Henway 2示例程序
$ V1 G: k3 } }0 e- M7 Q* U1 Y 13.5.1 编写程序代码 6 [) Z3 D* d- y: F, w! V- c* n
13.5.2 测试完成的游戏 : M. c+ n7 G* i8 I
13.6 小结 , F. k2 M9 H# G: b @
13.7 亲身实践
- B% [1 i: z* u9 f! E第14章 示例游戏:Battle Office ( Z& ^$ V% m8 y. T
14.1 游戏的玩法
2 A0 }, [! s7 m/ W4 h! c/ \14.2 设计游戏 0 N s7 a: \' V; H# X9 k
14.3 开发游戏 5 N- ]9 K' a( R6 G6 N8 T
14.4 测试游戏 & s- h5 w6 M$ s* G% R( z& a
14.5 小结 + U0 A- ?0 T: @" @3 o! J
14.6 亲身实践
% L" d1 A0 t0 W3 P( ~' X9 c第5部分 高级动画
' \2 k$ @' Z2 R, A \0 C第15章 实现子画面外观动画 1 b6 a+ h& @ F4 [( v! b) ?$ d
15.1 再次介绍帧动画 & ~0 K# C4 R" l, {) T8 N
15.2 设计动画子画面 , E3 y" N( I. |' c8 p7 ]" }! ^8 P
15.3 向游戏引擎添加动画子画面支持
! S% l4 [/ z6 z/ S6 M 15.3.1 只绘制位图的一部分
b! h) P% v4 r- A, ^2 e4 Q; K9 g4 q 15.3.2 对Sprite类实现动画
3 m( N" F4 G4 T! h! O8 u3 P15.4 开发Battle Office 2示例程序
" P/ v, o/ _, g' S6 V 15.4.1 编写程序代码
0 o3 J( c. \+ @3 z 15.4.2 测试完成的游戏 1 T% t. q9 p2 g' C5 e5 u
15.5 小结 3 e- f0 g9 A( R7 G4 l4 h3 @$ V- ]
15.6 游戏大变身
% z$ c- z8 V' s7 {5 \* l! E6 K3 Z第16章 创建子画面背景
, L8 y) b/ B' z9 ]4 }16.1 了解游戏背景的重要性
5 @- \3 ~6 x; u4 M& ^! [' B16.2 了解游戏背景的类型
* m; x6 [: Z: {% c' V 16.2.1 纯色背景
0 F+ ~3 E& a: R/ s7 d 16.2.2 图像背景
# _+ c9 f6 b( m- O# c 16.2.3 动画背景 7 G! I: W3 o5 u$ @3 C) i5 H
16.2.4 滚动背景 / ]! y9 K4 h$ _+ L+ S% N& W
16.3 向游戏引擎添加背景支持 : K9 x7 q: ]" L
16.3.1 创建基本的背景类
) j$ H/ J& o: g 16.3.2 创建动画背景类
; Y: W" B: R: s# v16.4 开发Roids示例 9 Z7 M! f% u# N/ N
16.4.1 编写程序代码
7 u& J9 ?3 U& d# P. Z3 m# Y6 T 16.4.2 测试完成的游戏 ; i- F' P5 ]. d+ j9 G# U. o
16.5 小结 + ?9 V8 z9 D/ @- c7 S9 b) [! M
16.6 亲身实践 ( |( O8 N( S. e; [' C8 [$ {0 |2 O- n; `9 d
第17章 示例游戏:Meteor Defense + S* ]$ H6 b' m1 Q* X8 M: }
17.1 游戏的玩法 8 w% O8 M/ {: v3 W
17.2 设计游戏
* x& N! @8 f7 ~5 k" o5 u" x17.3 增强游戏引擎中的子画面
& A1 D, i. Y c! L3 L2 ]' t) F17.4 开发游戏
$ N2 m, x' k h17.5 测试游戏
0 A% P Z; s \& e9 S5 A. \* o17.6 小结 + j. f/ G0 v) E9 V1 }- {- B
17.7 游戏大变身
1 A o$ K0 h# X, i$ v! r) n第6部分 让游戏拥有大脑 1 X: U! M: X& N1 J7 h/ h
第18章 教游戏思考 0 w+ s$ x( V4 H/ e6 X
18.1 理解人工智能3 c* v& r, |# i6 l7 l/ ~
18.2 了解游戏AI的类型
1 J9 s! c+ ~) X0 K 18.2.1 漫游AI
# d! q7 \: t% R9 F H. B 18.2.2 行为AI : i3 f4 x+ W. [) ] d+ O0 O' M* E
18.2.3 策略AI
. k' |+ L6 v2 K3 z: m$ j18.3 开发AI策略 ) B& u' }, J. u" G. Y
18.4 开发Roids 2示例程序
& k8 z1 i3 j0 D 18.4.1 编写程序代码
. b# N2 {( H/ { 18.4.2 测试完成的程序 + \% q# i7 q0 g% @: r' d
18.5 小结 . E5 c% }' Z* Q) u4 u8 v% N/ {
18.6 亲身实践 5 f, c& F* b( l8 \
第19章 示例游戏:Space Out . @; v0 n2 D$ H$ @# O( g$ _
19.1 游戏的玩法 ! d! |" R5 G6 \1 X, T7 I
19.2 设计游戏
0 E* K+ j3 ^( }1 X) Z0 y19.3 向游戏引擎中添加另一个子画面特性 " ^7 e1 v$ ] ^ E
19.4 开发游戏 2 C. U6 ~4 B7 {% T9 T' r L' {
19.5 测试游戏 8 d7 ]& G I' h6 Z0 d/ J- r' U# W
19.6 小结 4 t6 s& h+ q0 t6 _- k8 h
第7部分 增添游戏的趣味性 0 r' l) r8 F) @" C% x: @5 H" ]) t
第20章 使用闪屏增添游戏的活力 7 n1 K6 X+ t& [9 w! k# _6 h
20.1 闪屏的重要性
5 c& H5 c, u h" r20.2 了解闪屏
# v5 o9 k" [* U20.3 创建Space Out 2游戏
9 r; J& r; c- k 20.3.1 编写游戏代码
- u1 W6 n3 s( E, f! x& Y# C c( g' s 20.3.2 测试完成的游戏
& X$ `# Q& o: d+ L/ h20.4 小结
5 h6 C n' l( H/ i1 K20.5 亲身实践
1 B$ _. C4 A* l0 H第21章 使用演示模式展示游戏
2 B9 ^- {* ^; ^, I21.1 什么是演示模式
0 G- D) v! }; P/ K3 _5 z2 j6 j21.2 演示模式的细节 3 j7 ?) U/ h8 T2 p) y; c
21.3 开发Space Out 3游戏 1 m' Q w0 r3 ?# j' G5 C
21.3.1 编写游戏代码
3 l- A) x+ f2 |) B9 n: S 21.3.2 测试完成的游戏 - q$ r4 Q E4 o1 L
21.4 小结
, P( j# y5 e, ?7 a21.5 游戏大变身
1 l0 O" z% L$ A! W4 P* f. ?第22章 记录高分 6 B" p9 A4 t1 ~, u2 k$ s F& `
22.1 记录得分的重要性
" ^5 w5 m: t2 I/ D/ `( \22.2 确定高分数据模型
% m* n0 ]+ o8 L1 {$ b22.3 存储和检索高分数据 : T! F* D. }9 L
22.4 开发Space Out 4游戏
6 ^% ]7 _/ d, u 22.4.1 编写游戏代码 6 |( d: L4 m$ n, ]4 L7 @0 e" N
22.4.2 测试完成的游戏
' i K; ~' I+ H22.5 小结
* n$ y9 y: X w$ |# N1 D22.6 亲身实践 ! h0 z/ m% i$ E. I# w& b
第8部分 附加练习 0 [" m2 U3 {1 p4 W5 b
第23章 使用滚动背景更改远景
/ `+ g4 B5 a- l* G/ G6 S) @0 j23.1 什么是滚动背景 3 M9 o! g: V3 P& s
23.1.1 横向滚动的背景 / ?: I; n# A( P# t
23.1.2 纵向滚动的背景
, Q$ T7 q$ _- Z 23.1.3 视差滚动背景
% a! |2 E* ^& {7 ?. I23.2 理解滚动背景的工作原理
& o ^$ l5 M" e; r: U9 y! J! i23.3 向游戏引擎添加滚动背景支持
. ]3 V+ O4 B3 l8 x" A; T5 S 23.3.1 创建背景图层类 : N8 R: a+ h; h' R1 b
23.3.2 创建滚动背景类 * Z3 {2 t1 B$ l/ h
23.4 开发Wanderer示例 / T1 A: L5 n5 ?5 {$ u! P# h
23.4.1 编写程序代码
+ j1 E6 Q1 q- I/ Z2 | 23.4.2 测试完成的程序
9 n" S( K! v- R! X5 F0 \23.5 小结
& }: Z. O$ r- X6 y2 n. }23.6 游戏人变身
1 U0 d( z( x5 _ B* V第24章 示例游戏:Stunt Jumper " U. x8 S' w% c& l( N" [
24.1 游戏的玩法 * N$ M+ S8 @& V8 x, Q Y' ]
24.2 设计游戏 3 a$ j0 j1 a$ l- `& e. L
24.3 开发游戏 ! i. U) x. O2 u6 P! Y: O( T
24.4 测试游戏 ) s: B4 @" c2 @1 ]# G T* v
24.5 小结 / S; u( j! Y; |# i0 l
24.6 游戏大变身 1 I# t9 a* F) W6 g' T" v
24.7 亲身实践
. j2 W$ @' Y. D6 F8 s( i9 l9 U9 V3 |# |* j; l; E5 X* z% N6 ]7 S& Q
【下载地址】
. n1 I6 d8 {+ A+ S7 e9 x1 M; l3 F! w1 r) M( D
/ ^3 ~" P# B$ _+ I$ P7 o# R7 n/ p- S" G |
|