KISS, man, KISS. Keep It Stupidly Simple.
I would setup an unsigned int array of length 16. That will give you 16 bits wide and 16 rows tall.
On button press:
- turn off the old bit
- update posX and posY
- turn on bit at new location
- send array to shift registers