Sorry but you are very, very wrong in your assumptions. Using a CRON job to update an energy field is going to be much, much faster then hitting the database every x or whatever, then on top of that poll to see if x is at a certain time and then running your update routine.
If you think PHP or any interpreted language is going to be faster then executing...
UPDATE player SET energy = energy + 10
Then you are sadly mistaken and have very little understanding of proper database design and execution paths. Even on a player table with over 100k records you are looking at less then .005 secs to issue the query, this WOULD NOT grind the server to a halt even with 100's of players online (your method, even timed would saturate the query queue). To increase performance even more you could make the player table (and should) a INNODB table which support row level locking rather then ISAM which uses table level locking.