Finite State Machines GAM 376 Robin Burke Winter 2006.

Slides:



Advertisements
Similar presentations
Finite State Machines in Games
Advertisements

P3 / 2004 Register Allocation. Kostis Sagonas 2 Spring 2004 Outline What is register allocation Webs Interference Graphs Graph coloring Spilling Live-Range.
Written by: Dr. JJ Shepherd
Modeling Main issues: What do we want to build How do we write this down ©2008 John Wiley & Sons Ltd. vliet.
Michael Zyda Finite State Machines Michael Zyda
Artificial Intelligence in Game Design Representing NPCs as Finite State Machines.
Games and Simulations O-O Programming in Java The Walker School
Finite State Machine for Games Fall 2012 Ref: Chenney, CS679 lectures AI Game Programming Wisdom 2.
Artificial Intelligence in Game Design Intelligent Decision Making and Decision Trees.
Artificial Intelligence in Game Design Hierarchical Finite State Machines.
CS-378: Game Technology Lecture #16: AI Prof. Okan Arikan University of Texas, Austin Thanks to James O’Brien, Steve Chenney, Zoran Popovic, Jessica Hodgins.
VBA Modules, Functions, Variables, and Constants
Honors Compilers Addressing of Local Variables Mar 19 th, 2002.
10/30/2001CS 638, Fall 2001 Today AI –Overview –State Machines.
FunState – An Internal Design Representation for Codesign A model that enables representations of different types of system components. Mixture of functional.
Outline IS400: Development of Business Applications on the Internet Fall 2004 Instructor: Dr. Boris Jukic JavaScript: Control Structures: continued.
Run time vs. Compile time
Programming Languages and Paradigms Object-Oriented Programming.
by Chris Brown under Prof. Susan Rodger Duke University June 2012
CS2110: SW Development Methods Design of methods (functions) Class design – CRC cards – UML class and sequence diagrams Software Design.
Raven Robin Burke GAM 376. Soccer standings Burke, 7 Ingebristen, 6 Buer, 6 Bukk, 6 Krishnaswamy, 4 Lobes, 3 Borys, 2 Rojas, 2 Bieneman, 2.
Finite State Machine for Games Spring 2005 Ref: Chenney, CS679 lectures AI Game Programming Wisdom 2.
Fundamentals of Python: From First Programs Through Data Structures Chapter 14 Linear Collections: Stacks.
EGR 2261 Unit 5 Control Structures II: Repetition  Read Malik, Chapter 5.  Homework #5 and Lab #5 due next week.  Quiz next week.
Programming with Alice Computing Institute for K-12 Teachers Summer 2011 Workshop.
Artificial Intelligence in Game Design Behavior Trees.
Object-Oriented Modeling Using UML CS 3331 Section 2.3 of Jia 2003.
Arrays Tonga Institute of Higher Education. Introduction An array is a data structure Definitions  Cell/Element – A box in which you can enter a piece.
CHAPTER 10: CORE MECHANICS Definitions and Mechanisms.
Motion Planning in Games Mark Overmars Utrecht University.
“The perfect project plan is possible if one first documents a list of all the unknowns.” Bill Langley.
Lecture 3 Classes, Structs, Enums Passing by reference and value Arrays.
Games Development 2 Overview & Entity IDs and Communication CO3301 Week 1.
Games Development Game Architecture: Entities CO2301 Games Development 1 Week 22.
Games Development 2 Entity Update & Rendering CO3301 Week 2, Part 1.
Artificial Intelligence for Games Finite State Machines
Object Oriented Analysis & Design Game Patterns. Contents  What patterns are  Delegation  Game Loop  Scene Graph  Double Buffering  Component 
Sega 500 Scripted events and Sequences Jeff “Ezeikeil” Giles
Dr Nick Mitchell (Room CM 224)
Finite State Machines (FSM) OR Finite State Automation (FSA) - are models of the behaviors of a system or a complex object, with a limited number of defined.
Practical Object-Oriented Design with UML 2e Slide 1/1 ©The McGraw-Hill Companies, 2004 PRACTICAL OBJECT-ORIENTED DESIGN WITH UML 2e Chapter 10: Statecharts.
Written by: Dr. JJ Shepherd
CSCI 156: Lab 11 Paging. Our Simple Architecture Logical memory space for a process consists of 16 pages of 4k bytes each. Your program thinks it has.
1 Process Description and Control Chapter 3. 2 Process A program in execution An instance of a program running on a computer The entity that can be assigned.
Repetition everywhere – comparing while in a method and as an event Susan Rodger Duke University July 2010.
1 Game AI Finite State Machine. 2 Finite State Machine (FSM) is the Most Commonly used Game AI Technology Today Finite State Machine (FSM) is the Most.
Finite State Machines GAM 376 Robin Burke Fall 2006.
Finite State Machines Logical and Artificial Intelligence in Games Lecture 3a.
10/23/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Terrain Generation We’re pretty much done with the graphics part of the course.
CSCE 240 – Intro to Software Engineering Lecture 3.
LECTURE 19 Subroutines and Parameter Passing. ABSTRACTION Recall: Abstraction is the process by which we can hide larger or more complex code fragments.
CONDITIONALS CITS1001. Scope of this lecture if statements switch statements Source ppts: Objects First with Java - A Practical Introduction using BlueJ,
The Stingray Example Program CMT3311. Stingray - an example 2D game May be useful as a simple case study Most 2D games need to solve generic problems.
Finite State Machines GAM 376 Robin Burke Winter 2008.
Representing Structure and Behavior
Review Array Array Elements Accessing array elements
Processes and threads.
Decision Making: Decision Tree & State Machines Session 07
Roberta Roth, Alan Dennis, and Barbara Haley Wixom
Main issues: • What do we want to build • How do we write this down
Artificial Intelligence and Computer Games
Lecture 2 Introduction to Programming
CO Games Development 2 Week 19 Extensions to Finite State Machines
CSCI1600: Embedded and Real Time Software
Finite State Machines in Games
Games Development Game Architecture: Entities
CSCI1600: Embedded and Real Time Software
Dynamic Binary Translators and Instrumenters
Games Development 2 Entity / Architecture Review
Presentation transcript:

Finite State Machines GAM 376 Robin Burke Winter 2006

Outline Finite State Machines Theory Implementations Homework #2 Break Lab

AI in the Game Loop AI is updated as part of the game loop, after user input, and before rendering There are issues here: Which AI goes first? Does the AI run on every frame? Is the AI synchronized?

AI Module AI Update Step The sensing phase determines the state of the world May be very simple - state changes all come by message Or complex - figure out what is visible, where your team is, etc The thinking phase decides what to do given the world The core of AI The acting phase tells the animation what to do Generally not interesting Game Engine Sensing Thinking Acting

AI by Polling The AI gets called at a fixed rate Senses: It looks to see what has changed in the world. For instance: Queries what it can see Checks to see if its animation has finished running And then acts on it Why is this generally inefficient?

Event Driven AI Event driven AI does everything in response to events in the world Events sent by message (basically, a function gets called when a message arrives, just like a user interface) Example messages: A certain amount of time has passed, so update yourself You have heard a sound Someone has entered your field of view Note that messages can completely replace sensing, but typically do not. Why not? Real systems are a mix - something changes, so you do some sensing

Finite State Machines (FSMs) A set of states that the agent can be in Connected by transitions that are triggered by a change in the world Normally represented as a directed graph, with the edges labeled with the transition event Ubiquitous in computer game AI You might have seen them in theory of computation (or compilers)

Classic Application: Regular Expressions Any regular expression can be translated into a finite state machine this is part of what it means to be a regular expression Example (Perl) DePaul course ids [A..Z]{2,3}([1..6]\d\d) GAM376

What would the machine look like?

Quake Bot Example Types of behavior to capture: Wander randomly if don’t see or hear an enemy When see enemy, attack When hear an enemy, chase enemy When die, respawn When health is low and see an enemy, retreat Extensions: When see power-ups during wandering, collect them Borrowed from John Laird and Mike van Lent’s GDC tutorial

Example FSM States: E: enemy in sight S: sound audible D: dead Events: E: see an enemy S: hear a sound D: die Action performed: On each transition On each update in some states (e.g. attack) Spawn D Wander ~E,~S,~D ~E D Attack E,~D ~E E E D ~S Chase S,~E,~D E S S D

Example FSM Problem States: E: enemy in sight S: sound audible D: dead Events: E: see an enemy S: hear a sound D: die Spawn D Wander ~E,~S,~D ~E D Attack E,~D ~E E E D ~S Chase S,~E,~D E S S D Problem: Can’t go directly from attack to chase. Why not?

Better Example FSM States: E: enemy in sight S: sound audible D: dead Events: E: see an enemy S: hear a sound D: die Extra state to recall whether or not heard a sound while attacking Spawn D Wander ~E,~S,~D ~E D Attack E,~S,~D ~E E E D ~S Chase S,~E,~D S S D E Attack-S E,S,~D ~E ~S S D

Example FSM with Retreat Spawn D (-E,-S,-L) Wander -E,-D,-S,-L E -S Attack-E E,-D,-S,-L E Chase -E,-D,S,-L S D S D D Retreat-E E,-D,-S,L L -E Retreat-S -E,-D,S,L Wander-L -E,-D,-S,L Retreat-ES E,-D,S,L Attack-ES E,-D,S,-L E E -E -L S -S L -E E L -L L D States: –E: enemy in sight –S: sound audible –D: dead –L: Low health Worst case: Each extra state variable can add 2n extra states n = number of existing states

Augmented FSM Typically, there will be book-keeping to do when transitioning between states For example "direction of sound" variable cleared when sound is absent and changing to "Wander" state Most FSM implementations allow specification of update what to do during each time increment in this state enter what to do to start up this activity exit what to do to end this activity

Example Chase Enter Play animation "weapon forward" Play sound "battle cry" Set heading "direction of sound" Set speed "run" Update Set heading "direction of sound" Move Exit Play animation "hand to ear" Play sound "Huh?" Set speed "walk"

Exercise FSM for Blinky

Hierarchical FSMs What if there is no simple action for a state? Expand a state into its own FSM, which explains what to do if in that state Some events move you around the same level in the hierarchy, some move you up a level When entering a state, have to choose a state for it’s child in the hierarchy Set a default, and always go to that Or, random choice Depends on the nature of the behavior

Hierarchical FSM Example Note: This is not a complete FSM All links between top level states still exist Need more states for wander Start Turn Right Go-through Door Pick-up Powerup Wander Attack Chase Spawn ~E E ~S S D ~E

Non-Deterministic FSM (Markov Model) Adds variety to actions Have multiple transitions for the same event Label each with a probability that it will be taken Randomly choose a transition at run-time Markov Model: New state only depends on the previous state Attack Start Approach Aim & Jump & Shoot Aim & Slide Left & Shoot Aim & Slide Right & Shoot

Push-down State Machines Suppose we have some repeated behavior common to many states don't want to "forget" what we were doing Example change weapon if out of ammo might want to do this while wandering, chasing, or attacking if we make this a state where do we transition after doing it? Separate global state Transition into this state temporarily and pop back to origin

Efficient Implementation Compile into an array of state-name, event state-name i+1 := array[state-name i, event] Switch on state-name to call execution logic Hierarchical Create array for every FSM Have stack of states Classify events according to stack Update state which is sensitive to current event Markov: Have array of possible transitions for every (state- name,event) pair, and choose one at random event state

OO Implementation States as objects Actions as methods State machine can be very generic More in a minute

FSM Advantages Very fast – one array access think GBA Expressive enough for simple behaviors or characters that are intended to be “dumb” Can be compiled into compact data structure Dynamic memory: current state Static memory: state diagram – array implementation Can create tools so non-programmer can build behavior Non-deterministic FSM can make behavior unpredictable

FSM Disadvantages Number of states can grow very fast Exponentially with number of events: s=2 e Number of arcs can grow even faster: a=s 2 Limited representational power Propositional representation

Varieties of representation Propositional logic: Statements about specific objects in the world – no variables Jim is in room7, Jim has the rocket launcher, the rocket launcher does splash damage Go to room8 if you are in room7 through door14 Predicate Logic: Allows general statement – using variables All rooms have doors All splash damage weapons can be used around corners All rocket launchers do splash damage Go to a room connected to the current room

Representation in FSMs Can only handle propositions each transition predicated on a proposition being true or false Difficult to add comparative tests “pick up the better powerup” “attack the closest enemy” Expensive to count Wait until the third time I see enemy, then attack Need extra events: First time seen, second time seen, and extra states to take care of counting

Implementations switch statement we can implement a FSM with a switch statement Each state is a branch switch case CHASE: if ENEMY state = ATTACK else if ~SOUND state = WANDER else DoChase() case WANDER: etc. Concise but a maintenance nightmare

Transition table For each state and event record next StateEventNewStateUpdateFn ChaseEnemyAttackDoChase() Chase~SoundWanderDoChase()

Buckland Uses the "State" design pattern all information relative to an object's state is encapsulated changing state is a matter of changing this object Calling sequence Game -> Object "update yourself" Object -> State "update me" many advantages state objects can be shared without duplicating code easy to store "previous state" information

Overall design Game-wide state machine When each object is updated, the state is loaded into the machine and processed new state is recorded with object Assumes that everything in the game uses a state machine

Structure view

Singleton pattern All states are unique instances only a single copy of the "Quench Thirst" state Benefit no dynamic allocation and destruction of state objects Drawback no object-specific information can be stored in the state Technique use static allocation use a static member function that always returns this instance make constructor private

Example class QuenchThirst : public State { private: QuenchThirst(){} QuenchThirst(const QuenchThirst&); QuenchThirst& operator=(const QuenchThirst&); public: static QuenchThirst* Instance(); virtual void Enter(Miner* miner); virtual void Execute(Miner* miner); virtual void Exit(Miner* miner); }; QuenchThirst* QuenchThirst::Instance() { static QuenchThirst instance; return &instance; }

Improved design Each object may have slightly different requirements for how its state should be handled some may not need a state machine some may have something more complex hierarchy, Markov, etc. Give each object its own state machine

Next version

Note That this state machine has a global state and previous state very limited memory to handle state "blips"

Messaging Perception by polling is inefficient never want to be "busy waiting" Example if guard does nothing until player enters guard should not be constantly checking "did player enter" in order to transition to next state Better method publish / subscribe have player send a message to each item in a room when he enters state transition can be predicated on this message

Note Messages sent to specific recipients not hard to imagine an extension for localized messages global messages very expensive Modern games use messaging extensively Need for unique entity ids and entity registry

Homework #2 We are not using WestWorld too weird Instead AIsteroids an asteroids game you will be working with the AI controlling the ship

Part I Add a new state when there are few asteroids go into powering-up state try to avoid asteroids and just get lots of power-ups sort of a specialized idle mode

Part II Add toroidal geometry the AI does not measure distances right off-screen wrap-around not used Change the code to do this right

Major hint screen wrap region pretend asteroid is at position (x, y-screenH)

Break