13
Beginning Game Development with Python and Pygame From Novice to Professional ■■■ Will McGugan

Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

  • Upload
    vuquynh

  • View
    295

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

Beginning Game Development with Python and PygameFrom Novice to Professional

■ ■ ■

Will McGugan

8725.book Page i Wednesday, September 26, 2007 8:08 PM

Page 2: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

Beginning Game Development with Python and Pygame: From Novice to Professional

Copyright © 2007 by Will McGugan

All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher.

ISBN-13 (pbk): 978-1-59059-872-6

ISBN-10 (pbk): 1-59059-872-5

Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1

Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.

Lead Editor: Jason GilmoreTechnical Reviewer: Richard JonesEditorial Board: Steve Anglin, Ewan Buckingham, Tony Campbell, Gary Cornell, Jonathan Gennick,

Jason Gilmore, Kevin Goff, Jonathan Hassell, Matthew Moodie, Joseph Ottinger, Jeffrey Pepper, Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom Welsh

Project Manager: Kylie JohnstonCopy Editor: Liz WelchAssistant Production Director: Kari Brooks-CoponyProduction Editor: Kelly WinquistCompositor: Pat ChristensonProofreader: Erin PoeIndexer: Becky HornyakCover Designer: Kurt KramesManufacturing Director: Tom Debolski

Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or visit http://www.springeronline.com.

For information on translations, please contact Apress directly at 2855 Telegraph Avenue, Suite 600, Berkeley, CA 94705. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com.

The information in this book is distributed on an “as is” basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work.

The source code for this book is available to readers at http://www.apress.com in the Source Code/Download section.

8725.book Page ii Wednesday, September 26, 2007 8:08 PM

Page 3: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

For Maria

8725.book Page iii Wednesday, September 26, 2007 8:08 PM

Page 4: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

8725.book Page iv Wednesday, September 26, 2007 8:08 PM

Page 5: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

v

Contents at a Glance

About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv

About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvii

Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi

■CHAPTER 1 Introducing Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

■CHAPTER 2 Exploring Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

■CHAPTER 3 Introducing Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

■CHAPTER 4 Creating Visuals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

■CHAPTER 5 Making Things Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

■CHAPTER 6 Accepting User Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

■CHAPTER 7 Take Me to Your Leader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

■CHAPTER 8 Moving into the Third Dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

■CHAPTER 9 Exploring the Third Dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

■CHAPTER 10 Making Things Go Boom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

■CHAPTER 11 Lights, Camera, Action! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

■CHAPTER 12 Setting the Scene with OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

■APPENDIX A Game Object Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

■APPENDIX B Packaging Your Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

8725.book Page v Wednesday, September 26, 2007 8:08 PM

Page 6: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

8725.book Page vi Wednesday, September 26, 2007 8:08 PM

Page 7: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

vii

Contents

About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv

About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii

Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi

■CHAPTER 1 Introducing Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Your First Look at Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Lists and Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Python in Practice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

■CHAPTER 2 Exploring Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Creating Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Working with Logic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Understanding Booleans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Understanding Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Defining Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Introducing Object-Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . 26

Using Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Python in Practice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Using the Standard Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Introducing import. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Useful Modules for Games. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

■CHAPTER 3 Introducing Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

History of Pygame. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Installing Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Using Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

8725.book Page vii Wednesday, September 26, 2007 8:08 PM

Page 8: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

viii ■C O N T E N T S

Hello World Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Understanding Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

Retrieving Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

Handling Mouse Motion Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Handling Mouse Button Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Handling Keyboard Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Filtering Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Posting Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Opening a Display. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Full-Screen Displays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Resizable Pygame Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

Windows with No Borders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

Additional Display Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

Using the Font Module. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

When Pygame Goes Wrong. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Pygame in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

■CHAPTER 4 Creating Visuals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Using Pixel Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Working with Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Representing Color in Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Scaling Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Blending Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Using Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

Storing Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Working with Surface Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Drawing with Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

pygame.draw.rect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

pygame.draw.polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

pygame.draw.circle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

pygame.draw.ellipse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

pygame.draw.arc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

pygame.draw.line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

pgame.draw.lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

pygame.draw.aaline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

pygame.draw.aalines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

8725.book Page viii Wednesday, September 26, 2007 8:08 PM

Page 9: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

■C O N T E N T S ix

■CHAPTER 5 Making Things Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Understanding Frame Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Moving in a Straight Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

It’s About Time. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Diagonal Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Exploring Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Creating Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

Storing Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

Vector Magnitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

Unit Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

Vector Addition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

Vector Subtraction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Vector Negation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

Vector Multiplication and Division . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Game Objects Vector Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

Using Vectors to Create Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Diagonal Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

■CHAPTER 6 Accepting User Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Controlling the Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Understanding Keyboard Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Detecting Key Presses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Directional Movement with Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

Rotational Movement with Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

Implementing Mouse Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Rotational Movement with the Mouse . . . . . . . . . . . . . . . . . . . . . . . . 121

Mouse Gameplay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Implementing Joystick Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Joystick Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

Joystick Direction Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

Joystick Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Seeing Joysticks in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

■CHAPTER 7 Take Me to Your Leader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Creating Artificial Intelligence for Games . . . . . . . . . . . . . . . . . . . . . . . . . . 139

What Is Intelligence? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

8725.book Page ix Wednesday, September 26, 2007 8:08 PM

Page 10: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

x ■C O N T E N T S

Exploring AI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Implementing State Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Game Entities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Building Worlds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

Ant Entity Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Building the Brains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

■CHAPTER 8 Moving into the Third Dimension . . . . . . . . . . . . . . . . . . . . . . . . . 165

Creating the Illusion of Depth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Understanding 3D Space. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

Using 3D Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

Time-Based Movement in 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

Projecting 3D Points. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

Parallel Projections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

Perspective Projections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

A 3D World. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

■CHAPTER 9 Exploring the Third Dimension. . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

What Is a Matrix? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

Using the Matrix Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Introducing OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

Installing PyOpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

Initializing OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

OpenGL Primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

Seeing OpenGL in Action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

■CHAPTER 10 Making Things Go Boom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

What Is Sound? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

Storing Sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

Sound Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

Creating Sound Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

Stock Sound Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

8725.book Page x Wednesday, September 26, 2007 8:08 PM

Page 11: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

■C O N T E N T S xi

Playing Sounds with Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

Sound Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

Sound Channels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

Mixer Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Hearing the Mixer in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Playing Music with Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

Obtaining Music. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

Playing Music. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

Hearing Music in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

■CHAPTER 11 Lights, Camera, Action! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Working with Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Uploading Textures with OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Texture Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

Rendering Textures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

Deleting Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

Seeing Textures in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

Mip Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

Texture Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Working with Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

Storing Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

OBJ Format for 3D Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Seeing Models in Action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

■CHAPTER 12 Setting the Scene with OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

Understanding Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

Enabling Lighting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Setting Light Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

Working with Materials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Tweaking Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Managing Lights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Understanding Blending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Using Blending. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

Seeing Blending in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

Blending Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

8725.book Page xi Wednesday, September 26, 2007 8:08 PM

Page 12: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

xii ■C O N T E N T S

Understanding Fog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

Fog Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

Seeing Fog in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

Rendering the Backdrop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Skyboxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

Where to Go for Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

■APPENDIX A Game Object Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

Importing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

Contributing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

gameobjects.color.Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

Constructor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

Class Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

gameobjects.matrix44.Matrix44 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

Constructor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

Class Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

gameobjects.vector2.Vector2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Constructor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Class Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

gameobjects.vector3.Vector3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

Constructor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

Class Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

8725.book Page xii Wednesday, September 26, 2007 8:08 PM

Page 13: Beginning Game Development with Python and Pygame · Beginning Game Development with Python and Pygame From Novice to Professional Will McGugan 8725.book Page i Wednesday, September

■C O N T E N T S xiii

■APPENDIX B Packaging Your Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Creating Windows Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Using py2exe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

Building the Installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

Creating Packages for Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

Creating Packages for the Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

8725.book Page xiii Wednesday, September 26, 2007 8:08 PM