300 likes | 320 Views
Dive into the Fall 2006 project which outlines the game implementation for Simple Soccer. Explore concepts like moving entities, team behaviors, player states, steering behaviors, key calculations, and state machines. The architecture includes the main loop, regions, and goals, making this a comprehensive game development project.
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