cyan yelloW MaGenTa Black panTone 123 c Books for professionals By professionals® The eXperT’s Voice® in open source Companion eBook Available Beginning Game Development with Python and Pygame: From Novice to Professional Beginning Dear Reader, G Beginning Creating computer games is a fascinating combination of an art and a science, and can make a rewarding career or hobby. Do you know you can write cutting-edge a games that run on Windows, Linux, and Mac OS X with open source technologies m and freely available tools? Game In this book, I introduce you to Python—a powerful, dynamic language— e and explain how to use the Pygame library to quickly develop compelling games. I also explain how to create three-dimensional graphics using OpenGL, D the technology behind many commercial games, such as the Quake series. e My aim for Beginning Game Development with Python and Pygame is v e to make game development accessible to as wide an audience as possible. l o Previous programming experience is useful but not essential, because the p Development first two chapters introduce the Python programming language—or serve as a wm refresher course if you are already familiar with Python. Further chapters cover ie tn how to use Pygame to set up a graphical display, draw to the screen, handle ht events, and read input devices. I also talk you through essential topics such as P creating game characters with artificial intelligence and playing sound (includ- y ing music). Four chapters are devoted to the topic of three-dimensional graphics in t games, and show you how to manipulate objects in a virtual world and render h Python Pygame impressive visuals with lighting and special effects. The math involved in pro- o with and gramming a game with three-dimensional graphics can be intimidating, but I explain it in visual terms rather than the more traditional pure mathematical n approach you find in textbooks. I also share with you a few of the tips and tricks I have picked up over the years in my career as a professional game developer. a n I hope to be playing one of your Pygame creations in the future! d From Novice to Professional Will McGugan P y Companion eBook g THE APRESS ROADMAP Create stunning video games using Foundations of Python a Network Programming popular open source technologies! m Beginning Python: Beginning Game Development From Novice to Professional with Python and Pygame See last page for details on $10 eBook version e The Definitive Guide to Django: Web Development Done Right M Will McGugan SOURCE CODE ONLINE ISBN-13: 978-1-59059-872-6 cG www.apress.com ISBN-10: 1-59059-872-5 u 53999 g a n US $39.99 Shelve in Python User level: 9 781590 598726 Beginner–Intermediate this print for content only—size & color not accurate spine = 0.802" 344 page count 8725.book Page i Wednesday, September 26, 2007 8:08 PM Beginning Game Development with Python and Pygame From Novice to Professional ■ ■ ■ Will McGugan 8725.book Page ii Wednesday, September 26, 2007 8:08 PM 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 Gilmore Technical Reviewer: Richard Jones Editorial Board: Steve Anglin, Ewan Buckingham, Tony Campbell, Gary Cornell, Jonathan Gennick, JasonGilmore, Kevin Goff, Jonathan Hassell, Matthew Moodie, Joseph Ottinger, Jeffrey Pepper, BenRenow-Clarke, Dominic Shakeshaft, MattWade, Tom Welsh Project Manager: Kylie Johnston Copy Editor: Liz Welch Assistant Production Director: Kari Brooks-Copony Production Editor: Kelly Winquist Compositor: Pat Christenson Proofreader: Erin Poe Indexer: Becky Hornyak Cover Designer: Kurt Krames Manufacturing 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 iii Wednesday, September 26, 2007 8:08 PM For Maria 8725.book Page iv Wednesday, September 26, 2007 8:08 PM 8725.book Page v Wednesday, September 26, 2007 8:08 PM 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 withOpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 ■ APPENDIX A Game Object Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 ■ APPENDIX B Packaging Your Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 ■ INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 v 8725.book Page vi Wednesday, September 26, 2007 8:08 PM 8725.book Page vii Wednesday, September 26, 2007 8:08 PM 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 vii 8725.book Page viii Wednesday, September 26, 2007 8:08 PM viii ■ CONTENTS 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
Description: