You'll need to set up a few variables.
Moves remaining, and move cost for each tile.
Create an "available move" (blue tile) at the origin, with the movesRemaining instance variable.
For each tile around it, create a new available move IF the moveCost is less than or equal to movesRemaining. Then subtract the moveCost from the origin tile's movesRemaining value to set the new move tile's movesRemaining.
Repeat again for each new set of tiles until no new tiles are created (all have 0 movesRemaining). In the event of any overlaps, keep only the instance with the highest movesRemaining.
You can use a flag/toggle to keep track of which tile has "spawned" movement tiles already to make it more efficient.