Finite State Machines GAM 376 Robin Burke Winter 2008.

Slides:



Advertisements
Similar presentations
Modeling Main issues: What do we want to build How do we write this down.
Advertisements

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.
10/30/2001CS 638, Fall 2001 Today AI –Overview –State Machines.
Programming Languages and Paradigms Object-Oriented Programming.
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.
“The perfect project plan is possible if one first documents a list of all the unknowns.” Bill Langley.
Chapter 4 Introduction to Classes, Objects, Methods and strings
Games Development Game Architecture: Entities CO2301 Games Development 1 Week 22.
Artificial Intelligence for Games Finite State Machines
Object-Oriented Programming Chapter Chapter
Dr Nick Mitchell (Room CM 224)
Finite State Machines GAM 376 Robin Burke Winter 2006.
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.
LECTURE 19 Subroutines and Parameter Passing. ABSTRACTION Recall: Abstraction is the process by which we can hide larger or more complex code fragments.
Chapter 3 Lists, Stacks, Queues. Abstract Data Types A set of items – Just items, not data types, nothing related to programming code A set of operations.
Representing Structure and Behavior
Collision Theory and Logic
Component 1.6.
Review Array Array Elements Accessing array elements
Processes and threads.
Implementing Subprograms Chapter 10
Decision Making: Decision Tree & State Machines Session 07
Programming & Scratch.
Advantages of FSM Their simplicity make it easy for inexperienced developers to implement with little to no extra knowledge (low entry level)
Roberta Roth, Alan Dennis, and Barbara Haley Wixom
State Machine Diagram.
Phil Tayco Slide version 1.0 Created Sep 18, 2017
Protecting Memory What is there to protect in memory?
Main issues: • What do we want to build • How do we write this down
Collision Theory and Logic
Protecting Memory What is there to protect in memory?
Data Structure and Algorithms
Behavioral Design Patterns
Artificial Intelligence and Computer Games
CS101 Introduction to Computing Lecture 19 Programming Languages
Lecture 25 More Synchronized Data and Producer/Consumer Relationship
Queues Queues Queues.
Understanding an App’s Architecture
Lecture 2 Introduction to Programming
Control Structures
CO Games Development 2 Week 19 Extensions to Finite State Machines
CSCI1600: Embedded and Real Time Software
Arrays and Linked Lists
Finite State Machines in Games
Game Loop Update & Draw.
Guest Lecture by David Johnston
ICT Gaming Lesson 3.
Flowcharts and Pseudo Code
Semantic Nets and Frames
Using a Queue Chapter 8 introduces the queue data type.
Using a Queue Chapter 8 introduces the queue data type.
02 | What DirectX Can Do and Creating the Main Game Loop
Games Development Game Architecture: Entities
Procedure Linkages Standard procedure linkage Procedure has
CSCI1600: Embedded and Real Time Software
CSc 453 Interpreters & Interpretation
Dynamic Binary Translators and Instrumenters
Presented by : Aman Gupta PGT CS KV No.1, Narimedu, Madurai
Presentation transcript:

Finite State Machines GAM 376 Robin Burke Winter 2008

Outline Finite State Machines Theory Implementations Homework #2

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"

Creating an FSM First step: states think about states what are the different behaviors to be shown what conditions are true in each state Second: transitions what events in the world cause the agents to change state Third: diagram labeled states and transitions

Example Miner mines gold when he gets gold, he goes to the bank when he gets to the bank, he deposits his gold when he gets thirsty, he goes to the saloon when he gets tired, he goes home to sleep

Exercise FSM for Blinky cs/pacman/game_flash.php Steps 1. Write down all of the states and properties 2. Write down all of the conditions that cause state transitions 3. Draw machine in which states are linked by conditions

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 original machine

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

Table 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

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

OO Implementation States as objects Actions as methods State machine can be very generic

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 Write a state machine diagram Step 1 Create a table of states and properties Step 2 Create a table of conditions Step 3 Draw the diagram