Vollständig habe ich das Ganze jetzt nicht gedanklich nachvollzogen.
Aber erst Mal eine Empfehlung: Statt 0, 1 und 2 würde ich -1, 0 und +1 für die Richtungen empfehlen, einmal weil ich es anschaulicher finde und weil Du dann gleich einen Wert hast, um eine neue Position zu berechnen, entweder durch
x += directions.x; y+= directions.y;
oder
x += speed * directions.x;
ohne dass Du ifs oder einen Switch brauchst.
Grundsätzlich kann eine Funktion nur einen Wert zurückgeben, dieser kann jedoch eine Struktur aus Arrays und Objekten sein, etwa so:
return {xdir: die_x_richtung, ydir: die_y_richtung};
wenn es nur die Richtung ist. Oder wenn Du sowohl Koordinaten als auch Richtung zurück geben willst, etwa so: