|
|
如果你会一点C、C++语言,你就可以学习游戏编程了,开发真正的游戏!如果你学过一点C++更好,没学过也没关系。本课程教你从零基础开始开发7个完整的游戏:Brainiac、Light Cycles、Henway、Battle Office、Meteor Defense、Space Out、Stunt Jumper。教程无KEY wmv版本,手机平板等移动设备均可观看!( c& p& K# q3 z! R* Y$ g
【课程目录】/ E% H* W+ Y! w/ x1 ~6 ?
第1部分 入门 ' a- `& h6 F1 m) v( s
第1章 学习开发游戏的基础知识 ( {, I7 V" T& Q: K
1.1 认识视频游戏
! V F7 D2 _: W1 a 1.1.1 为什么人们如此沉迷于开发视频游戏 ; t* h2 o# {- k1 [1 w, L
1.1.2 视频游戏的类型
9 v6 _/ f- J/ ^: u9 n% V1.2 学习游戏设计的要素 2 t8 P4 J" }/ t* B
1.2.1 提出基本思想
- d6 ?" ]& @/ w( R6 i q 1.2.2 整理剧情
% w) o4 i& T; ]. f 1.2.3 可视化图形 3 `2 U+ E u$ q' `
1.2.4 为游戏选择正确的声音
- U5 S' R0 @7 X9 O* e2 e! |) \' s 1.2.5 使用控制器控制游戏
, C# Y) P$ R9 t2 j4 q( a* m 1.2.6 确定游戏模式 & G, [! V- T& r0 B% T; _# `
1.3 面向对象的编程和游戏
& k, R# ~1 K) b) M 1.3.1 理解OOP " C1 g8 ^2 v' Y1 `- G, V
1.3.2 在游戏中应用OOP
9 ]0 F1 ~% n2 [) x1.4 研究相关工具 # _8 P% y2 h. C6 E# N! |
1.4.1 编译器和开发环境 ' k/ ^' c$ P0 a* R/ I6 Z
1.4.2 选择图形工具
0 ^5 P: y0 J2 C8 B 1.4.3 选择声音和音乐工具 1 [* e+ U& a& h6 ]1 m
1.5 小结 6 t3 P7 W7 r" q# m0 H( t. k1 o9 a1 n) G
1.6 亲身实践
. F; _ ?3 V; r, u5 X第2章 创建游戏引擎 * Q* e! l8 u$ {4 d4 x- {
2.1 什么是游戏引擎 0 h: [/ J" B0 [
2.2 考虑游戏引擎的作用 . n. `5 u0 D' m" _( O5 G. o9 U
2.2.1 将游戏分解为事件 1 P4 O9 u& E) j$ {! M! A' D2 P$ x
2.2.2 建立游戏的计时机制
l; p& o" ^0 V- ^2.3 开发游戏引擎
?* s0 u: w) W, U 2.3.1 游戏事件函数
+ g' Z5 ]( V4 l$ @ 2.3.2 GameEngine类 4 p K+ e* m, A% j* K. S# R5 a
2.4 开发Blizzard示例 3 ]5 U$ R0 g! C* I
2.4.1 编写程序代码 8 z9 S; [6 r0 {
2.4.2 测试完成的程序
9 ]4 B2 s+ S- C. j' g! {$ O7 z" I- \2.5 小结 - Q+ c7 _7 ^ \5 X: K5 f8 O
2.6 游戏大变身 n0 r5 b" a( {( A* N
第3章 学习绘制基本图形
. c2 f( J+ y" T! Q. N6 w* [3.1 图形基础 4 U( m \6 ?& A' g
3.1.1 理解图形坐标系统
; Z8 E4 [8 R) r, o6 B* ^0 G 3.1.2 学习颜色的基础知识 ' I( h/ C* g/ P4 j% Y! E; i5 i+ Q
3.2 查看Windows中的图形
+ s' ~8 |; U4 F, U' R# V+ f 3.2.1 使用设备环境 9 h5 }: p! ]% T: A9 j9 m; g
3.2.2 使用画笔写 7 K( M3 ^- e# n3 d# L$ l7 M: O
3.2.3 使用画刷绘制 # z; Q' k: Y5 n8 R( D$ b% ^
3.2.4 使用位图绘制图像
: X* R) p8 H p5 G3 K 3.2.5 使用调色板管理颜色 . `1 r2 O8 Y% z3 \" v' a
3.3 绘制窗口 % t- [9 @" P, ^0 a! [; B/ {
3.3.1 绘制文本 9 y& J: I& [: j5 h
3.3.2 绘制图元 6 m" r* w( E4 ?9 p$ a# ^; Q
3.3.3 使用画笔和画刷
: [: J& p( C5 o8 P) K3.4 开发Crop Circles示例 D; E+ }( U+ X7 Q1 ?: d
3.4.1 编写程序代码
! ^ C' q! N& t$ f. Y 3.4.2 测试完成的程序 / A' g0 A3 h1 g- C0 f; r
3.5 小结 3 o& Y$ U0 I* S$ S4 }0 d2 a( c
3.6 亲身实践 0 S5 s( ?" y7 y) w9 @6 n5 x
第4章 绘制图形图像 4 Y; `5 U4 p& P/ ~* ~' X) b4 M
4.1 位图图像的基础知识
3 q$ J: o; Q0 D0 |! B0 {/ i6 A4.2 深入学习位图 + O5 n0 Z& Q: l
4.3 开发位图类 ) |" N6 e; `: Y
4.3.1 位图类的工作原理 4 P/ ?0 I9 V- U9 o" H1 F! P
4.3.2 整合代码 + X1 e. H3 u# Y; H5 _0 j
4.4 开发Slideshow示例
3 `9 B7 b3 Z! t& y, a 4.4.1 编写程序代码
# ], b" k3 w* p# f: r# H 4.4.2 汇集资源
# R. K2 B! W! _% e8 ] 4.4.3 测试完成的程序 2 j$ `+ x. F, Q j$ M0 F. j
4.5 小结 7 |+ P" T z5 \1 p4 v
4.6 游戏大变身
( t! C1 b- t3 Y: k第2部分 与游戏玩家交互
8 `1 T) ^) ?" @8 i, P4 r第5章 使用键盘和鼠标控制游戏
7 \2 r8 D: f6 c+ X# P* v5.1 游戏与用户输入
: Z' u3 t( [5 d5 o/ u' z! x* R5.2 了解用户输入设备
% A* B# E1 m: F) y9 ~- x 5.2.1 接受键盘输入 - ]/ Z6 N. h; Y2 [- R) c: z
5.2.2 响应鼠标 6 @/ W4 r+ \( W/ Y- v4 w" J
5.2.3 使用游戏杆交互 " |0 e: _( K# t3 g! R
5.3 评估游戏的键盘输入
( z+ }; \: f' s% q5.4 跟踪鼠标
0 z: N1 g# U( R5.5 向游戏引擎添加输入支持
: c5 `" |0 O7 B; M 5.5.1 添加键盘支持 ) O5 M% d& N' d5 U* A/ o* O1 W" d
5.5.2 添加鼠标支持
7 \ A' {- W* j) v! A 5.5.3 修改Bitmap类
# E7 u9 p. W9 a8 r$ g9 p' Y+ ]5.6 开发UFO示例 ; z0 a/ [! L/ G' o2 R2 Q
5.6.1 编写程序代码 : i2 [' Z$ H, B
5.6.2 测试完成的程序 ; w* ?/ j/ c( m
5.7 小结
{9 A1 n0 X1 {( P9 K5.8 亲身实践
5 }( W( V5 U0 G* B3 Q第6章 示例游戏:Brainiac
0 |+ e0 g. t1 }. u6.1 游戏的玩法
$ g& l2 w5 }( B; P9 Y$ B K8 U6.2 设计游戏
7 T5 Y- c0 D) ?4 P8 }6.3 开发游戏 - Y* ~# i1 q( D8 ~
6.4 测试游戏 6 _3 [& K6 m9 y! I& ?% O8 g' w
6.5 小结 " Z, o$ R, B3 f; }
6.6 游戏大变身 . x8 d3 v* V& v) K1 a) c3 l/ I
第7章 使用游戏杆改进输入
) O2 m; ~ t7 I+ y# {4 X! D. P7.1 了解游戏杆的基础知识 # O& m$ X; Q' J+ L( Z. R- d, s% G
7.2 校准游戏杆 ; l: ]. u0 g" q% P. I; A6 A
7.3 追踪游戏杆的移动
5 u2 i( X+ f {+ X7.4 向游戏引擎添加游戏杆支持 1 X" Z( u- K3 I. ~8 ?7 i: t
7.4.1 访问Win32多媒体功能
M3 @! a: p8 y1 b* h8 ^ 7.4.2 开发游戏杆代码 3 C; B4 c+ a" l8 l1 L" |
7.5 开发UFO 2示例
& f- q! }0 \/ R `8 [) j% b 7.5.1 编写程序代码
( ?* ~+ I; s" t( y" t 7.5.2 测试完成的程序 , J6 o" o9 q# D/ d: w
7.6 小结
5 X3 y5 r8 s" i! y K8 g' \7.7 亲身实践
3 S4 V: g2 b$ D第8章 示例游戏:Light Cycles ' |! N9 U* T! |; f7 x; k
8.1 游戏的玩法
; \* j8 [3 N4 ?6 G0 r# U8.2 设计游戏
# {, [* j. L- B' ^8.3 开发游戏
1 d Z% n' M9 K, ~% B, @: V$ L8.4 测试游戏 ! c- {: `" l* q0 e
8.5 小结 9 t# [( t6 {1 V6 m9 @( g
8.6 游戏大变身 ( M5 }! O6 X8 o% g% \
第3部分 在游戏中使用子画面
9 E* W Z9 @0 Q第9章 使用于画面动画移动对象
3 i" I( L+ [6 Z% ]7 B9 [# {+ f2 b9.1 理解动画的基础知识
# f/ x! C# l- Y; K' e 9.1.1 动画和帧频
' y! ~5 I X0 U1 G) E4 y 9.1.2 了解计算机动画
% ]3 P9 U+ e$ J8 d' g( W* h! F4 p9.2 2D动画与3D动画
& x( l1 U L- q& @8 Q9.3 理解2D动画的类型
, d$ V, S. S4 E( q, K" | 9.3.1 基于帧的动画 + w6 {* V: Q4 L; H) `& r2 d/ m
9.3.2 基于形状的动画 3 u( w5 c0 P5 Q% F
9.4 将子画面动画应用于游戏 ; k: _8 ^& b6 i* T. [+ V1 T: I2 D
9.5 设计通用的子画面
, f$ |% T4 T5 _6 A3 e9.6 创建Sprite类 5 t5 ~+ H! L( p& e% g, W# g! n
9.6.1 创建和破坏子画面 + g' E0 n, X! B7 {+ Y" ?- M3 l2 G
9.6.2 更新子画面
0 q/ Z2 p; G& I/ V 9.6.3 绘制子画面
% B; J O4 A6 c y9.7 开发Planets示例程序
5 y2 s" a) k- _/ X3 u7 f$ N 9.7.1 编写程序代码
! j# H _4 g' U3 A# S W 9.7.2 测试完成的程序 8 X: B% O9 W$ @7 c9 p5 T
9.8 小结 . b" o" _, K/ W
9.9 亲身实践
H% s: c" T" e. v第10章 管理子画面 4 {- w' i" O: o: |+ a
10.1 了解管理子画面的需求
1 A; E `/ B: O5 v10.2 设计子画面管理器
$ H5 {/ g- H' J# ]1 `' f, A1 k10.3 向游戏引擎添加子画面管理器
5 F& P W) o& h; T! P: W 10.3.1 改进Sprite类
8 B3 Z( f$ s: E% U% ~* O 10.3.2 增强游戏引擎 , M6 A E0 ?' J& L \( R* }: N t
10.4 使用双重缓存消除闪烁 , w7 j2 x" O3 s+ d0 k& d
10.5 开发Planets 2示例
5 [- o' `' |" Z 10.5.1 编写程序代码 - `* F: I) G6 \. y! M3 v; h
10.5.2 测试完成的程序
- k: C0 X: O! X9 {/ S10.6 小结 + ? X' p2 m- @0 G% i4 w" U
10.7 游戏大变身 ; p( ]& y; M: T) K
第11章 示例游戏:Henway
4 D5 i" m Z# j! A, u! s' B {* f11.1 游戏的玩法 # K6 m* o7 \7 h
11.2 设计游戏
v1 Q! k- X4 ?) D2 {* n' f% h11.3 开发游戏 ( J, G* |3 D. |" S( M- U, A
11.4 测试游戏
. y) w) A6 P* _7 {; N) d11.5 小结
4 G6 d+ r: ?7 s- ^! J* L: l5 Z7 ?; o11.6 游戏大变身
$ ]$ {( u! O2 ]( }, A第4部分 使用声音和音乐
1 y4 A' e; A" Y; N+ u8 ?& G% Q9 @/ i. G5 x第12章 播放数字声音效果
0 z$ Y& X; O' b! |- I12.1 理解数字声音
E+ K/ _' r( |/ Y6 F12.2 了解Windows波形声音
9 E) p& _4 N. W7 y( J! i12.3 了解声音工具
3 f/ V! C C# h% I/ P$ T" z 12.3.1 Sony Sound Forge % B/ b0 I* F5 c3 Y8 L/ m8 n8 ]
12.3.2 Adobe Audition 9 h2 j+ R% j: K% X: R
12.3.3 廉价的声音编辑器
2 c# g; l5 R3 o/ c2 w" q12.4 创建和编辑声音
" S3 y* S& }" e5 m8 i12.5 查找声音和音乐 ( k0 m) Q1 U4 u4 l! i
12.6 访问波形声音 . R; n' O$ t! c% N, h5 m
12.7 播放波形声音
8 Q! {2 ]; Y0 i9 D1 S 12.7.1 播放文件中的波形声音
8 m- v3 L8 {) Y1 r# B 12.7.2 播放作为资源的波形声音 - y7 k: I. \& j2 Q* b2 r! ^" m, b
12.7.3 循环播放波形声音 ! W- I* z) F9 E/ A. z+ H$ k
12.7.4 停止播放波形声音
( F- B1 X5 K+ u5 |) y9 t12.8 开发Brainiac 2示例程序
0 N2 ?5 `8 u7 P+ v" D$ v 12.8.1 编写程序代码
+ C( R! E% E$ U+ p( Q/ q" ? 12.8.2 组合资源
- U( l6 A$ ?- l" d7 P 12.8.3 测试完成的游戏 w+ m# w/ K4 D, Q" |
12.9 小结
* X& L+ q7 w) U- _) F. L- J, `12.10 亲身实践
% w/ X' T: v) Z, S$ G7 A+ x第13章 播放MIDI音乐
" R; p$ ?3 `) K- y3 I+ a13.1 感受MIDI音乐
' k/ b- v' _) n9 I9 ?13.2 理解Windows媒体控制接口
# y; c a n: p% L) {7 }! [13.3 使用MCI播放MIDI音乐 5 C! M/ r4 }+ K( z# H
13.3.1 打开MIDI设备 " z/ R, b" f7 E" U& j" X: ~& f4 h9 U3 z
13.3.2 播放MIDI歌曲
~1 B! N( l' g7 }# C 13.3.3 暂停MIDI歌曲
7 Z2 n' W/ P: R7 W+ r- [ 13.3.4 关闭MIDI设备 : j# j8 R4 P \: u" o- G! S
13.4 向游戏引擎添加MIDI音乐支持
. r4 g* ~! J U% e; e13.5 开发Henway 2示例程序
, y1 D1 ]# P& W 13.5.1 编写程序代码
6 J$ N0 t8 O" G' _$ R% I1 _2 e4 R 13.5.2 测试完成的游戏 , Q: G# S' o, h1 t
13.6 小结 5 w" a0 Y% Q3 x' T$ q' Q4 Q
13.7 亲身实践
$ b' c+ C; j1 ?* c+ G: R K/ ?3 j第14章 示例游戏:Battle Office 2 H% q5 O# x3 l- M4 r
14.1 游戏的玩法
0 U1 C( @1 v. z# {2 x1 R14.2 设计游戏
; Y K+ A8 T* ~$ Q14.3 开发游戏
f% n1 C; }+ \% `. N9 x, {7 h9 h4 g14.4 测试游戏
& ?* o& I7 V D5 k2 ~! h& r: y14.5 小结 ! \, s6 ~' c# D
14.6 亲身实践
6 b9 M$ L2 f8 B第5部分 高级动画
3 j. W Z7 A9 E" H& q1 Z7 ?第15章 实现子画面外观动画 0 v$ ?+ v7 _+ l$ G9 h* T; H
15.1 再次介绍帧动画 8 Q! S0 f2 r7 v; G) W' e
15.2 设计动画子画面 6 j& a: ]0 j1 I$ K1 l/ z
15.3 向游戏引擎添加动画子画面支持 / Y+ O( g# v, B# [) y6 r
15.3.1 只绘制位图的一部分 & |# C& v8 m- R+ I
15.3.2 对Sprite类实现动画
1 D5 s$ E+ @% L' v15.4 开发Battle Office 2示例程序 8 L9 X2 ]) \+ f
15.4.1 编写程序代码
* J8 R1 q% O9 X 15.4.2 测试完成的游戏
* E# W# I) Y+ }8 a3 N1 Q# j15.5 小结
/ g' m. m: _$ Y4 O15.6 游戏大变身
' O+ |4 i' B9 R5 K第16章 创建子画面背景
6 M$ {* J0 R! h16.1 了解游戏背景的重要性
4 q* O: D" C; i6 M2 b16.2 了解游戏背景的类型
5 f7 B3 G5 ^. A" }/ A. q# G" u 16.2.1 纯色背景 2 W$ f) J: G! c, d
16.2.2 图像背景 ) z# `8 r1 _8 W: o6 t
16.2.3 动画背景 / C# f7 ~8 H' v1 j) [
16.2.4 滚动背景 ( R; c+ |6 m5 H: S0 `* N
16.3 向游戏引擎添加背景支持 6 u: r1 b' _+ _% [8 Z: Z
16.3.1 创建基本的背景类
$ [$ C* y# ]: |0 k8 W+ U 16.3.2 创建动画背景类 ' C$ L; I) C b" E7 \: e
16.4 开发Roids示例
" k, W( B9 [: p( P" B/ k+ _, N& v 16.4.1 编写程序代码 9 ?7 \& ]. w$ ~( F# l( ? X
16.4.2 测试完成的游戏 5 Q0 a# \) U; V4 J
16.5 小结 . e# u4 Y6 G3 W! i! ~. i
16.6 亲身实践
4 `6 _1 H% r) |0 X$ M第17章 示例游戏:Meteor Defense
# w# @' q6 j( c& _17.1 游戏的玩法 1 ?* Z K/ e; A3 X, _
17.2 设计游戏
! m1 J" N% |; Y9 b3 [+ f9 {2 L9 z17.3 增强游戏引擎中的子画面 $ F/ y6 B1 G1 p* c8 b- r$ P2 O
17.4 开发游戏 4 B0 U5 [7 x1 q$ _( D# x
17.5 测试游戏 1 u+ S: \7 L( N$ G' P, n
17.6 小结 * c4 t. N5 O" B; r$ l# }
17.7 游戏大变身 6 s: c6 S7 r' k: C. c$ `0 \
第6部分 让游戏拥有大脑 / d" G1 J% a$ i0 F
第18章 教游戏思考
: t6 U1 z& e& \) `18.1 理解人工智能
! o$ c" J, ]$ O; J& N18.2 了解游戏AI的类型 6 l0 n0 p# S7 D1 h+ f5 ]8 w
18.2.1 漫游AI
+ @, S. G2 U3 V. c! H 18.2.2 行为AI / X( ?5 N/ u& M- V* E
18.2.3 策略AI
% R2 _1 [. E: |1 [. x18.3 开发AI策略 ( _0 n0 k+ |( ?& ]( G* R
18.4 开发Roids 2示例程序 - m6 \) @' S8 c% R$ ~
18.4.1 编写程序代码 2 j2 a+ g5 ?1 g7 J# e
18.4.2 测试完成的程序 0 ]& K2 m4 j4 w8 @
18.5 小结
7 d( A5 K- ^: H3 Q( V6 Q& C18.6 亲身实践
1 { `0 A) N8 R1 I- X% |1 g. q k第19章 示例游戏:Space Out
, q5 H% W' N1 O, ? Y7 I19.1 游戏的玩法
8 _9 }- w0 m8 K$ i7 V2 X h& a# W19.2 设计游戏 7 m1 Y0 H3 ? B2 d' l7 `
19.3 向游戏引擎中添加另一个子画面特性
' A c) D5 R7 p4 T19.4 开发游戏
3 V# r* x& ^9 L* N M H19.5 测试游戏
' f8 K+ `7 G& i$ @* a2 m19.6 小结
$ d3 v1 u" k& ]; L. ^6 Z2 J第7部分 增添游戏的趣味性
. Y& Y- H/ [/ Z/ x/ X J第20章 使用闪屏增添游戏的活力
* n K: R. w; V3 {3 i: N7 L20.1 闪屏的重要性 . Z/ e& N4 k. e; _* I
20.2 了解闪屏 6 i* x% g4 v8 \6 P$ S/ }1 P( j" N
20.3 创建Space Out 2游戏 # j2 [& O! r5 M! @/ S$ s9 A
20.3.1 编写游戏代码 3 E6 k1 k% k& s; ~) g, N
20.3.2 测试完成的游戏
2 j. `9 Z9 Z. F20.4 小结
7 l- N4 k$ ?* T3 S2 F L20.5 亲身实践
3 I0 \* i4 y- {6 Y. ]第21章 使用演示模式展示游戏
|9 H5 g" C" c4 @( X; {" B21.1 什么是演示模式 . R% E& L! ], d! x) Q: [: v9 }
21.2 演示模式的细节
5 N5 q4 Z. c0 N7 t* i21.3 开发Space Out 3游戏 ) c6 u% t4 R, |
21.3.1 编写游戏代码
' }# R* O1 I! {3 \1 [2 U2 _; X 21.3.2 测试完成的游戏
( D' u/ V' M" [! y/ w21.4 小结
! x* E+ R5 h& n21.5 游戏大变身
" ?; e4 o1 r) i/ h7 i% T# A& D第22章 记录高分
2 g- G$ r i0 f* ?( {) O& v22.1 记录得分的重要性
0 Z! u+ M# q% K3 s, H3 h4 x2 Q22.2 确定高分数据模型 ( ?+ \; i' d. B
22.3 存储和检索高分数据 , x" T' D" O! U% G0 \) [
22.4 开发Space Out 4游戏 ( J6 P- }: B+ y) S
22.4.1 编写游戏代码
! K0 p( E; v/ b* t 22.4.2 测试完成的游戏
7 |: s& d: X8 z! i2 L22.5 小结
( ^2 r8 T5 Y+ Y8 t8 c d5 Z% w: s22.6 亲身实践 2 n# y/ u* B+ |) i% _+ X- O
第8部分 附加练习 . P3 \( h2 H: I# `* y2 \& J
第23章 使用滚动背景更改远景
4 f( G, U9 ~( d$ j6 |8 u23.1 什么是滚动背景
* z1 S+ g7 \7 c- T5 d 23.1.1 横向滚动的背景
7 J- }! X4 q; h) l- v 23.1.2 纵向滚动的背景
) O+ H/ y* S& X. o- y 23.1.3 视差滚动背景
) Y* C* n" r' s! l. I23.2 理解滚动背景的工作原理
* ]$ _- e$ T$ }4 r9 W23.3 向游戏引擎添加滚动背景支持 / j7 U, I, i5 V/ c8 x0 b$ {
23.3.1 创建背景图层类 - ^$ K2 c0 g: r6 Y! S7 Q
23.3.2 创建滚动背景类 ) W% `8 c+ A; N3 H, D6 a
23.4 开发Wanderer示例
) ]: K' [/ `7 e# Y) ` 23.4.1 编写程序代码 , B0 O, k& \/ u, Y3 Z1 t! ?
23.4.2 测试完成的程序
5 a* g3 c9 L6 v R0 t23.5 小结 4 E' q9 X& R K4 K
23.6 游戏人变身
5 i, ], j/ q+ ?. ~7 j: I8 }第24章 示例游戏:Stunt Jumper ) O. z6 X/ r# H% }- J, k& a
24.1 游戏的玩法
, {$ g( f7 X8 q24.2 设计游戏 " ~* c! O4 O6 ?4 V: Y' T& R. e3 N
24.3 开发游戏
4 R, \: S8 T1 E. {8 T6 i! Q24.4 测试游戏
! _% C6 w F3 e( \+ I3 [! f* n( |24.5 小结
/ P- @+ F( p) ^- L: x24.6 游戏大变身
: T b, ~! l, I24.7 亲身实践 0 X/ N" l5 T3 S( o: S- g- k6 q' r
" g+ P$ ~# v9 P( ^5 u1 `【下载地址】
7 c( N& s" c' F; m
. H( l' I' {8 Z" L$ f! h. Z( [
, y( j5 A5 U5 o+ I( o9 I1 u, e |
|