One neat app I've discovered lately that helps me with this tremendously is Sleep as Android[1]. It has a "CAPTCHA" mode for alarms, where you have to do some additional task to wake up. It has a few choices for the task, but the most amazing one is QR Code scanning. You "teach" the phone a QR code of your choice, and when the alarm goes off you have to scan the code to turn it off. The use case is printing a QR code on a piece of paper and sticking it in the kitchen/bathroom/whatever room that requires you getting up and walking. A simple, yet (to me) a mind-blowing feature for an alarm.
I use Alarm Clock Extreme for Android, which (among other things) you can set to make you solve math problems before you can shut it off. The complexity of the problems, quantity, etc is configurable.
Much like the GP poster, I'm usually not myself when awakened by an alarm. I can go 30 feet to turn off an alarm and return to bed without ever really being awake. Having to do some multiplication and division wakes up the more rational parts of my brain.
It's what I did before, the problem was that the point of the app is sleep-tracking and waking you up at the optimal time in your sleep cycle. This requires the phone being somewhere on the bed so it can register your movement. The negative side-effect of this is of course being able to turn off the alarm with your eyes more or less closed by blindly grabbing at the phone conveniently placed at arm's reach.
[1] https://play.google.com/store/apps/details?id=com.urbandroid...