Turtle Graphics Versión 2

8

La mayoría de ustedes probablemente han escuchado sobre el famoso programa Turtle Graphics, inicialmente popularizado por Logo. Este desafío es implementar un programa Turtle Graphics en el idioma que elija.

Reglas:

  1. El piso debe ser diagonal con las dimensiones ingresadas por el usuario a través de std-in en el formulario x/y, representando el xy la ylongitud, respectivamente. xno puede ser más de 20 y yno más de 45,

  2. Cuando la pluma está en el estado hacia abajo, debe dibujar tanto el cuadrado (la coordenada x / y) que sale la tortuga como el cuadrado donde entra la tortuga. Esto es lo que sucedería en la vida real, así que eso es lo que debería hacer su programa.

  3. Posición inicial y la dirección de la tortuga deben ser introducidos por el usuario en el formulario x,y,d, donde xy yson las posiciones en las direcciones x y el eje Y, respectivamente, y des la dirección, introducido como U, D, R, o L(arriba, abajo, derecha , y a la izquierda, respectivamente).

  4. Debe detener a la tortuga y mostrar un mensaje de error si la tortuga golpea la pared. En otras palabras, la tortuga no puede atravesar la pared.

  5. La tortuga debe incluir estos comandos:

RESTABLECER: restablece el tablero en blanco: la tortuga vuelve a la posición y dirección iniciales.

DIBUJAR y BORRAR: estos comandos configuran la tortuga para dibujar y borrar, respectivamente.

ARRIBA y ABAJO: estos dos comandos configuran la posición de la herramienta activa (lápiz o borrador) hacia arriba y hacia abajo, respectivamente.

DIRECCIÓN x: este comando gira la tortuga hacia cualquier dirección Norte, Noreste, Este, Sureste, Sur, Suroeste, Oeste o Noroeste, representada como los dígitos 1-8, con Norte (arriba) 1, Nordeste 2 ...

ADELANTE xx: avanza los cuadrados de la tortuga xx; ADELANTE 15 avanza la tortuga 15 casillas. Si la tortuga se enfrenta a N, E, S, de W, se dibujará en xcuadrados solo en esa dirección. Si la tortuga se enfrenta a NE, NW, SE o SW, dibujará xcuadrados en ambas direcciones; es decir, en FORWARD 1 mientras mira a NE, dibujará esto:

 X  
X

PANTALLA - Muestra el tablero, usando Xpara cuadrados rellenos (coordenadas x / y) y un espacio en blanco para cuadrados vacíos.

POSICIÓN: imprime la coordenada x / y de la tortuga en el tablero.

SETPOS xyd: establece la tortuga en la dirección de orientación de la coordenada x / y d, utilizando la misma notación que el comando DIRECCIÓN.

STOP: muestra el tablero y finaliza el programa después de que el usuario ingresa el carácter ~.

Comandos de ejemplo:

DIRECCIÓN 2 HACIA ADELANTE 1 DIRECCIÓN 4 HACIA ADELANTE 1:

 X  
X X 

DIRECCIÓN 2 HACIA ADELANTE 1 DIRECCIÓN 4 HACIA ADELANTE 4:

 X  
X X  
   X  
    X

DIRECCIÓN 3 HACIA ADELANTE 5:

XXXXX

Este programa utilizará reglas de puntuación de estándar para intentar permitir que compitan lenguajes de programación no esotéricos, como Java y C ++.

La versión 1 ya está aquí . No requirió la entrada del usuario del tamaño del tablero y el punto de inicio de la tortuga, ni requirió movimientos diagonales.

Comunidad
fuente

Respuestas:

2

Python 3.3 (354?)

Noté esto como una pregunta sin respuesta y decidí intentarlo:

v=input().split('/')+input().split(',')+[input().split(' '),0,1,'X','U','D','L','R']
w,h,x,y,d,c,p,r,m,n,s,l,e=v
w,h,x,y=int(w),int(h),int(x),int(y)
g=[[' 'for x in range(int(h))]for y in range(int(w))]
while p<len(c):
 i=c[p]
 if r:
  g[y][x]=m
 if i=='RESET':
  w,h,x,y,d,c,p,r,m,n,s,l,e=v
 if i=='DRAW':
  m='X'
 if i=='ERASE':
  m=' '
 if i=='UP':
  r=0
 if i=='DOWN':
  r=1
 if i=='DIRECTION':
  p+=1
  i=int(c[p])
  d=''
  if i in[8,1,2]:
   d+=n
  if i in[4,5,6]:
   d+=s
  if i in[6,7,8]:
   d+=l
  if i in[2,3,4]:
   d+=e
 if i=='FORWARD':
  p+=1
  i=int(c[p])
  for _ in range(i):
   if d.find(n)+1:
    y-=1
   if d.find(s)+1:
    y+=1
   if d.find(l)+1:
    x-=1
   if d.find(e)+1:
    x+=1
   if r:
    g[y][x]=m
 if i=='DISPLAY':
  for z in g:
   print(''.join(z))
 if i=='POSITION':
  print(x,y)
 if i=='SETPOS':
  p+=3
  x,y=c[p-2:p]
  d=''
  if i in[8,1,2]:
   d+=n
  if i in[4,5,6]:
   d+=s
  if i in[6,7,8]:
   d+=w
  if i in[2,3,4]:
   d+=e
 if i=='STOP':
  while input()!='~':
   pass
  exit
 if x>w or x<0 or y>h or y<0:
  print('!')
  exit
 p+=1

PD: No estoy seguro acerca de la configuración de la puntuación, por lo que mi puntuación puede ser incorrecta.

kitcar2000
fuente
Agradable. Supongo que ganas.