XO Play help text

This is the “help” text for my Android football game XO Play.

Changes in Version 1.4

Released on July 14, 2019, Version 1.4 introduces four new game levels:

  • Normal — You and the computer compete with basically the same rules.
  • Difficult — The computer offense is better.
  • Ludicrous — The computer offense is ludicrously better.
  • Inconceivable — The computer offense is so hard to stop it’s inconceivable. (I’ve beaten it only once, 28-27.)

Changes in Version 1.3

The way you play this game is largely the same as the previous version, but under the covers there have been a large number of improvements:

  • The data has been changed to reflect more modern offensive statistics, and scoring by both you and the computer should increase
  • The computer play is smarter on both offense and defense
  • You are now rewarded for having diverse play calling
  • You are similarly penalized for not having a diverse offense
  • New icons help to show your predictability on passing plays, running plays, and run/pass ratio
  • Starting in the second quarter, a numeric predictability indicator is shown in the bottom of the screen
  • The number of times you’ve called each play is shown on each offensive button
  • A bug that was causing very long field goals to be made at a high percentage rate has been fixed

The diversity/predictability is discussed in detail below.

Playing the game

Once you tap a few buttons I hope it will be fairly obvious how to play the game, so this help text is pretty limited at this time. That being said, here are a few pointers to get you started:

  • After you start the game you will be on offense, starting from your own 20 yard line. (There are no kickoffs in the game yet.) Select an offensive formation and play.
  • Once you select a formation and play a “Hike” button will appear. Tap that button to run the play.
  • Time currently runs off at 24 seconds per play.
  • After you score a touchdown or field goal, or kick a punt, the computer will have the ball on offense and you’ll be on defense. There are only four defensive plays to choose from right now; good luck!
  • When you’re on defense, as soon as you tap a defense button the play will be run.
  • When the computer is going to punt or kick a field goal, it doesn’t matter what defense you choose.
  • At any time during the game you can find game stats under the round “i” (for “Information”) button. Unless there are bugs, those stats should be accurate.
  • The game shows four quarters, but other than that it doesn’t really know anything about them. At the end of 60 minutes you can stop the game yourself, or keep playing, such as if the game is tied. The game doesn’t have a halftime or overtime yet. (Again, I need time and money.)
  • There is no “stop game” button. Just kill the game when you’re done, and then restart it to play a new game.

Features and Limitations

It’s important to note that this version of the app is a very long way away from my “vision” of the game. If I could, I would label it Version 0.3, but 1.0 is the lowest version I can use on the Google Play Store, so with this being the second major release I decided to call it Version 1.3.

As a result of this app being so far from where I want it to be, it has many limitations and features/bugs, including:

  • Each play currently takes 24 seconds off the clock. In most games this yields about the right number of plays for you and the computer, but when Version 1 is released it will use “real” timekeeping for each play.
  • There are no timeouts in the game.
  • The computer play-calling algorithms are “okay” right now, and I occasionally do lose to the computer, but they can be made much, much better.
  • Each sack currently yields a five-yard loss.
  • There is no way to turn off the computer voice/announcer, other than to turn down the volume on your Android phone or tablet.
  • Of course the graphics need a lot of work.
  • There are no animations in this version. At some point I hope to change to a new game/graphics engine to make the game more visually interesting.
  • Speaking of the play-calling, I want to do a lot more with the UI to let you know what the computer opponent is “thinking,” both on offense and defense.


When playing on offense, you are now rewarded for having a diverse offense and penalized for having a predictable offense. This is how real football works — if you keep calling the same plays over and over, defenses will generally adapt and shut you down.

Three new icons and two new numeric indicators help to show your predictability:

  • When you press on a passing play, the new quarterback icon will be gray, red, or green:
    • Gray means you are neither penalized or rewarded for calling the passing play you selected
    • Red means your odds of a successful play are reduced because you have used this passing play a large percentage of the time
    • Green means your odds of s successful play are increased because your passing plays are diverse
  • Similarly, when you call a running play:
    • Gray means “no penalty or reward”
    • Red means yours odds of a successful play are reduced
    • Green means yours odds of a successful play are increased

This is what the three icons look like when they are all gray:

The run, pass, and run/pass ratio icons

Rewards and penalties

The “reward” (green icon) and “penalty” (red icon) have to do with the diversity of your play calling.

For passing plays, if all passing plays have been called less than 24% of the time, your odds of success are increased. Conversely, if you favor one passing play and call it more than 35% of the time, your odds of success are reduced. When you are in the 24-35% range, there is no reward or penalty.

For running plays, there are currently two checks. The code looks like this:

runningPlaysAreDiverse() && runPassRatioIsDiverse()

If you dig into the code you’ll find that the tests can be read as, “If all running plays are evenly distributed — if no running play is used for more than 35% of all running plays — and if the run/pass ratio is greater than 0.82 and less than 1.21, your odds of a successful play are increased.”

Conversely, if you don’t pass these tests and you use one running play more than 50% of all running plays, your odds of success are reduced.

There is also a penalty for predictable overall play-calling. In the code you’ll find that if one play is called more than 33% of all plays, your odds of success will be reduced.

What this means

As an example of what this means, if you call a Slant pass it might normally have a 65% completion percentage with a 1.5% chance of being intercepted. But when you are rewarded for having a diverse offense, the completion percentage increases to about 71%, and the interception percentage is reduced significantly.

Conversely, if your offense is too predictable — if you keep calling the same plays over and over — you will be penalized a similar amount. Again using a Slant as an example, your completion percentage will drop to about 58%, and your interception ratio will increase significantly.

The same thing happens for running plays.

This system of penalties and rewards mimics what happens in a real football game: If you keep throwing Slant passes, the defense will adapt to take that away from you. Currently the maximum penalty/reward is about 10-15%, but in the future those numbers may change as the algorithms get smarter.

The numeric predictability indicator

When you’re on offense a “numeric predictability indicator” is shown at the bottom of the screen, just about your statistics. It looks like this:


I refer to this as a “Predictability Matrix,” and the important thing about it is that when it looks like this, you’re being rewarded for calling the current play:


But if it looks like this, you’ll be penalized for calling the current play:


The first three fields in this indicator are as follows:


Fields 4-6 in this indicator are:


Fields 7-8 are:


These values correspond to the quarterback, running back, and run/pass ratio icons. The most important thing to know is that if any of the first three fields are greater than 0, you are being penalized, and if any of the fields 4-6 are greater than 0, you are being rewarded.

The final field — numberOfPossiblePlays — indicates how many play possibilities are considered when the current play will be run. When you’re receiving neither a penalty or a reward this value is 20, meaning that 20 possible outcomes will be considered to give you the final play result.

If your play calling is very diverse, this number will drop to 18, meaning that 18 plays will be considered for the current play, with the two worst possible outcomes being dropped from consideration. Similarly, if your play calling is predictable, the number 18 will again be shown, meaning that 18 possibilities are considered, but this time the two best possible results are dropped.

I initially added this text to help me debug when the penalties and rewards were being calculated properly, but I liked seeing the output so much, I decided to keep it. Like the green screens in The Matrix, it gives you a little more insight into what the game is thinking.

Updates to the pass/play buttons

The buttons for each running and passing play now show the number of times you have called that play in the current game. Showing these values can help you understand why the game may be currently penalizing or rewarding your play-calling diversity.

This is what the running play buttons look like after one Sweep play has been run:

Running play icons and their counts

When you’re on defense

The computer play-calling when it’s on offense is significantly better than it used to be. If you try to play a straight-up 4-3 defense for the entire game, the computer should generally be able to score 20+ points against you. I’ve played some games where I had a couple of turnovers and the computer scored 40+ points against me.

Though I still haven’t put a huge effort into this side of the game, the idea is that you now have to play a solid defensive game to win. For instance, if it’s 3rd & 1, you’ll probably want to play a Run Blitz, because the computer is going to try to run it on most plays. But bear in mind that the computer may also attempt to throw a pass, either to make the first down, or maybe a Post to go for a big strike. So if you play a Run Blitz and the computer throws a pass, the odds are in its favor. In general it will usually go for a running play or maybe a short pass like a Swing pass or Screen, but every once in a while it will go for the Post.


The game is still light-years away from where I’d like it to be, but if you want to play a little football game in about five minutes, I hope it’s at least a little bit of fun.