Functional requirements are requirements that can be identified with some specific stimulus and its associated response. So, in a game, the requirement that your POV in a first-person shooter turn right when the right cursor arrow is pressed is a functional requirement.
Non-functional requirements are requirements that don't apply to a specific stimulus and response, but to the system overall. So a non-functional requirement would be that your game needs to support 10 players simultaneously, or that it needs to support a list of different graphics cards.
Hre are some more examples:
Functional
- Player chooses a weapon from the weapons they are carrying.
- Combat opponent hits player's character; character loses hit points
- Player hits opponent; compute hit probability
- Player fires current weapon; compute impact point
- if response from server ≥ 2 second, post a "waiting..." notice in display
- if password entered doesn't meet 3-4 rule, don't accept, make user retry
Nonfunctional
- Game start up ≤ 30 seconds
- Game should respond to key inputs in ≤ 100 msec
- Server should respond to update location in ≤ 500 msec
- Redraw frame rate ≤ 15 fps
- All passwords must follow a "3 out of 4" rule (ie, must contain characters from at least three of [a-z][A-Z][0-9] and symbols).
Notice the last pair: there's a nonfunctional requirement about password strength; that translates to a functional requirement about what passwords are acceptable. It's useful and important to state both; one specifies how some chunk of software should be built; the other says no part of the software dealing with passwords should violate the rule. So in a sense, the functional requirement is a liveness property: you say what good thing must happen. The nonfunctional requirement is a safety property: you're saying that a particular bad thing must not happen.