es un problema para sentarse a pensar, porque es complicado para un nivel basico...
tienes que usar 3 ciclos anidados...
el primero para repetir cada patron desde la letra de inicio (en tu ejemplo X) hasta la vuelta y comprobar si el largo de la cadena mayor es mayor que 1
el segundo para seleccionar la letra a dibujar y hace cada linea (este se divide en 2, la "ida" y la "vuelta"
el tercero es quien imprime cada letra
para la letra la teoria es simple... no te importa que posición representa cada letra en la tabla ascii, lo que te importa es que no se escape de A y Z, así que la letra que recibes la llevas a una escala entre 0 y 25... esto es tan simple como
char escala = letra_recibida - 'A';
así si recibes un "A", "escala" será 9 y si recibes "Z" será 25
para que no se te desborde debes usar el operador de modulo... como sabes que son 26 letras
char letra = (letra_recibida + modificador) % 26
esto hará que si la letra es Z y se le suma 1, (modificador que te lo da el segundo ciclo) la letra volverá a 0
por ultimo para imprimir debes volver a su condicion ascii original, si no se imprimirá "basura"
char letra_imprimible = letra + 'A';