I built a 2D fighter http://neighr.com/mif/index.html yesterday.

The second 'player' does hardly anything. Actually, nothing. To be honest, I have never made a game before that had an opponent like this.

So my question is, how does one start with AI programming for the opponent? Are there any tutorials, any best practices? I want it to be a challenge (for the player, not myself).


N-grams are popular here. The basic idea is to keep a list of moves the player has made. You can then, given the last N moves of the player, figure out percentage likelihood of what his next move might be.

Your game should have a database of effective counters and blocks to each move.

For offensive modes in the AI, you can still basic player modeling to determine which attacks the player has had the most trouble blocking or countering, and reuse those.

For AI difficulty, just dumb down the AI at easier levels. The worst AI mode might invert choices (that is, if it knows the player usually blocks punches, it has a higher rather than lower chane to throw a punch). The highest difficulty mode would use the non-handicapped algorithm, and is likely going to beat the crap out of the player.

If you're looking to make the game more fun, I also recommend adding personality to the AI. Some characters might taunt more, some might be more defensive than offensive, etc. players enjoy being able to ascribe human intelligence to AI characters.

| improve this answer | |

Honestly as much as some of the top answers recommend more complex AI, If this is an early attempt at a game and you're not that skilled with code yet, you might try for a more dumb AI

For example a simple system of

wait (0-3 seconds)

Roll d6

pick from 6 actions.

Or something similar depending on how many actions you have

| improve this answer | |

This is how i would go about making ai for a fighting game.

Make lists of moves (depending on char) that are appropriate for different distances away from the player and have him pick a move.if the difficulty is set on hard. Have him pick a hard hitting move. Otherwise pick the move that does less for medium and less for easy. You can also throw in a random factor that picks different ranges from the one that player is actually at depending on difficulty. The amount of decisions should be based on difficulty where he evaluates 3 seconds after each move(easy) 2 seconds(medium) ect. Each time determining his course of action.

summarizing, pick a distance(move set), pick a move and then how long they wait before they do the same thing. In between waiting for the next action they can strafe and dodge by chance. Hope this helps.

| improve this answer | |
  • \$\begingroup\$ +1 This is an extremely simple, yet absolutely viable & efficient solution. By any chance, would you happen to know if a system like this has been used in any commercial games? :) \$\endgroup\$ – Miguel Aug 17 '12 at 4:32
  • \$\begingroup\$ No I don't. I'm speaking from very little experience. So if its any good, and I thought of it. Then surely I'm not the first.(if its any good). N moves would be smarter. But harder. \$\endgroup\$ – Kaliber64 Aug 19 '12 at 1:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.