300 likes | 319 Views
Simple Soccer. GAM 376 Robin Burke Fall 2006. Outline. Game Implementation Project #1. Admin. Homework #3 due today Grading 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.
E N D
Simple Soccer GAM 376 Robin Burke Fall 2006
Outline • Game Implementation • Project #1
Admin • Homework #3 • due today • Grading • 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 • 4 field players • 1 goal keeper • 1 ball • 1 field • 2 goals
Architecture • Main loop • Update SoccerPitch • Redraw • SoccerPitch • responsible for updating what is on the field
SoccerPitch • Walls on all four sides • 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 • 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 • 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 other team possession goal scored our team possession Kickoff Defense goal scored play starts
Team Behaviors • Tracks passes • 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 • chase ball if you're the closest • offense • 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 • 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
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 • interpose self between ball and goal midpoint • InterceptBall • if within tending range • PutBallBackIntoPlay • passes to nearest player
Key Calculations • Is a pass safe? • 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
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 • 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
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) • 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 • 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