Ошибка в данном коде заключается в том, что значение racket.x не изменяется в функции moveracket после получения значения move в функции main из-за того, что параметры в функциях передаются по значению, а не по ссылке.
В функции main в строке racket := moveracket(racket, move) вместо передачи и изменения значения racket.x, создается новая локальная переменная racket, которая принимает значение, возвращенное функцией moveracket.
Для того чтобы изменить значение переменной racket.x в функции moveracket и сохранить изменения в основной программе, можно использовать передачу аргумента по ссылке, а не по значению. Для этого можно использовать указатель на объект racket или его ссылку.