Simple Soccer GAM 376 Robin Burke Fall 2006
Outline Game Implementation Project #1
Admin Homework #3 Grading Upcoming due today I am behind but no other homework due for awhile Upcoming 10/9: Design phase of Soccer project 10/11: Midterm 10/17: Soccer project
Simple Soccer A 2D sports game 5 agents per team 1 ball 1 field 4 field players 1 goal keeper 1 ball 1 field 2 goals
Architecture Main loop SoccerPitch Update SoccerPitch Redraw responsible for updating what is on the field
SoccerPitch Walls on all four sides Regions Goals no throw-ins or goal kicks Regions 18 rectangular regions for positioning players Goals each tracks number of goals scored
MovingEntity Abstract class for all moving objects Subclasses has steering behaviors Subclasses SoccerBall FieldPlayer
SoccerBall embeds some of the physics of its motion FuturePosition Δx = v Δt + ½ af Δt2 where af is the deceleration due to friction TimeToCoverDistance Δt = (v' – v) / af but what is v' issues what if inner part is negative? then the ball won't get that far what is the initial velocity, v?
Velocity Reset What really happens? a player swings a foot moment of interaction with ball impulse new velocity results really it is a foot/ball collision But not necessary to model it this way assume that the ball is stopped before a kick players can't add to existing velocity OK, because it looks OK much easier to model Initial velocity equals impulse acceleration equals F / m So we can calculate TimeToCoverDistance given two points and a force
Simple Soccer Implementation of a 5-player soccer team Two state machines "Team state" "Player state" Tiered state machines common in tactical FPS games teams have a tactical state "flanking" and each member has its own role "covering fire"
Team state kickoff offense defense everybody go to default position not true soccer kickoff offense look for opportunities to get a pass upfield from the player with the ball defense go to defensive position closest player chases ball
Offense Kickoff Defense other team possession goal scored our team possession Kickoff Defense goal scored play starts
Team Behaviors Tracks passes Tracks ball Controlling player receiving player of a pass set when a pass is made Tracks ball closest player to the ball constantly updated Controlling player the player with the ball Supporting player a player that will get into position for a pass
Support Spot Considers 30 positions on the opponent's half of the field Calculates which position can receive a pass and can shoot a goal and are close enough to ball Supporting player will try to go to the best support spot
Player state defense offense chase ball if you're the closest move toward goal with ball pass if possible without ball (if supporting player) move to support spot ask for pass otherwise do nothing
Steering behaviors tracking the ball "visually" chasing the ball steering to support position goalie has special behavior to get in blocking position
State Machine Global state Wait ReceiveBall KickBall Dribble ChaseBall routes messages Wait ReceiveBall accept a pass KickBall make a pass Dribble try to move the ball downfield ChaseBall try to take possession of the ball ReturnToHomeRegion go home for kickoff SupportAttacker go to supporting position
SupportAttacker ReceiveBall ChaseBall Dribble ReturnToHR KickBall Wait MSG: Support MSG: Receive_Ball SupportAttacker ReceiveBall MSG: Go_Home not closest in receiving range ChaseBall Dribble kicked ReturnToHR in range can't shoot or pass can't kick KickBall closest at home Wait goal or pass attempt
Goal Keeper Different states TendGoal InterceptBall interpose self between ball and goal midpoint InterceptBall if within tending range PutBallBackIntoPlay passes to nearest player
Key Calculations Is a pass safe? Is it possible to shoot? predict trajectory of ball predict closest intercept of each opponent Is it possible to shoot? test positions along the goal mouth does this randomly Who to pass to? tests all of the teammates for validity and nearness to goal Where to place the pass? out of opponents range within receivers range
Demo
SteeringSoccerLab Not the same as Buckland's Allows multiple team implementations Records the CPU time used by each AI implementation Don't use Buckland's code
Abstract class AbstSoccerTeam Abstract functions all soccer teams must subclass Abstract functions CreatePlayers teams can have different player setups InitStateMachine for team state machine teams can have different team FSMs InitPlayers Name
How to allow different opponents? Need students to make their own soccer teams need to run tournament in which teams compete don't want to recompile when adding a team How to make extensible code that doesn't need recompilation? In particular how can I create an instance if I don't know the name of the class
AbstractFactory
Registration How to know which factory object to use? Static instance that registers a name on instantiation Table associating factories with names Result dynamic object creation (A bit easier in Java using reflection)
Implementation TeamMaker class includes a static "registry" member table of name, class pairs has a newTeam method looks up the factory class in the table calls its makeTeam method The class stored here is a subclass of TeamMaker must implement makeTeam makes an instance of the right team object must include a static member with an instance of itself when that instance is created it calls the TeamMaker constructor with a name the factory class is then registered under that name
Project #1 Two parts Design (10/6) Implementation (5 pm, 10/17) tell me what you want to do to create a better team Implementation (5 pm, 10/17) deliver implementation I will compile and check compatibility Tournament (10/18) In class Last minute changes OK
Tournament rules Round-robin Scoring 1 game matches 5 minutes / match Scoring Lower scoring team get a bonus if they used less CPU time 20% less CPU = 1 point Ties go to the most efficient team Degenerate strategies disqualified Randomized elements must stay
Monday Lab using SimpleSoccer