9io.ai / Blog

Goalkeeper AI you can beat: how Football Kick’s keepers work

Football Kick’s goalkeeper AI reacts to the ball and never sees your swipe. Reaction times, reading errors, guesses, reach and how six keepers step up.

Key takeaways

  • Football Kick’s keepers never see your swipe. They react to the ball in flight, after their reaction time.
  • Reaction times run from 0.40 s at a rookie rating to 0.13 s at world class.
  • No dice decide a save. The ball has to meet a glove, an arm or the keeper’s body.
  • Better keepers guess more often, which leaves soft shots down the middle a way past them.
  • A test asserts that even a keeper rated 1.0 saves under 20% of firm top-corner shots.

Football Kick’s goalkeeper AI never sees your swipe. Each keeper starts to read the ball’s flight only after their own reaction time. The estimate of where it will cross the line is off by an error that shrinks as the ball comes closer, and sometimes the keeper gambles on a side at the strike. A keeper saves only what their gloves, arms or body can reach. In the engine’s own test runs, a keeper at the top of the scale keeps out about one firm corner shot in five.

Football Kick is our one-finger football game for iPhone and iPad, made for iPhone Duo. As of 30 October 2026 it’s on its way to the App Store, and its engine runs free in the browser at footballkicks.9io.ai. The launch post covers the whole game. This one is about the keepers. It sets the code’s numbers against research on real goalkeepers, follows the six keepers through 30 levels and shows how we test them without a phone. It ends with a checklist for designing an opponent people can beat.

What a real goalkeeper is up against

The penalty mark is 11 m from the middle of the goal.1 Bar-Eli and colleagues, who studied 286 penalties from top leagues and championships, put the ball’s flight at about 0.2 to 0.3 s, citing two economics papers.2 Measured kick speeds suggest only the hardest strikes come close. Kellis and Katis’s review gives 18 to 35 m/s for a maximal instep kick,3 which over 11 m is 0.31 to 0.61 s before air resistance slows the ball. In our engine, a 31.8 m/s strike into the top corner takes about 0.4 s.

A person needs a good share of that just to respond. Woods and colleagues timed 1,469 adults pressing a button when a stimulus appeared. Without the hardware delay they averaged 213 ms, of which the team estimates about 131 ms went on detecting the stimulus.4 A keeper then has to move their whole body.

So real keepers move first. Hunter and colleagues timed 330 penalties from 34 professional shootouts and found keepers starting their final dive 0.22 s before contact, on average.5 Waiting lets a keeper read more from the taker’s approach but leaves less time to act on it. Bar-Eli’s keepers stayed in the centre on only 6.3% of kicks. Our post on where to aim a penalty kick takes the shooter’s side.

Football Kick has no taker on screen. The camera sits behind the ball and the kick is your swipe, so anything a keeper knew before contact would have to come from the swipe.

Why our goalkeeper AI never reads the swipe

Once a swipe is read, the engine knows the whole kick. The kick solver has already found the launch speed and spin that put the ball through your aim point in still air. A keeper given that point could set off at the strike and save everything within reach.

Soren Johnson made the case for fair game AI in a 2009 Game Developer column, arguing that nothing feels worse to a player than suspecting the game has broken its own rules, and that “transparency is the antidote to suspicion and distrust”.6 Mick West made two related points in a Game Developer article the same year.7 Players read intent into whatever an opponent does, and an opponent who errs in ways no person would breaks the illusion of playing someone. West’s easy snooker AI was judged too good at positional play when the cue ball actually stopped at random.

So a keeper can’t read the swipe, and can’t be made to miss at random either. The keepers’ mistakes have to be a person’s. They react late, misjudge the flight, guess wrong or can’t get there.

KickKit, the game’s Swift engine, enforces this at one boundary. At the strike, the keeper gets the time, a record of where your earlier shots crossed the line and their own random numbers. After that the keeper gets the ball as it flies, and the wind. The kick itself is never passed to the keeper.

// At the strike: the clock, your earlier shots and the keeper's own dice.
keeper.ballStruck(at: time, history: history, rng: &rng)

// Every 1/600 s physics step after that: the ball in flight and the wind.
keeper.watch(ball: ball, wind: wind, physics: physics, kickTime: kickTime, time: time, rng: &rng)

The rule runs the other way in a shootout. With you in goal, the computer’s penalty taker checks only whether your dive has started, and if it has, it may put the ball the other way. The app itself does know how each kick will end before the keeper does. It plays the kick out in advance on a copy of the simulation to decide when to slow time, and only the camera gets the result.

Reaction time, reading error and reach

Every keeper has a rating from 0, a rookie, to 1, world class. It sets seven numbers, each a straight line between the values below, which are the code’s as of 30 October 2026.

Number Rating 0 Rating 1 What it does
Reaction time 0.40 s 0.13 s Time after the strike before the keeper starts reading the ball
Reading error 0.95 m 0.23 m Spread (one standard deviation) of the estimate of where the ball will cross the line
Dive, fixed part 0.30 s 0.18 s Added to every dive
Dive speed 6.2 m/s 10.8 m/s Distance to the ball divided by this gives the rest of the dive time
Launch 0.35 m 1.30 m How far the keeper can push off beyond the body’s stretched length
Guess chance 8% 50% Chance of committing to a side as you strike
Catch speed 11 m/s 20 m/s Slower shots can be held, and faster ones are parried

Against Woods’s numbers, the slow end is almost twice a button press, and the fast end is about the 131 ms of merely detecting a stimulus. Near the top, our keepers react faster than the average adult in that study pressed a button. We see that as the price of the rule above. A real keeper gets a head start from the taker’s body before contact. Ours can’t, so the good ones make it up with speed afterwards and with guessing. In one captured run, a keeper rated 1.0 sets off 0.130 s after a 31.8 m/s strike into the top corner, and the ball is still in at 0.407 s.

Reading. After the reaction time, the keeper reads the ball again every 0.07 s at most, running its flight forward to the goal line with the game’s physics. Without the trait for it, a keeper rated below 0.75 leaves out the spin, and one below 0.55 the wind too. The answer is blurred by the reading error, twice as much sideways as in height. The blur is at full strength while the ball has 0.55 s or more to travel, and a tenth of that at the end.

Timing. A keeper doesn’t fly early at a slow ball, but times the dive to finish just before the ball arrives and keeps reading while waiting. Once moving, the keeper can still shift toward a new read, by half the gap at a rating of 0 and nine tenths at 1, but won’t chase a ball back past the starting point.

Reach. The keeper’s body is a skeleton scaled to their height, and a dive lines it up from the push-off foot to the gloves. If the ball is further away than the stretched length plus the launch, the gloves stop short. Weak-high and weak-low traits make dives above 1.6 m or below 0.6 m take up to 30% longer. When level 1-5 says Theo can’t reach the corners, the reach model is why.

Nothing in the code rolls dice for save or goal. A save happens when the ball meets the keeper’s gloves, arms, body or legs. The dice are in the keeper’s head, in the guess and the reading error, and in which way a parried ball flies off.

Why guessing keepers lose to shots down the middle

A guess picks one of six zones (left, centre or right, each low or high), and the weights lean hard toward the sides. Each bottom corner carries 1.1 and each high side 0.8, against 0.35 for the bottom of the middle and 0.12 for its top. Gus and Viktor have favourite sides that tilt this further. The guessed dive starts 0.03 s after the strike.

A guess is a commitment. Once the reaction time comes round, the keeper can adjust only after going the right way, then stretches 65% of the way toward the new read and can hang in the air up to 0.3 s longer. In one captured kick, a keeper rated 0.5 guesses left as a 26.4 m/s shot heads for the bottom left, sets off 0.030 s after contact and parries it with a forearm at 0.450 s.

The browser game in Penalties against Rafa Ortega: TOP BINS!, sent the keeper the wrong way

The engine’s keepers command shows what guessing costs. Each cell is 60 penalties against a 1.88 m keeper with no traits, in still air, and gives the share that didn’t go in. The columns are keeper ratings. Soft is pace 0.45 on the game’s 0-to-1 scale, about 23.5 m/s, and firm is pace 0.85, just over 30 m/s. Corner shots are aimed 2.9 m from the middle of the goal.

Shot 0.1 0.3 0.5 0.7 0.9 1.0
Bottom corner, soft 2% 8% 12% 18% 62% 65%
Bottom corner, firm 0% 2% 7% 13% 18% 20%
Side at waist height, soft 5% 7% 15% 30% 45% 52%
Side at waist height, firm 2% 5% 10% 17% 35% 53%
Top corner, soft 0% 0% 3% 20% 60% 58%
Top corner, firm 0% 0% 2% 2% 7% 18%
Middle, low, soft 93% 85% 80% 73% 72% 65%
Middle, low, firm 55% 80% 75% 65% 60% 58%
Middle, high, soft 88% 77% 75% 63% 58% 55%
Middle, high, firm 0% 42% 75% 63% 58% 55%

Pace matters as much as placement. A keeper rated 0.9 keeps out 62% of soft shots into the bottom corner and 18% of firm ones. Against firm shots into either corner, even a keeper rated 1.0 keeps out about one in five.

The middle runs the other way. A keeper rated 0.1 keeps out 93% of soft, low shots near the middle and one rated 1.0 only 65%, because better keepers guess more often and most guesses take them to a side. Bar-Eli’s study points the same way. Keepers who stayed in the centre stopped 33.3% of the shots they faced, against 14.2% when they dived left and 12.6% when they dived right.

Walls, wet gloves and fingertip saves

A free kick brings a wall of three or four players 9.15 m from the ball, covering the post on the ball’s side. The keeper moves toward the other post by 0.3 m per player, up to 1.25 m. A real wall also screens the keeper, whose reaction time grows by 0.18 s and reading error by 1.8 times, and who doesn’t guess at the strike. Our post on how to bend a free kick covers the shooter’s half.

The Storm Cup is the one wet ground. There every keeper’s catch speed drops to 70% of its dry value, so shots a keeper would hold in the dry come off the gloves, and low balls skid on after a bounce.

A keeper holds a shot only if it meets the gloves, forearms or chest away from full stretch, and only if it’s slower than the keeper’s catch speed. Anything else comes off. A glove square behind the ball is a firm parry, which sends it back out, wide and up. A glancing touch is a fingertip save. It adds up to 4.5 m/s of sideways speed toward the post on the ball’s side, plus 3 m/s of lift above 1.8 m, and then the ball is free again. It can hit the post and come out or go in, and if it crosses the line between the posts it’s a goal, with a bonus for beating the keeper’s gloves.

Kenji Arata remembers where you shoot

Kenji Arata, The Reader, and Idris Okafor, The Octopus, are the two keepers who learn and who read spin.

A match records where your last eight shots crossed the goal line, in the six zones the keepers guess from, with the three most recent counting double. A learner’s guess weights grow with your shots in each zone, and after seeing two, the learner’s guess chance rises by 12 points. Learners go by where the ball actually crossed, which isn’t always where you aimed, and the record starts empty each match. In the engine’s test, after six shots into the bottom left, a learning keeper rated 0.9 sends more than three quarters of their guesses left.

A keeper who doesn’t read spin runs the flight forward as if the ball would stop curling, so a curler keeps surprising that keeper until it’s close. In the World Tour, Theo, Gus and Rafa read neither spin nor wind, Viktor allows for the wind, and Kenji and Idris read both.

The level card for 6-1, Walk Out, at the World Final, with Idris Okafor's scouting line: remembers where you shoot, reads curve

The level card says so before you shoot. Its scouting line is generated from the same trait values the keeper’s brain uses, so it can’t drift from how the keeper plays. Kenji’s card carries the same line, and the blurb on Kenji’s first level tells you to mix it up.

Six keepers and the difficulty curve across 30 levels

The World Tour has six grounds of five levels, each with its own keeper. The first four levels have an empty net, so you learn to strike, lift, bend and allow for the wind before anyone is in goal, and Theo arrives in level 1-5.

Keeper Ground Rating in the tour Height What sets each apart
Theo Lund, The Apprentice Training Ground 0.12 1.84 m No traits, and the slowest and shortest of the six. Put it in the corners
Gus Pemberton, Big Gus Sunday League 0.26 to 0.34 1.90 m Guesses toward your left and is slow getting down to low balls
Rafa Ortega, El Gato City Derby 0.42 to 0.54 1.86 m A showman who waves both arms and shuffles along the line, and is slow to balls above shoulder height
Viktor Hale, The Lighthouse Storm Cup 0.55 to 0.62 1.98 m The tallest of the six. Slow getting down, leans to your right, and plays in the rain. Keep it low
Kenji Arata, The Reader Continental Nights 0.6 to 0.8 1.87 m Remembers where you shoot within a match, and reads curve and wind
Idris Okafor, The Octopus World Final 0.86 to 0.9 1.93 m Learns and reads like Kenji, at the highest ratings in the tour. Pace and the corners

Level 6-1 at the World Final on iPhone: BOTTOM CORNER!, with the ball inside the post below Idris Okafor's dive

The ratings climb ground by ground and rise within each ground toward its last level, which usually asks for more. The Cup Tie wants four goals from five against Gus at 0.34, and the Final four from five against Idris at 0.9.

On some levels the keeper eases off while something else gets harder. Curl It In, where only bent goals count, drops Rafa from 0.46 to 0.42, and Rafa doesn’t read curve at any rating in the tour. Crosswind Corner and Thunder Road, a free kick into a 20 to 30 km/h crosswind and a 25 m shot into gusts of up to 35 km/h, put Viktor at 0.55 instead of 0.57. Moving Targets drops Kenji from 0.72 to 0.6. Each level sets its keeper’s rating alongside its wind, its kicks and its objective.

Quick Play’s four settings put Gus at 0.22, Rafa at 0.46, Kenji at 0.72 and Idris at 0.96 in goal. Streak starts with Theo at 0.12 and adds 0.04 to the rating with every goal, handing over to a better keeper as it climbs. Just Kick climbs the six keepers one level at a time, at their own ratings, from Theo on level 2 to Idris on level 7, then adds 0.02 to Idris with every level, up to 1.0. In the browser you can play Rafa in Penalties and the whole ladder in Just Kick and Streak.

Just Kick’s open goal and fading help

Just Kick starts with nobody in goal: penalties at the Training Ground, with no wind. Every five goals the level goes up, and from level 2 the next keeper shows up, Theo first.

The help works on your side of the ball, and it fades. On level 1 a swipe counts if it passes within 70 points of the ball’s edge, against 44 elsewhere. Then every kick is kept on target and off the middle. It goes at least 1.15 m from the middle, on the side your swipe leaned, no higher than 2.1 m and never softer than pace 0.45. A kick already in a corner is left alone. On level 2 the kick moves 60% of the way there, on level 3 20%, and from level 4 not at all. Chevrons over the ball show where to swipe until you’ve scored a couple.

Better keepers alone wouldn’t make it hard, because a firm shot into a corner beats all of them from the penalty spot. So from level 3 the ball also moves back 3 m a level, as far as 30 m, and up to 6 degrees further to each side, as far as 30 degrees, which gives the keeper longer to get there. The wind’s top speed rises 4 km/h a level, to 36 km/h.

The engine’s test plays a simulated beginner who aims anywhere from 2.5 m left to 2.5 m right and 0.2 to 3.4 m high, at pace 0.1 to 0.7. The first five kicks must all go in, and the beginner must score fewer than 25 of the first 30.

Checking game AI difficulty without a phone

KickKit is plain Swift with no UI framework, so the engine runs anywhere Swift does, and CI runs swift test in a Linux container on every push. The keeper tests turn design promises into assertions. A keeper rated 1.0 must save under 20% of firm shots into the top corner, and saves must rise with the rating. A keeper rated 0.6 who hasn’t guessed must save at least 90% of soft shots at the body, and a learner’s guesses must follow your habits.

The command-line tool, kick-cli, plays the engine from a terminal. Four of its commands are about difficulty.

  • shot x z pace [bend] [distance] [rating] [seed] prints one kick’s timeline, with the keeper’s dive, every touch and the result. A keeper rated 0.3 starts a dive 0.320 s after a 23.6 m/s strike, and the ball crosses the line for a goal at 0.533 s.
  • keepers prints the 3,600-penalty table above.
  • calibrate kicks 300 combinations of distance, pace, bend and aim in still air and lists every kick that misses its aim by more than 5 cm. A goal or a save should never come from a kick that went somewhere the swipe didn’t send it.
  • cost times a whole kick’s simulation, keeper included, per 120 Hz frame, and counts each frame’s drawing commands on every screen layout. The keeper replays the ball’s flight at every read inside the 1/600 s physics step, so the keeper code has to stay cheap.

balance and oracle play every level with simulated players to set the star thresholds, and justkick prints how often they score at each Just Kick level. A casual simulated player scores on all of their kicks on level 1, 72% on level 4, 57% on level 5 and about a third from level 8. The browser port’s tests replay 13 captured kick-cli timelines and the whole keepers table and match them exactly, as our post on Swift-to-JavaScript parity tests explains.

What the numbers in this post are

The keeper values come from KickKit’s source as of 30 October 2026, with the rating-1 column worked out from the code’s linear formulas. The save rates and timelines are kick-cli output captured for the browser port’s tests, and the keeper code hasn’t changed since. Each cell of the save-rate table is 60 seeded penalties against a generic keeper in still air, so it describes the model. We haven’t measured how often real players score against each keeper, or timed the engine on an iPhone, for this post. The reaction times, kick speeds and goalkeeper behaviour come from the papers cited.

A checklist for designing a beatable opponent

  • Give it only what a person in its place could perceive, and never the player’s input.
  • Put a reaction time on it and check it against human numbers, such as the 213 ms of a button press.
  • Make its estimates worst when it commits earliest, and let the error shrink as evidence arrives.
  • Let it gamble when waiting is hopeless, and make each gamble a commitment the player can punish.
  • Decide outcomes with geometry, so a save is a collision between a body and a ball with no hidden roll.
  • Make its mistakes the kind a person makes, such as reacting late or guessing wrong.
  • Tell the player its habits, in text generated from the numbers that drive it.
  • Assert in a test that the best opponent concedes most of the best shots.
  • Treat difficulty as a budget shared by the opponent, the conditions and the objective.
  • Help beginners on their side of the ball, and leave the opponent’s rules alone.
  • Keep anything that knows the future, like a slow-motion preview, out of the AI’s reach.

  1. The IFAB, “Law 1: The Field of Play”, Laws of the Game, https://www.theifab.com/laws/latest/the-field-of-play/ ↩

  2. Michael Bar-Eli, Ofer H. Azar, Ilana Ritov, Yael Keidar-Levin and Galit Schein, “Action bias among elite soccer goalkeepers: The case of penalty kicks”, Journal of Economic Psychology 28(5), 2007; working-paper version, MPRA Paper No. 4477, posted 15 August 2007, https://mpra.ub.uni-muenchen.de/4477/ ↩

  3. Eleftherios Kellis and Athanasios Katis, “Biomechanical characteristics and determinants of instep soccer kick”, Journal of Sports Science and Medicine 6(2), 154-165, June 2007, https://pmc.ncbi.nlm.nih.gov/articles/PMC3786235/ ↩

  4. David L. Woods, John M. Wyma, E. William Yund, Timothy J. Herron and Bruce Reed, “Factors influencing the latency of simple reaction time”, Frontiers in Human Neuroscience 9:131, 26 March 2015, https://doi.org/10.3389/fnhum.2015.00131 ↩

  5. Andrew H. Hunter, Sean C. Murphy, Michael J. Angilletta Jr and Robbie S. Wilson, “Anticipating the Direction of Soccer Penalty Shots Depends on the Speed and Technique of the Kick”, Sports 6(3):73, 29 July 2018, https://pmc.ncbi.nlm.nih.gov/articles/PMC6162804/ ↩

  6. Soren Johnson, “GD Column 7: Our Cheatin’ Hearts”, Designer Notes, 1 September 2009, first published in Game Developer magazine, May 2009, https://www.designer-notes.com/?p=132 ↩

  7. Mick West, “Intelligent Mistakes: How to Incorporate Stupidity Into Your AI Code”, Game Developer, 18 March 2009, https://www.gamedeveloper.com/programming/intelligent-mistakes-how-to-incorporate-stupidity-into-your-ai-code ↩

Frequently asked questions

How does the goalkeeper AI work in Football Kick?

Each keeper starts reading the ball’s flight after their own reaction time, estimates where it will cross the line with an error that shrinks as it gets closer, sometimes guesses a side at the strike, and saves only what their gloves, arms or body reach. No keeper ever sees your swipe.

Does the goalkeeper in Football Kick cheat?

No. At the strike a keeper is given the time, a record of where your earlier shots went and their own random numbers, but never the kick. After that the keeper sees only the ball in flight and the wind, and a save happens only when the ball meets the keeper’s body.

How long does a penalty kick take to reach the goal?

Bar-Eli and colleagues put it at about 0.2 to 0.3 seconds. Maximal instep kicks travel at 18 to 35 m/s, which over the 11 m from the penalty mark is 0.31 to 0.61 seconds before air resistance. In Football Kick, a 31.8 m/s strike into the top corner takes about 0.4 seconds.

What is a normal human reaction time?

In a study of 1,469 adults aged 18 to 65, Woods and colleagues measured an average simple reaction time of 231 ms, or 213 ms after correcting for hardware delay. Football Kick’s keepers react in 0.40 s at a rating of 0 and 0.13 s at a rating of 1.

How do you make game AI difficulty feel fair?

Give the AI only what a person in its place could perceive, add a reaction time and estimation errors, decide outcomes with geometry instead of hidden dice rolls, tell players its habits, and test that the strongest opponent can still be beaten by a good shot.

How do you beat the keeper in Football Kick?

Hit it firm and into the corners. Keep it low against Gus and Viktor, go high against Rafa, and against Kenji and Idris change corners, because they remember where you shoot.

Work with us

Building something like this?

9io is a small team of senior engineers with a fractional CTO. We work by the hour, and plans start at $5,000. Send us a note about your product. The reply comes from the person who'd do the work.