Turtle Graphics Version 2

8

Die meisten von Ihnen haben wahrscheinlich von dem berühmten Turtle Graphics-Programm gehört, das ursprünglich von Logo populär gemacht wurde. Diese Herausforderung besteht darin, ein Turtle Graphics-Programm in der Sprache Ihrer Wahl zu implementieren.

Regeln:

  1. Der Boden muss eine Diagonale mit Abmessungen sein, die vom Benutzer durch Standardeintrag in der Form eingegeben werden und x/ydie xbzw. die yLänge darstellen. xdarf nicht mehr als 20 und ydarf nicht mehr als 45 sein,

  2. Wenn sich der Stift im unteren Zustand befindet, muss er sowohl das Quadrat (die x / y-Koordinate) der Schildkrötenblätter als auch das Quadrat, in das die Schildkröte eintritt, zeichnen. Dies würde im wirklichen Leben passieren, also sollte Ihr Programm dies tun.

  3. Anfangsposition und die Richtung der Schildkröte muss in Form von dem Benutzer eingegeben werden x,y,d, wo xund ysind die Positionen auf der x- und y-Achse ist, und ddie Richtung ist , eingegeben , wie U, D, R, oder L( nach oben, unten, rechts bzw. links).

  4. Sie müssen die Schildkröte anhalten und eine Fehlermeldung anzeigen, wenn die Schildkröte die Wand berührt. Mit anderen Worten, die Schildkröte kann nicht durch die Wand gehen.

  5. Die Schildkröte muss folgende Befehle enthalten:

RESET - Setzt das Board auf leer zurück - die Schildkröte kehrt in die Ausgangsposition und -richtung zurück.

ZEICHNEN und LÖSCHEN - Mit diesen Befehlen wird die Schildkröte auf Zeichnen bzw. Löschen eingestellt.

UP und DOWN - Mit diesen beiden Befehlen wird die Position des aktiven Werkzeugs (Stift oder Radierer) auf up bzw. down gesetzt.

RICHTUNG x - Mit diesem Befehl wird die Schildkröte in eine beliebige Richtung nach Norden, Nordosten, Osten, Südosten, Süden, Südwesten, Westen oder Nordwesten gedreht, dargestellt als Ziffern 1-8, wobei Nord (oben) 1 und Nordosten 2 ...

FORWARD xx - Schreitet die Quadrate der Schildkröte xx voran; FORWARD 15 rückt die 15 Felder der Schildkröte vor. Wenn die Schildkröte N, E, S oder W zugewandt ist, zeichnet sie xnur in dieser Richtung Quadrate. Wenn die Schildkröte nach NE, NW, SE oder SW zeigt, zeichnet sie xQuadrate in beide Richtungen. dh in VORWÄRTS 1, während Sie NE gegenüberstehen, wird dies gezeichnet:

 X  
X

ANZEIGE - Zeigt die Tafel mit Xausgefüllten Quadraten (x / y-Koordinaten) und einem Leerzeichen für leere Quadrate an.

POSITION - Druckt die x / y-Koordinate der Schildkröte auf die Tafel.

SETPOS xyd - Setzt die Schildkröte unter dVerwendung der gleichen Notation wie der Befehl DIRECTION auf die Richtung der x / y-Koordinate .

STOP - Zeigt die Karte an und beendet das Programm, nachdem der Benutzer das Zeichen eingegeben hat ~.

Beispielbefehle:

RICHTUNG 2 VORWÄRTS 1 RICHTUNG 4 VORWÄRTS 1:

 X  
X X 

RICHTUNG 2 VORWÄRTS 1 RICHTUNG 4 VORWÄRTS 4:

 X  
X X  
   X  
    X

RICHTUNG 3 VORWÄRTS 5:

XXXXX

Dieses Programm verwendet Standardregeln für die Bewertung von , um zu versuchen, nicht-esoterischen Programmiersprachen wie Java und C ++ den Wettbewerb zu ermöglichen.

Version 1 ist da . Es waren weder Benutzereingaben der Brettgröße und des Schildkrötenstartpunkts noch diagonale Bewegungen erforderlich.

Gemeinschaft
quelle

Antworten:

2

Python 3.3 (354?)

Ich bemerkte dies als unbeantwortete Frage und beschloss, es auszuprobieren:

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

PS Ich bin mir über das Scoring-Setup nicht sicher, daher ist meine Punktzahl möglicherweise falsch!

kitcar2000
quelle
Nett. Ich denke du gewinnst.