Hard coding the direction array is one, placing it inside a data section.. this would save around 120 bytes, as the array allocation and assignments would no longer be needed.
Ok.. because I hate being beaten by a problem and I'm not sure this will suit your game mechanics.
Create a movement boundary square around the selected object, of say 16x16 tiles/cells.. the object can only move within that boundary, which adjusts with the moving object.