- 博客(1)
- 资源 (16)
- 收藏
- 关注
原创 两个VB6判断闰年的函数
Function IsLeapYearA(ByVal yr As Integer) As Boolean If ((yr Mod 4) = 0) Then IsLeapYearA = ((yr Mod 100) > 0) Or ((yr Mod 400) = 0) End IfEnd FunctionPublic Function IsLeapYearB(ByVal yr A
2008-03-05 12:47:00 1219
ESRI_shapefile文件格式说明
ESRI的shapefile文件格式说明,英文原版,可编辑的pdf格式,十分清晰;
英文名称:ESRI Shapefile Technical
Description;
目录:
Contents Page
Why Shapefiles? 1
Shapefile Technical Description 2
Organization of the Main File 2
Main File Record Contents 5
Organization of the Index File 23
Organization of the dBASE File 25
Glossary 26
2009-03-09
linux 游戏 编程
Contents
Foreword i
Preface iii
Who This Book Is For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv
Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
1 The Anatomy of a Game 1
A Quick Survey of Game Genres . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Simulation Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
First-Person Shooters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Real-time Strategy Games . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Turn-Based Strategy Games . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Role-Playing Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Puzzle Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Multiuser Dungeons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
A Quick Look Under the Hood . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
The Input Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
The Display Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 CONTENTS
The Audio Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
The Network Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
The Update Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
The Game Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Linux Development Tools 17
Programming Editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
NEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Compiling Programs Under Linux . . . . . . . . . . . . . . . . . . . . . . . . . 20
Using the Make Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Creating Make les . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Working with Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Static Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Shared Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Linux Linker Quirks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Debugging Linux Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Compiling for Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
ddd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Bug Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Project Management with CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
A Brief Tutorial on CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Other Useful Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Rapid Text Searching with grep . . . . . . . . . . . . . . . . . . . . . . . . 49
CONTENTS 3
Updating Source with di and patch . . . . . . . . . . . . . . . . . . . . . 50
3 Linux Gaming APIs 53
Graphics APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
SVGALib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
GGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
ClanLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Plib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Glide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Xlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Graphical User Interface Toolkits . . . . . . . . . . . . . . . . . . . . . . . . . . 59
GTK+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Fltk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
SDL GUI Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Audio APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
OSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
ALSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
ESD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
OpenAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Scripting Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Guile and MzScheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Python and Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4 CONTENTS
Networking APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
BSD Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
OpenPlay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
IPX and SPX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
File Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
libpng and libjpeg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
libaudio le and libsnd le . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Ogg Vorbis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
The SDL MPEG Library, SMPEG . . . . . . . . . . . . . . . . . . . . . . 68
zlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4 Mastering SDL 69
Computer Graphics Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
The Framebu er . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
The SDL Video API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Setting Up the Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Direct Surface Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Drawing with Blits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Colorkeys and Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Loading Other Image Formats . . . . . . . . . . . . . . . . . . . . . . . . . 92
Alpha Blending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Achieving Smooth Animation with SDL . . . . . . . . . . . . . . . . . . . 97
Input and Event Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Processing Mouse Events . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Processing Keyboard Events . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Processing Joystick Events . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Multithreading with SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
CONTENTS 5
SDL Audio Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Representing Sound with PCM . . . . . . . . . . . . . . . . . . . . . . . . 125
Feeding a Sound Card . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
An Example of SDL Audio Playback . . . . . . . . . . . . . . . . . . . . . 129
Integrating OpenGL with SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Penguin Warrior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Creating Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Implementing a Parallaxing Scroller in SDL . . . . . . . . . . . . . . . . . 147
A Simple Particle System . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Game Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
5 Linux Audio Programming 161
Competing APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Introducing Multi-Play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Loading Sound Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Using libsnd le . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Other Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Using OSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Reality Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Achieving Higher Performance with Direct DMA Bu er Access . . . . . . 178
Playing Sound with ALSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Sharing the Sound Card with ESD . . . . . . . . . . . . . . . . . . . . . . . . . 195
Building Multi-Play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Environmental Audio with OpenAL . . . . . . . . . . . . . . . . . . . . . . . . 206
OpenAL Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Adding Environmental Audio to Penguin Warrior . . . . . . . . . . . . . . 213
Implementing Game Music with Ogg Vorbis . . . . . . . . . . . . . . . . . . . . 222
6 CONTENTS
Working with Vorbis Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Adding Music to Penguin Warrior . . . . . . . . . . . . . . . . . . . . . . 227
6 Game Scripting Under Linux 237
A Crash Course in Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Built-in Tcl Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Interfacing Tcl with C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Linking Against Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Executing Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Understanding Commands and Objects . . . . . . . . . . . . . . . . . . . 250
A Simple Scripting Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Designing a Game Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Applying Scripting to the Real World . . . . . . . . . . . . . . . . . . . . . . . 265
Single Versus Multiple Contexts . . . . . . . . . . . . . . . . . . . . . . . . 266
Can We Trust the Script? . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Script Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Who's Writing the Script? . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
7 Networked Gaming with Linux 271
'Tis a Big Net, Quoth the Raven . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Internet Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Addresses and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Name Resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Socket Programming 101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Connecting TCP Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Receiving TCP Connections . . . . . . . . . . . . . . . . . . . . . . . . . . 285
CONTENTS 7
Working with UDP Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Multiplayer Penguin Warrior . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Network Gaming Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Penguin Warrior's Networking System . . . . . . . . . . . . . . . . . . . . 302
Network Game Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Security Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
8 Gaming with the Linux Console 315
Pros and Cons of the Linux Framebu er . . . . . . . . . . . . . . . . . . . . . . 316
Setting Up a Framebu er Device . . . . . . . . . . . . . . . . . . . . . . . . . . 318
A First Foray into Framebu er Programming . . . . . . . . . . . . . . . . . . . 318
Setting Framebu er Video Modes . . . . . . . . . . . . . . . . . . . . . . . . . . 326
How Video Scanning Works . . . . . . . . . . . . . . . . . . . . . . . . . . 327
The Mode Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Use the Source, Luke! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Console Input Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Keyboard Input from a Terminal . . . . . . . . . . . . . . . . . . . . . . . 338
Mouse Input with GPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
9 Finishing Penguin Warrior 355
Adding Weapons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Drawing Phasers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Detecting Phaser Hits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Imposing a Sane Rate of Fire . . . . . . . . . . . . . . . . . . . . . . . . . 364
Creating Status Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
In Retrospect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
8 CONTENTS
10 To Every Man a Linux Distribution 379
Source or Binary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Local Con guration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Linux Isn't Alone: Supporting FreeBSD . . . . . . . . . . . . . . . . . . . . . . 383
Packaging Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Graphical Installation Goodness: Loki's Setup Program . . . . . . . . . . . . . 387
Understanding the Linux Filesystem Standard . . . . . . . . . . . . . . . . . . 393
Glossary of Terms 399
Bibliography 405
Index 407
2008-12-15
linux 游戏 编程
Contents
Foreword i
Preface iii
Who This Book Is For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv
Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
1 The Anatomy of a Game 1
A Quick Survey of Game Genres . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Simulation Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
First-Person Shooters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Real-time Strategy Games . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Turn-Based Strategy Games . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Role-Playing Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Puzzle Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Multiuser Dungeons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
A Quick Look Under the Hood . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
The Input Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
The Display Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 CONTENTS
The Audio Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
The Network Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
The Update Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
The Game Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Linux Development Tools 17
Programming Editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
NEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Compiling Programs Under Linux . . . . . . . . . . . . . . . . . . . . . . . . . 20
Using the Make Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Creating Makeles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Working with Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Static Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Shared Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Linux Linker Quirks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Debugging Linux Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Compiling for Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
ddd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Bug Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Project Management with CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
A Brief Tutorial on CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Other Useful Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Rapid Text Searching with grep . . . . . . . . . . . . . . . . . . . . . . . . 49
CONTENTS 3
Updating Source with di and patch . . . . . . . . . . . . . . . . . . . . . 50
3 Linux Gaming APIs 53
Graphics APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
SVGALib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
GGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
ClanLib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Plib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Glide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Xlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Graphical User Interface Toolkits . . . . . . . . . . . . . . . . . . . . . . . . . . 59
GTK+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Fltk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
SDL GUI Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Audio APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
OSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
ALSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
ESD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
OpenAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Scripting Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Guile and MzScheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Python and Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4 CONTENTS
Networking APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
BSD Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
OpenPlay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
IPX and SPX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
File Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
libpng and libjpeg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
libaudiole and libsndle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Ogg Vorbis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
The SDL MPEG Library, SMPEG . . . . . . . . . . . . . . . . . . . . . . 68
zlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4 Mastering SDL 69
Computer Graphics Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
The Framebuer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
The SDL Video API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Setting Up the Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Direct Surface Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Drawing with Blits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Colorkeys and Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Loading Other Image Formats . . . . . . . . . . . . . . . . . . . . . . . . . 92
Alpha Blending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Achieving Smooth Animation with SDL . . . . . . . . . . . . . . . . . . . 97
Input and Event Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Processing Mouse Events . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Processing Keyboard Events . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Processing Joystick Events . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Multithreading with SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
CONTENTS 5
SDL Audio Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Representing Sound with PCM . . . . . . . . . . . . . . . . . . . . . . . . 125
Feeding a Sound Card . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
An Example of SDL Audio Playback . . . . . . . . . . . . . . . . . . . . . 129
Integrating OpenGL with SDL . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Penguin Warrior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Creating Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Implementing a Parallaxing Scroller in SDL . . . . . . . . . . . . . . . . . 147
A Simple Particle System . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Game Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
5 Linux Audio Programming 161
Competing APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Introducing Multi-Play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Loading Sound Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Using libsndle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Other Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Using OSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Reality Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Achieving Higher Performance with Direct DMA Buer Access . . . . . . 178
Playing Sound with ALSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Sharing the Sound Card with ESD . . . . . . . . . . . . . . . . . . . . . . . . . 195
Building Multi-Play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Environmental Audio with OpenAL . . . . . . . . . . . . . . . . . . . . . . . . 206
OpenAL Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Adding Environmental Audio to Penguin Warrior . . . . . . . . . . . . . . 213
Implementing Game Music with Ogg Vorbis . . . . . . . . . . . . . . . . . . . . 222
6 CONTENTS
Working with Vorbis Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Adding Music to Penguin Warrior . . . . . . . . . . . . . . . . . . . . . . 227
6 Game Scripting Under Linux 237
A Crash Course in Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Built-in Tcl Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Interfacing Tcl with C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Linking Against Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Executing Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Understanding Commands and Objects . . . . . . . . . . . . . . . . . . . 250
A Simple Scripting Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Designing a Game Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Applying Scripting to the Real World . . . . . . . . . . . . . . . . . . . . . . . 265
Single Versus Multiple Contexts . . . . . . . . . . . . . . . . . . . . . . . . 266
Can We Trust the Script? . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Script Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Who's Writing the Script? . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
7 Networked Gaming with Linux 271
'Tis a Big Net, Quoth the Raven . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Internet Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Addresses and Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Name Resolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Socket Programming 101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Connecting TCP Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Receiving TCP Connections . . . . . . . . . . . . . . . . . . . . . . . . . . 285
CONTENTS 7
Working with UDP Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Multiplayer Penguin Warrior . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Network Gaming Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Penguin Warrior's Networking System . . . . . . . . . . . . . . . . . . . . 302
Network Game Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Security Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
8 Gaming with the Linux Console 315
Pros and Cons of the Linux Framebuer . . . . . . . . . . . . . . . . . . . . . . 316
Setting Up a Framebuer Device . . . . . . . . . . . . . . . . . . . . . . . . . . 318
A First Foray into Framebuer Programming . . . . . . . . . . . . . . . . . . . 318
Setting Framebuer Video Modes . . . . . . . . . . . . . . . . . . . . . . . . . . 326
How Video Scanning Works . . . . . . . . . . . . . . . . . . . . . . . . . . 327
The Mode Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Use the Source, Luke! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Console Input Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Keyboard Input from a Terminal . . . . . . . . . . . . . . . . . . . . . . . 338
Mouse Input with GPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
9 Finishing Penguin Warrior 355
Adding Weapons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Drawing Phasers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Detecting Phaser Hits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Imposing a Sane Rate of Fire . . . . . . . . . . . . . . . . . . . . . . . . . 364
Creating Status Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
In Retrospect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
8 CONTENTS
10 To Every Man a Linux Distribution 379
Source or Binary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Local Conguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Linux Isn't Alone: Supporting FreeBSD . . . . . . . . . . . . . . . . . . . . . . 383
Packaging Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Graphical Installation Goodness: Loki's Setup Program . . . . . . . . . . . . . 387
Understanding the Linux Filesystem Standard . . . . . . . . . . . . . . . . . . 393
Glossary of Terms 399
Bibliography 405
Index 407
2008-12-11
Dot Net Remoting - [MS Press] - Microsoft .NET Remoting - (2003) - (Code samples in C-Sharp) .chm
Dot Net Remoting - [MS Press] - Microsoft .NET Remoting - (2003) - (Code samples in C-Sharp) .chm
2008-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人