Así a simple vista estoy viendo que tu código tiene un error, después de que muevas el objeto se volverá a colocar en la posición inicial y no se verá siquiera el movimiento que hizo debes cambiarlo a:
ConsoleKeyInfo keyinfo;
Console.SetCursorPosition(11, 11);
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("@");
do
{
keyinfo = Console.ReadKey();
if(keyinfo.Key == ConsoleKey.UpArrow)
{
Console.SetCursorPosition(11, 10);
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("@");
}
while (keyinfo.Key == ConsoleKey.DownArrow)
{
}
while(keyinfo.Key == ConsoleKey.LeftArrow)
{
}
while (keyinfo.Key == ConsoleKey.RightArrow)
{
}
}
while (keyinfo.Key != ConsoleKey.Enter);
Lo siguiente sería que usaras dos variables: una para guardar los valores de X y otra los de Y. Otra cosa, estás mal en las sentencias de comparación deberían ser "if" en ves de "while". Ahora, dependiendo de la tecla pulsada aumentarás o disminuirás el valor de X o Y y después llamarás a una función para colocar el cursor en esa posición y dibujar el carácter, pero en las posiciones de las variables X y Y. Es decir:
Console.SetCursorPosition(X, Y);
Console.WriteLine("@");