|
|
如果你会一点C、C++语言,你就可以学习游戏编程了,开发真正的游戏!如果你学过一点C++更好,没学过也没关系。本课程教你从零基础开始开发7个完整的游戏:Brainiac、Light Cycles、Henway、Battle Office、Meteor Defense、Space Out、Stunt Jumper。教程无KEY wmv版本,手机平板等移动设备均可观看!" T ?# B' ^2 w) B# z! s
【课程目录】
2 E, c9 |$ W& N4 W第1部分 入门 ; ]: T, ~( h \/ u, U
第1章 学习开发游戏的基础知识 * T! `$ Q/ T! v6 |/ h! I$ \5 @
1.1 认识视频游戏
- z! Z! U7 i" v: W 1.1.1 为什么人们如此沉迷于开发视频游戏
" [6 i; G$ S) H8 G 1.1.2 视频游戏的类型 9 k. Z1 \& {7 m6 |/ |
1.2 学习游戏设计的要素
! L; w# A. U: o1 \; n+ G0 { 1.2.1 提出基本思想 ( r% L/ b0 ?5 [8 S6 r
1.2.2 整理剧情
( Y$ H1 t0 K3 U1 Q% W# W 1.2.3 可视化图形 ' ^8 Q+ k3 c1 p. R7 ?* u, F
1.2.4 为游戏选择正确的声音
- L; p' Y8 o" b: `7 S 1.2.5 使用控制器控制游戏
0 c3 [5 ~& _1 l# ^3 z8 }7 _8 C9 S 1.2.6 确定游戏模式 6 o1 l5 @) k" |# @; T( Y
1.3 面向对象的编程和游戏
2 g# T; k4 l# c i- d 1.3.1 理解OOP 4 K. c$ z5 Q3 x/ X7 q8 K s; r8 d
1.3.2 在游戏中应用OOP
% V4 y1 w9 ?- r' J+ A, \1.4 研究相关工具 3 D0 W8 F2 d* q
1.4.1 编译器和开发环境 : ?' ^' K8 [) ?; i7 `
1.4.2 选择图形工具 $ F$ M n `; m
1.4.3 选择声音和音乐工具 * n, ~) ]& C& r1 j G1 \1 g
1.5 小结
; T5 B* i& w9 }. s- c1.6 亲身实践
/ L8 V( X- W1 i1 B8 R! h第2章 创建游戏引擎
. j$ u4 r2 Q% v j2.1 什么是游戏引擎
/ f9 [4 [0 z+ Y; S; Z& G4 o7 ?0 o& ]2.2 考虑游戏引擎的作用 0 o9 x3 k, K6 H7 Y0 n
2.2.1 将游戏分解为事件 7 r9 ?+ W' X2 E2 W( ]! }# l$ V
2.2.2 建立游戏的计时机制
9 i8 x9 y3 a, P2.3 开发游戏引擎
' W. Z' g4 T4 E' Q( }5 N 2.3.1 游戏事件函数 5 u( M/ }9 d8 ?
2.3.2 GameEngine类 2 u: h0 [: S' R1 U
2.4 开发Blizzard示例 2 r, S5 H" j4 N+ l. n( A! Z
2.4.1 编写程序代码
& h+ b* H! ~. A% ?/ d! E* }. j; Q 2.4.2 测试完成的程序
+ Q0 n5 Y1 J. y) e6 A& T. v, O2.5 小结 7 j" }+ _/ w6 a4 i" P
2.6 游戏大变身 4 l# O" Z# g' M7 G1 G5 o
第3章 学习绘制基本图形 + t% o U( c! e) e
3.1 图形基础 7 H/ @( A# U5 T1 q# E* s p
3.1.1 理解图形坐标系统
0 L0 _5 T9 I! o 3.1.2 学习颜色的基础知识
% B e- S( I e. @1 M: _3.2 查看Windows中的图形
5 d1 U) G( s+ e' M4 u# ?1 U; u 3.2.1 使用设备环境
) C2 o7 ]. a9 p- W 3.2.2 使用画笔写 $ r: a" Z0 d4 l
3.2.3 使用画刷绘制 ) L5 e q$ x8 M- r0 I% Q' L
3.2.4 使用位图绘制图像
% I7 O6 T" }! [9 ~4 Z 3.2.5 使用调色板管理颜色
4 P, s, X( c$ M0 V3.3 绘制窗口
( f- p+ F! q) e2 `; B) P 3.3.1 绘制文本 9 m: [9 o0 a5 x2 t7 _5 c
3.3.2 绘制图元
4 \ ]7 G: k- _1 ^* J4 i 3.3.3 使用画笔和画刷 $ V( \. t9 i. x" E& {7 t
3.4 开发Crop Circles示例
! E) c: d8 ?+ b' Y# c4 F- b 3.4.1 编写程序代码 3 D1 ?: J5 T3 w! [
3.4.2 测试完成的程序 , f' q3 K1 F" i6 v0 p
3.5 小结
$ U5 w1 {& |4 |3.6 亲身实践
2 l% l7 m L- T" _% {0 o. C- @第4章 绘制图形图像
_+ y4 A& F: w$ _7 O4.1 位图图像的基础知识
7 U$ \0 f- O0 A0 M6 G& Q0 |4 J* C4.2 深入学习位图 . ?, K" e0 v1 |- `3 J& y
4.3 开发位图类 & S% s F* J* `& W3 Y/ t7 E
4.3.1 位图类的工作原理 8 ~9 q& j0 M% S5 T4 x' o9 I
4.3.2 整合代码 6 Z* y) }( \9 ?) M3 N
4.4 开发Slideshow示例
9 C# R- x, ~1 G3 ~" ~ 4.4.1 编写程序代码 8 c1 G! C. q# B1 |4 M
4.4.2 汇集资源
9 f! v0 Q) e2 x* A* H 4.4.3 测试完成的程序 ) J, @$ ~! X( p8 |- D
4.5 小结
. [$ n; _5 A% {/ U$ C4.6 游戏大变身
! K# G3 \5 W: M9 d# b& R0 v第2部分 与游戏玩家交互
7 _% O2 X3 Y. g第5章 使用键盘和鼠标控制游戏
9 D- ~; p# v- Y" i3 M @: m9 j5.1 游戏与用户输入
! I" i2 ?( a0 C8 Q7 `5.2 了解用户输入设备 ( L, V0 q! C o6 H9 i2 j4 q' g
5.2.1 接受键盘输入 - i r. I7 ]) R9 ]
5.2.2 响应鼠标 + |# z3 H# F& P
5.2.3 使用游戏杆交互 ' C- j! V# r1 m
5.3 评估游戏的键盘输入 9 {) L i% k, Q: c6 g8 U- r
5.4 跟踪鼠标
0 P& D# o) U( ~) c5.5 向游戏引擎添加输入支持
+ ^* _* M9 ?7 i1 d8 P u- l 5.5.1 添加键盘支持
/ {+ A; `4 F/ W 5.5.2 添加鼠标支持 4 o8 G" \. H! P, h* I+ Y
5.5.3 修改Bitmap类 & L, w/ i4 r9 P* t0 Y% g8 ^4 y& C
5.6 开发UFO示例
$ ]6 I1 d1 F( ^9 l2 K 5.6.1 编写程序代码
; I) Z. c3 }0 f# R* `, H 5.6.2 测试完成的程序
( Y8 X# v) {/ M' @/ T; ~5.7 小结
9 ^- N" s5 _3 W" a' j& Q \5.8 亲身实践
6 H2 u% h; t, u3 g! g/ L第6章 示例游戏:Brainiac 7 O% F' C% v7 K+ g, q
6.1 游戏的玩法 , A; w- B4 w1 ~" i
6.2 设计游戏 + v0 J$ l5 D( o n
6.3 开发游戏
! i1 n5 N! b. p- m6.4 测试游戏
: _( E( A1 a. t; L& d6.5 小结
: m9 e" Q3 [- C/ W+ w8 ^9 u6.6 游戏大变身
+ m$ Z! C0 @2 Z/ |- ?第7章 使用游戏杆改进输入
( f1 j( h* a/ n7.1 了解游戏杆的基础知识
0 a% _( J$ z" X# b3 f0 z7.2 校准游戏杆 % U% q$ M% }8 ~8 R- B
7.3 追踪游戏杆的移动 7 E9 ` |1 y: G: A1 X2 E5 @& t5 l6 u
7.4 向游戏引擎添加游戏杆支持
]5 Z n7 _9 h- V v* y a+ U 7.4.1 访问Win32多媒体功能 ' i3 @8 @8 X' i2 v
7.4.2 开发游戏杆代码 ) E: q V6 h" f; d% p, `" {8 Y; v2 O: G
7.5 开发UFO 2示例 , v% i1 w6 S+ k: C7 j" }! N
7.5.1 编写程序代码 6 u9 }/ l9 \5 i% p
7.5.2 测试完成的程序
s8 n7 ?5 a1 E/ m7.6 小结
2 }* p8 _: A# k$ V5 x7.7 亲身实践 / I# o* I" c( t! y& ]3 ~( _) f R' t
第8章 示例游戏:Light Cycles
# \+ u4 r7 _: T; m8.1 游戏的玩法
, O# `0 n5 n* A; L5 z8.2 设计游戏 5 X3 C& ?' z1 _' Y* Y6 k
8.3 开发游戏 3 h6 e! N$ C; ]" ^ M" m( m3 A
8.4 测试游戏
, j, a8 X. W$ z& I* U; U8.5 小结 5 @# q; y0 k4 c
8.6 游戏大变身
. M4 u) M5 _( E; M" W& b第3部分 在游戏中使用子画面 5 z6 P6 R1 s" W( ~8 M+ r
第9章 使用于画面动画移动对象 b' a2 F2 x3 E$ t+ [6 s8 e
9.1 理解动画的基础知识 1 c( @9 L4 r- y$ s! G3 a2 W
9.1.1 动画和帧频 + N0 l ^( V' w7 s8 f9 |- v
9.1.2 了解计算机动画 ) J. p9 u, g" S6 z, m; e
9.2 2D动画与3D动画
8 s" g* p# q0 l9.3 理解2D动画的类型 6 F( S& ~4 @5 I2 R
9.3.1 基于帧的动画 + F; d% s& i" o Y# r* h
9.3.2 基于形状的动画
7 }- _$ e" Z8 c+ l1 b4 s3 L1 s* j9.4 将子画面动画应用于游戏
7 Z) I! V; `$ I L9 [2 ]" f9.5 设计通用的子画面
- P3 `! e5 x2 ~( [1 f0 O- y9.6 创建Sprite类 + {/ f* {4 e* k8 j F2 \- o, x
9.6.1 创建和破坏子画面 ' m- c1 U5 w% Y6 j' ^. P; O
9.6.2 更新子画面 . } d1 r. Y' `$ I! }& @
9.6.3 绘制子画面 7 M- t7 @, t5 \: j
9.7 开发Planets示例程序 % h8 @' e Y& [
9.7.1 编写程序代码
1 T& v- w W7 I6 J$ x( [ 9.7.2 测试完成的程序 0 M* T, C6 ^( {; o G8 @
9.8 小结 2 {8 f$ _& x1 ~, G% G
9.9 亲身实践 . L) W( Q6 d; c3 z! S& E& o o
第10章 管理子画面
+ @. }* g' M' ?3 z0 D10.1 了解管理子画面的需求
" s4 U, _: |3 p( h10.2 设计子画面管理器 ! ?/ i# l" }# Y1 H. L8 r/ S
10.3 向游戏引擎添加子画面管理器 5 @# j8 _" R V/ {
10.3.1 改进Sprite类 " \ S4 B- ^9 `# U5 k2 O
10.3.2 增强游戏引擎
6 L/ \' ^2 G% x, Q9 Y2 ^: N( ?, [10.4 使用双重缓存消除闪烁
5 o+ y; {) d8 @' O1 Q4 g10.5 开发Planets 2示例
# {1 I: K6 I% m+ q 10.5.1 编写程序代码
- Q3 x; R5 v. m! g! z6 V2 O/ Q 10.5.2 测试完成的程序 : C7 `# E7 i( }) P
10.6 小结
0 M* T) t& W1 `7 G10.7 游戏大变身
" A5 _- Y4 D& \/ {. g, m第11章 示例游戏:Henway
: ?' X+ v$ `3 s. o/ `6 t8 X' Y11.1 游戏的玩法 6 B; j2 ^$ v4 M* f& j8 d
11.2 设计游戏 ; a1 w5 s5 X3 N* F
11.3 开发游戏
. ?6 b7 U4 |% @; P, H8 J11.4 测试游戏
/ e v$ ~+ v z11.5 小结
! }, N) Z! v. k& C11.6 游戏大变身 4 D. h; D9 F8 R0 Y- u" t
第4部分 使用声音和音乐 - `0 q- U- ~* s% M
第12章 播放数字声音效果 9 Y! E! u6 G' f) ?, s, S
12.1 理解数字声音
( H p0 L* M* i12.2 了解Windows波形声音 ! q# o5 r' o$ G* x
12.3 了解声音工具
" i4 f+ S5 X+ q7 u3 U 12.3.1 Sony Sound Forge
3 l2 ~) K& O# p) Y9 ^ 12.3.2 Adobe Audition
6 j x) q8 ?) }9 `5 g5 j 12.3.3 廉价的声音编辑器
+ Q! k# d9 M$ g9 h. S7 l12.4 创建和编辑声音
$ G- b6 C1 W6 @5 o% z12.5 查找声音和音乐
. j- y# z& d/ k. @- ]* Y8 W4 ?12.6 访问波形声音
- J: u7 |7 H7 _( ? p \8 p6 ?12.7 播放波形声音 9 U( B2 ^! x+ r. n/ }
12.7.1 播放文件中的波形声音 5 Y$ K. U7 U$ m& e1 l( f
12.7.2 播放作为资源的波形声音
5 l6 }$ o! I, P6 K 12.7.3 循环播放波形声音 & S: `( t: P5 Y$ p
12.7.4 停止播放波形声音
/ s% G! }) p' |12.8 开发Brainiac 2示例程序
; y( m u5 t3 J; H3 \# p 12.8.1 编写程序代码 ) F$ k% T: Y% I* l
12.8.2 组合资源 5 d" y* R2 M7 v+ C
12.8.3 测试完成的游戏
& y0 k1 F% ~% w" r) s6 X8 G7 p12.9 小结 ) E( f% M2 d! T4 T x5 `
12.10 亲身实践 * A( P" `3 B; K8 y- s: E1 U
第13章 播放MIDI音乐
" r) D8 S) t/ ?) B+ [13.1 感受MIDI音乐 % k6 T/ \' ?: T' ~9 h+ \" \ \
13.2 理解Windows媒体控制接口
( v+ B; w% B6 T+ s& J2 c13.3 使用MCI播放MIDI音乐
; I- b) @0 v+ h" {! h9 @% l 13.3.1 打开MIDI设备
/ L9 }8 y. @+ f7 B( S- ]( t 13.3.2 播放MIDI歌曲
$ A) T: V3 U% w4 q8 v6 e% x; W 13.3.3 暂停MIDI歌曲 3 h4 L, ^: h, L) Y9 R/ Q* y
13.3.4 关闭MIDI设备
. ^8 ]8 ]4 f! V. k13.4 向游戏引擎添加MIDI音乐支持 1 z7 E& l1 z0 f1 y
13.5 开发Henway 2示例程序
: i2 I2 b" E& V- q) r; \ 13.5.1 编写程序代码 & Z; [, m* ]# w, r
13.5.2 测试完成的游戏
) L% y1 l% `0 J2 G2 S13.6 小结
$ t0 w/ k9 R6 r) K* Z; g13.7 亲身实践 ' z4 l/ _# W( G( G a y& m1 m9 Q+ `
第14章 示例游戏:Battle Office 5 K7 I7 P0 S5 {) H+ `5 l* H
14.1 游戏的玩法 ; a* o$ O2 ` D( C" u3 J3 c$ u$ S) ?
14.2 设计游戏 : L' U2 t: D3 [1 \# E9 y3 d, y
14.3 开发游戏 . M$ Y0 O+ O; `, n9 I
14.4 测试游戏 - ^- o4 B4 E' f7 \8 g
14.5 小结 0 Q( [7 s. N* Z( H) E
14.6 亲身实践
6 G- @1 \: e: X F' |第5部分 高级动画 ! R- p* ]* L' [1 O2 Q3 f6 M: G
第15章 实现子画面外观动画 & L2 K; p. @6 \+ J. M& ]: v8 `
15.1 再次介绍帧动画
2 ]/ {2 P8 _# E4 E3 S S* j15.2 设计动画子画面 . X6 X0 [! H0 l4 Q' } q* |) J
15.3 向游戏引擎添加动画子画面支持
$ {" t2 p8 P* l& W 15.3.1 只绘制位图的一部分
1 l8 [& i/ c, Y4 X% x+ B6 m 15.3.2 对Sprite类实现动画 ( S. c, ~- H2 d6 \4 _
15.4 开发Battle Office 2示例程序
3 E6 A8 y- e6 c, V/ ^ 15.4.1 编写程序代码 % J% ^) `) ^. M d$ I5 F
15.4.2 测试完成的游戏
0 e [7 ]; C9 ]+ E: N. f15.5 小结
, a6 R! }4 |- R5 |5 {. [15.6 游戏大变身
. \2 F6 H0 k" d* [( g9 D8 |# c第16章 创建子画面背景
$ I' p& t3 o! t3 |16.1 了解游戏背景的重要性 ! Q- N# N) }$ @$ \4 V* [( r# ^; x) Q
16.2 了解游戏背景的类型
9 V- U* }% S; v% f: n' R 16.2.1 纯色背景
; }# ^4 b/ q+ y: M0 l; s 16.2.2 图像背景
, x* F3 d/ ^; k( O) J; P# b" N8 V ^ 16.2.3 动画背景
/ x# F2 M% \( ]: d8 P0 @) m 16.2.4 滚动背景
3 b! x# Q7 ?3 t; ?6 i: Q16.3 向游戏引擎添加背景支持
- y6 U( i8 q2 ~0 C, v, N0 l- Y/ R 16.3.1 创建基本的背景类 9 Y* u; n7 p) a, k0 f9 B! f
16.3.2 创建动画背景类
( n9 I2 @' Y; H' Z7 h16.4 开发Roids示例 , G3 D1 T+ U; u
16.4.1 编写程序代码 ; z5 {; K& j6 s9 |. a
16.4.2 测试完成的游戏
3 P) }' j* r# ~1 [0 D( q( j) F16.5 小结
9 A- G$ `- f& U1 c4 \16.6 亲身实践
% x/ G- T1 o6 y4 i3 Y第17章 示例游戏:Meteor Defense
6 |* j+ n4 p+ T+ t8 Q9 k17.1 游戏的玩法
9 u7 k2 J# k& k17.2 设计游戏 2 D: O1 Y$ j9 H
17.3 增强游戏引擎中的子画面
/ b7 A7 s2 \8 ~" s5 ?17.4 开发游戏 , j3 b3 O9 a6 V9 S. W! `7 y, o: A
17.5 测试游戏 2 m$ ~- C) P- w" F% {2 f
17.6 小结 4 e: B, ]+ K+ Q/ N
17.7 游戏大变身 ( R+ y& I6 `- s- N" v
第6部分 让游戏拥有大脑 $ C1 Z- z6 Q$ r y
第18章 教游戏思考
2 R& p2 u9 B0 Z# m18.1 理解人工智能
# ?% Z8 u" w$ @' ^2 ?" A18.2 了解游戏AI的类型
, E, `* l M' @ s8 A 18.2.1 漫游AI 7 _) I9 I, L7 O: R5 q! m e% Y
18.2.2 行为AI 6 Q3 h7 |# T3 F. s3 b# J
18.2.3 策略AI 0 Q, @7 R3 v' o" E4 e w
18.3 开发AI策略 5 m$ ^5 L M) l5 R0 r* I
18.4 开发Roids 2示例程序
: d: ^# }; ^) }# C5 ~: W 18.4.1 编写程序代码
2 T# q9 \. g0 T. ] 18.4.2 测试完成的程序
( w8 D! v. \/ o6 J4 c' H18.5 小结 ! N* m% v5 K8 B* W+ O; N
18.6 亲身实践 ( L( B9 l; U4 B! v' k
第19章 示例游戏:Space Out
7 [% y r% a6 }* z% o19.1 游戏的玩法 7 P, W8 _: {+ W
19.2 设计游戏
" n' d: O z6 l3 c1 f19.3 向游戏引擎中添加另一个子画面特性 ! Y" l7 A5 m" b6 C$ h( E0 @
19.4 开发游戏
' z! e1 x6 I% |# P% u+ ?% ~& Q19.5 测试游戏 % C" V& m) [+ X* P
19.6 小结 \# R2 H4 A0 B, a& Q: ~
第7部分 增添游戏的趣味性 ' N8 q# c6 O2 X2 d0 ~( `
第20章 使用闪屏增添游戏的活力 0 F E: X& `0 \- |9 f9 ^
20.1 闪屏的重要性 - j+ s0 f6 w- u& [& d1 t0 a! N- w
20.2 了解闪屏 7 ?3 y' T) @+ A$ x' h; O9 K
20.3 创建Space Out 2游戏
6 a; p. L& H* Q$ l 20.3.1 编写游戏代码
4 }$ g3 s' }9 B/ C 20.3.2 测试完成的游戏
/ W2 f$ b3 P1 k2 S20.4 小结
/ U( B: J1 b e5 a" w' L: V20.5 亲身实践 8 s0 ~+ b0 D; U
第21章 使用演示模式展示游戏
7 U3 g7 A2 j, F: D# m/ n' G0 [21.1 什么是演示模式 $ X U! \; M4 y5 V
21.2 演示模式的细节 5 Q' P! R- {" r/ r; Z2 i% L" X
21.3 开发Space Out 3游戏 - g8 m# m$ }: J5 Y, q& q; J
21.3.1 编写游戏代码
# p" L4 C) U5 Y1 T6 c, A 21.3.2 测试完成的游戏
- d+ |. S( s- j- \21.4 小结
8 Q1 ^' b. }# x3 Z2 A21.5 游戏大变身 5 n) ]6 x4 t% f$ ^# F* K
第22章 记录高分
0 `' T6 n3 f* j( n: l! Q22.1 记录得分的重要性
- h% Z9 c% \+ j* x4 W/ F* n( m22.2 确定高分数据模型 0 K. f6 B1 o0 N6 @1 s9 u7 ^) t! m
22.3 存储和检索高分数据 2 A, _7 w, U. n2 h! s. i! N1 O: a1 c
22.4 开发Space Out 4游戏
, Z% E1 ^% [. F! z 22.4.1 编写游戏代码
& {4 ^( d% C% K1 ^9 o# O, U% X 22.4.2 测试完成的游戏 : p( h, K/ s9 A6 ]# \+ x6 g
22.5 小结 7 T# [9 S4 m3 S
22.6 亲身实践
$ w1 L1 ~1 B0 c5 q- U+ ~' Q) w- e第8部分 附加练习 & P( D: l7 H. E( R) Q
第23章 使用滚动背景更改远景
1 t) H; Q9 A% P1 ~/ i" |23.1 什么是滚动背景
7 h r# ]/ }9 A6 N& z 23.1.1 横向滚动的背景 " j1 n- ?3 ^3 }, `
23.1.2 纵向滚动的背景
! u' p5 x' S& h5 e% k, V* Z 23.1.3 视差滚动背景 # g3 O) w% ]/ |) c
23.2 理解滚动背景的工作原理
) m8 X& L- I5 M. B# i- `! d23.3 向游戏引擎添加滚动背景支持
- I5 j- }; v( H; h; r" s# G 23.3.1 创建背景图层类 ' M9 z: L$ C: t+ p1 H; U
23.3.2 创建滚动背景类 : o; e% b, e% R- R; N, p* L8 ]
23.4 开发Wanderer示例
0 o* ^1 A& S2 y3 \9 Z 23.4.1 编写程序代码
' L3 \& G8 k6 E: x+ g2 Q 23.4.2 测试完成的程序 & p5 g1 t$ i. m3 v( J( j
23.5 小结
) W% V6 o: L6 L; m23.6 游戏人变身 8 m4 |# d+ y: Z( T
第24章 示例游戏:Stunt Jumper : P( S- K; {& k- n
24.1 游戏的玩法
7 T2 r% C: c+ J" g3 {% [8 ~- I24.2 设计游戏
; y) M# d3 K( F( x* C24.3 开发游戏 x, M$ m- M N
24.4 测试游戏 2 Y; |/ N, Y2 s7 ?3 z
24.5 小结 " }. Y! r) q! j. j$ B) x& i3 S
24.6 游戏大变身 - j: `. B( e6 Z
24.7 亲身实践
) O- f7 L% @8 d3 E. P+ s6 a6 Q5 ^* J, ?& ^; {3 m0 Q
【下载地址】" i7 L% a8 W& e# F* b9 W1 s3 q; I
3 I6 _: I O5 ? E, d/ W+ I
" j! b T8 D# k3 M. x; ^ |
|