programming game ai by example - mat buckland

521 1.3K 0
programming game ai by example - mat buckland

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TLFeBOOK Programming Game AI by Example Mat Buckland Wordware Publishing, Inc. TLFeBOOK Library of Congress Cataloging-in-Publication Data Buckland, Mat. Programming game AI by example / by Mat Buckland. p. cm. Includes index. ISBN 1-55622-078-2 (pbk.) 1. Computer games—Design. 2. Computer games—Programming. 3. Computer graphics. I. Title. QA76.76.C672B85 2004 794.8'1526—dc22 2004015103 © 2005, Wordware Publishing, Inc. All Rights Reserved 2320 Los Rios Boulevard Plano, Texas 75074 No part of this book may be reproduced in any form or by any means without permission in writing from Wordware Publishing, Inc. Printed in the United States of America ISBN 1-55622-078-2 10987654321 0409 Black & White, the Black & White logo, Lionhead, and the Lionhead logo are registered trademarks of Lionhead Studios Limited. Screenshots used with the permission of Lionhead Studios Limited. All rights reserved. Impossible Creatures and Relic are trademarks and/or registered trademarks of Relic Entertainment, Inc. NEVERWINTER NIGHTS © 2002 Infogrames Entertainment, S.A. All Rights Reserved. Manufactured and marketed by Infogrames, Inc., New York, NY. Portions © 2002 BioWare Corp. BioWare and the BioWare Logo are trademarks of BioWare Corp. All Rights Reserved. Neverwinter Nights is a trademark owned by Wizards of the Coast, Inc., a subsidiary of Hasbro, Inc. and is used by Infogrames Entertainment, S.A. under license. All Rights Reserved. Unreal® Tournament 2003©2003 Epic Games, Inc. Unreal is a registeredtrademark of Epic Games, Inc. All rightsreserved. Other brand names and product names mentioned in this book are trademarks or service marks of their respective companies. Any omission or misuse (of any kind) of service marks or trademarks should not be regarded as intent to infringe on the property of others. The publisher recognizes and respects all marks used by companies, manufacturers, and developers as a means to distinguish their products. This book is soldas is, without warranty of anykind, either express or implied, respectingthe contents of this book andany disks or programs that may accompany it, including but not limited to implied warranties for the book’s quality, performance, merchantability, or fitness for any particular purpose. Neither Wordware Publishing, Inc. nor its dealers or distributors shall be liable to the purchaser or any other person or entity with respect to any liability, loss, or damage caused or alleged to have been caused directly or indirectly by this book. All inquiries for volume purchases of this book should be addressed to Wordware Publishing, Inc., at the above address. Telephone inquiries may be made by calling: (972) 423-0090 TLFeBOOK Dedication For Mum and Dad, who bought me my first computer, and therefore must share some responsibility for turning me into the geek that I am. J iii TLFeBOOK “Programming Game AI by Example stands out from the pack by providing indus- trial-strength solutions to difficult problems, like steering and goal-oriented behavior. Mat guides the reader toward building a foundation robust enough for real games. This book is a must-have for anyone new to the field, and has tips for the seasoned professional as well. I wish I [had] read it eight years ago!” Jeff Orkin AI architect, Monolith Productions, No One Lives Forever 2 and F.E.A.R. “…a nice combination of a lot of really useful information, put together in a way that doesn’t make my brain leak.” Gareth Lewis Project leader, Lionhead Studios, Black & White 2 “Each chapter of Mat’s book gently introduces the reader to a fundamental game AI technology before expanding the new idea into a fully formed solution replete with extensive code and clearly worded examples. The tone of the book is uncom- plicated and accessible to the reader, allowing a novice programmer the opportunity to get to grips with the basics of game AI programming by implement- ing their own systems direct from theory or expanding upon code examples offered to gain understanding in a sandbox environment. Once individual technologies are fully understood, the book goes on to combine these ideas into several complete game environments allowing the reader to understand the relationships between the interacting systems of an overarching game architecture.” Mike Ducker AI programmer, Lionhead Studios, Fable “Using easy-to-follow and well-described examples, this book shows you how to use most of the techniques professional AI programmers use. A great introduction for the beginner and an excellent reference for the more experienced!” Eric Martel AI programmer, Ubisoft, Far Cry (XBox) “Programming Game AI by Example is an excellent book for the game program- ming neophyte, the intermediate programmer, and even the expert — it doesn’t hurt to go over familiar ground, does it? The book concisely covers all of the important areas, including basic maths and physics through to graph theory and scripting with Lua, to arm any programmer with the tools needed to create some very sophisticated agent behaviours. Unusually for books of the type, Pro- gramming Game AI by Example is solid in its software engineering too, with the example code demonstrating game uses of familiar design patterns. I’d have no qualms about recommending Programming Game AI by Example to any program- mer. It’s an excellent read and an excellent springboard for ideas.” Chris Keegan Technical director, Climax Studios (Solent) TLFeBOOK Contents Foreword xiii Acknowledgments xvii Introduction xix Chapter 1 A Math and Physics Primer 1 Mathematics 1 Cartesian Coordinates 1 Functions and Equations 3 Exponents and Powers 5 Roots of Numbers (Radicals) 6 Simplifying Equations 7 Trigonometry 10 Rays and Line Segments 10 Angles 11 Triangles 12 Vectors 18 Adding and Subtracting Vectors 19 Multiplying Vectors 20 Calculating the Magnitude of a Vector 20 Normalizing Vectors 21 Resolving Vectors 22 The Dot Product 23 A Practical Example of Vector Mathematics 24 The Vector2D Struct 25 Local Space and World Space 26 Physics 28 Time 28 Distance 29 Mass 29 Position 30 Velocity 30 Acceleration 32 Force 38 Summing Up 40 Chapter 2 State-Driven Agent Design 43 What Exactly Is a Finite State Machine? 44 Implementing a Finite State Machine 45 State Transition Tables 47 Embedded Rules 48 The West World Project 50 v TLFeBOOK The BaseGameEntity Class 52 The Miner Class 53 The Miner States 54 The State Design Pattern Revisited 55 The EnterMineAndDigForNugget State 60 Making the State Base Class Reusable 62 Global States and State Blips 63 Creating a State Machine Class 64 Introducing Elsa 67 Adding Messaging Capabilities to Your FSM 69 The Telegram Structure 70 Miner Bob and Elsa Communicate 71 Message Dispatch and Management 71 The MessageDispatcher Class 73 Message Handling 75 Elsa Cooks Dinner 78 Step One 78 Step Two 79 Step Three 80 Step Four 80 Step Five 81 Summing Up 82 Chapter 3 How to Create Autonomously Moving Game Agents 85 What Is an Autonomous Agent? 85 The Vehicle Model 87 Updating the Vehicle Physics 89 The Steering Behaviors 91 Seek 91 Flee 92 Arrive 93 Pursuit 94 Evade 96 Wander 96 Obstacle Avoidance 99 Finding the Closest Intersection Point 100 Calculating the Steering Force 103 Wall Avoidance 104 Interpose 106 Hide 107 Path Following 110 Offset Pursuit 111 Group Behaviors 113 Separation 115 Alignment 116 Cohesion 117 Flocking 118 Combining Steering Behaviors 119 Weighted Truncated Sum 120 Weighted Truncated Running Sum with Prioritization 121 vi | Contents TLFeBOOK Prioritized Dithering 123 Ensuring Zero Overlap 124 Coping with Lots of Vehicles: Spatial Partitioning 126 Smoothing 130 Chapter 4 Sports Simulation — Simple Soccer 133 The Simple Soccer Environment and Rules 134 The Soccer Pitch 135 The Goals 138 The Soccer Ball 138 SoccerBall::FuturePosition 141 SoccerBall::TimeToCoverDistance 142 Designing the AI 144 The SoccerTeam Class 145 The Receiving Player 146 The Closest Player to the Ball 146 The Controlling Player 146 The Supporting Player 146 SoccerTeam States 152 Field Players 155 Field Player Motion 155 Field Player States 156 Goalkeepers 170 Goalkeeper Motion 170 Goalkeeper States 171 Key Methods Used by the AI 176 SoccerTeam::isPassSafeFromAllOpponents 177 SoccerTeam::CanShoot 182 SoccerTeam::FindPass 184 SoccerTeam::GetBestPassToReceiver 185 Making Estimates and Assumptions Work for You 189 Summing Up 189 Chapter 5 The Secret Life of Graphs 193 Graphs 193 A More Formal Description 195 Trees 196 Graph Density 196 Digraphs 196 Graphs in Game AI 197 Navigation Graphs 198 Dependency Graphs 199 State Graphs 201 Implementing a Graph Class 203 The GraphNode Class 204 The GraphEdge Class 205 The SparseGraph Class 207 Graph Search Algorithms 209 Uninformed Graph Searches 210 Depth First Search 210 Contents | vii TLFeBOOK Breadth First Search 224 Cost-Based Graph Searches 231 Edge Relaxation 231 Shortest Path Trees 233 Dijkstra’s Algorithm 233 Dijkstra with a Twist: A* 241 Summing Up 247 Chapter 6 To Script, or Not to Script, That Is the Question 249 Just What Is a Scripting Language? 249 What a Scripting Language Can Do for You 251 Dialogue Flow 253 Stage Direction 254 AI Logic 255 Scripting in Lua 255 Setting Up Your Compiler to Work with Lua 256 Getting Started 256 Lua Variables 258 Lua Types 260 Logical Operators 263 Conditional Structures 264 Rock-Paper-Scissors in Lua 265 Interfacing with C/C++ 268 Accessing Lua Global Variables from within Your C++ Program 269 Accessing a Lua Table from within Your C++ Program 271 Accessing a Lua Function from within C++ 273 Exposing a C/C++ Function to Lua 274 Exposing a C/C++ Class to Lua 276 Luabind to the Rescue! 276 Setting Up Luabind 276 Scopes 277 Exposing C/C++ Functions Using Luabind 278 Exposing C/C++ Classes Using Luabind 279 Creating Classes in Lua Using LuaBind 281 luabind::object 282 Creating a Scripted Finite State Machine 285 How It Works 285 The States 289 GoHome 290 Sleep 290 GoToMine 291 Useful URLS 292 It Doesn’t All Smell of Roses 292 Summing Up 293 Chapter 7 Raven: An Overview 295 The Game 295 Overview of the Game Architecture 296 The Raven_Game Class 297 The Raven Map 299 viii | Contents TLFeBOOK Raven Weapons 301 Projectiles 302 Triggers 303 TriggerRegion 304 Trigger 305 Respawning Triggers 307 Giver-Triggers 308 Limited Lifetime Triggers 309 Sound Notification Triggers 310 Managing Triggers: The TriggerSystem Class 311 AI Design Considerations 313 AI Implementation 315 Decision Making 315 Movement 315 Path Planning 315 Perception 316 Target Selection 321 Weapon Handling 323 Putting It All Together 327 Updating the AI Components 328 Summing Up 331 Chapter 8 Practical Path Planning 333 Navigation Graph Construction 333 Tile Based 333 Points of Visibility 334 Expanded Geometry 335 NavMesh 335 The Raven Navigation Graph 336 Coarsely Granulated Graphs 336 Finely Grained Graphs 339 Adding Items to the Raven Navigation Graph 341 Using Spatial Partitioning to Speed Up Proximity Queries 342 Creating a Path Planner Class 342 Planning a Path to a Position 344 Planning a Path to an Item Type 346 Paths as Nodes or Paths as Edges? 348 An Annotated Edge Class Example 350 Modifying the Path Planner Class to Accommodate Annotated Edges 350 Path Smoothing 353 Path Smoothing Rough but Quick 354 Path Smoothing Precise but Slow 358 Methods for Reducing CPU Overhead 359 Precalculated Paths 359 Precalculated Costs 361 Time-Sliced Path Planning 363 Hierarchical Pathfinding 372 Getting Out of Sticky Situations 374 Summing Up 376 Contents | ix TLFeBOOK [...]... sides will remain equal This is best understood with the aid of a couple of examples Example 1 Consider the following equation: 3x + 7 = 22 - 2 x (1.16) This equation can be simplified by subtracting 7 from both sides 3x + 7 - 7 = 22 - 2 x - 7 3x = 15 - 2 x (1.17) It can be further simplified by adding 2x to both sides: 3x + 2 x = 15 - 2 x + 2 x 5 x = 15 (1.18) We can also divide both sides by 5, giving... is: æ y-xö 5x - 2 y = ç ÷ è x ø 2 (1.31) Using rule (1.29) gives: (y - x) 2 5x - 2 y = ( x) 2 (1.32) (y - x) 2 5x - 2 y = x Multiplying both sides by x to dispose of the fractional part gives: x(5 x - 2 y ) = ( y - x)2 (1.33) Now to get rid of the parentheses on the left: 5 x 2 - 2 xy = ( y - x) 2 (1.34) To remove the parentheses on the right we use the rule from (1.28): 5 x 2 - 2 xy = x 2 + y 2 - 2 xy... first book, AI Techniques for Game Programming, with something having a completely different focus Whereas Techniques explored the more “exotic” biological technologies that a game AI programmer might be wondering about without bogging down in computer science minutiae, Mat wanted Example to focus more on what technologies are actually being used by most game AI programmers in their day-to-day work New... Academic AI vs Game AI There is an important distinction to be made between the AI studied by academics and that used in computer games Academic research is split into two camps: strong AI and weak AI The field of strong AI concerns itself with trying to create systems that mimic human thought processes and the field of weak AI (more popular nowadays) with applying AI technologies to the solution of real-world... drink,” and find yourself a nice, cozy chair with your favorite laptop close at hand You’re about to go a-learnin’ Welcome to Programming Game AI by Example I must confess I was surprised when Mat contacted me back in 2003 about this book I wondered to myself, “He already covered all of the new techniques pretty well…what more is there to do?” As we exchanged emails Mat expressed that he had a simple desire... firm foundation for any game AI engine That’s what this book is all about The Surge of Game AI s Importance Game AI has undergone a quiet revolution in the past few years No longer is it something that most developers consider only toward the end of a project when shipping deadlines loom and the publisher is pushing to have the game ship before the next holiday milestone Now game AI is something that... at a slightly more complex example TLFeBOOK 8 | Chapter 1 Mathematics Example 2 Let’s say we want to solve the following for y: y = 2(3x - 5 y ) + x 3 (1.20) First of all we can remove the parentheses by multiplying the term inside the parentheses (3x – 5y), by the term outside (2), giving: y = 6 x - 10 y + x 3 (1.21) Next, it’s a good idea to remove all fractional terms by multiplying all the terms... the knowledge you’ve learned, either by creating small stand-alone examples or by altering or building upon the Simple Soccer or Raven code projects TLFeBOOK This page intentionally left blank TLFeBOOK C ha p t er 1 A Math and Physics Primer T here’s no hiding from it — if you want to learn AI, it helps to know some mathematics and physics Sure, you can use many AI techniques in a “cut and paste” fashion,... field of mathematics and has many practical applications in computer science In the game AI field, you will find it used for line-ofsight (LOS) calculations, collision detection, some aspects of pathfinding, etc Lots of AI is really math-dependent when you boil it down; you will be wise to learn it well Rays and Line Segments A ray is a line with one endpoint It is of infinite length and is defined by a... hierarchical goal-based agents, placing such technologies in the context of the Raven engine and building on previous examples to show how they can greatly improve a game s AI These are techniques in use in only a handful of games on the market today, but they can make a game s AI truly stand out if done properly This book will show you why they make a difference and how to use them Mat even provides . TLFeBOOK Programming Game AI by Example Mat Buckland Wordware Publishing, Inc. TLFeBOOK Library of Congress Cataloging-in-Publication Data Buckland, Mat. Programming game AI by example / by Mat Buckland. p J iii TLFeBOOK Programming Game AI by Example stands out from the pack by providing indus- trial-strength solutions to difficult problems, like steering and goal-oriented behavior. Mat guides the. for the more experienced!” Eric Martel AI programmer, Ubisoft, Far Cry (XBox) Programming Game AI by Example is an excellent book for the game program- ming neophyte, the intermediate programmer,

Ngày đăng: 04/06/2014, 11:59

Từ khóa liên quan

Mục lục

  • Programming Game AI by Example

  • Dedication

  • Contents

  • Foreword

  • Acknowledgments

  • Introduction

  • Chapter 1 A Math and Physics Primer

  • Chapter 2 State-Driven Agent Design

  • Chapter 3 How to Create Autonomously Moving Game Agents

  • Chapter 4 Sports Simulation—Simple Soccer

  • Chapter 5 The Secret Life of Graphs

  • Chapter 6 To Script, or Not to Script, That Is the Question

  • Chapter 7 Raven: An Overview

  • Chapter 8 Practical Path Planning

  • Chapter 9 Goal-Driven Agent Behavior

  • Chapter 10 Fuzzy Logic

  • Appendix A C++ Templates

  • Appendix B UML Class Diagrams

  • Appendix C Setting Up Your Development Environment

  • References

Tài liệu cùng người dùng

Tài liệu liên quan