Turtle Graphicsバージョン2


8

ほとんどの人はおそらく、当初Logoによって人気を得た有名なTurtle Graphicsプログラムについて聞いたことがあるでしょう。この課題は、選択した言語でTurtle Graphicsプログラムを実装することです。

ルール:

  1. 床は対角線でなければならず、ユーザーがstd-inを介してフォームx/yに入力した寸法は、xy長さをそれぞれ表します。 x20 y以下、45以下である可能性があります。

  2. ペンがダウン状態の場合、タートルが出る四角形(x / y座標)とタートルが入る四角形の両方を描画する必要があります。これが実際の生活で起こることなので、それがあなたのプログラムがすべきことです。

  3. カメの初期位置及び方向は、フォームにユーザによって入力されなければならないx,y,d場合、xおよびyx軸とy軸上の位置であり、それぞれ、及びd方向、として入力されUDR、またはL(上下、右、左)。

  4. カメが壁にぶつかった場合は、カメを停止してエラーメッセージを表示する必要があります。つまり、カメは壁を歩くことができません。

  5. カメはこれらのコマンドを含まなければなりません:

RESET-ボードを空白にリセットします-カメは最初の位置と方向に戻ります。

DRAWとERASE-これらのコマンドは、タートルをそれぞれ描画と消去に設定します。

UPおよびDOWN-これらの2つのコマンドは、アクティブなツール(ペンまたは消しゴム)の位置をそれぞれ上および下に設定します。

DIRECTION x-このコマンドは、亀を北、北東、東、南東、南、南西、西、または北西の任意の方向に向けます。数字1〜8で表され、北(上)が1、北東が2 ...

FORWARD xx-タートルxxの正方形を前進させます。FORWARD 15は、タートルを15マス前進させます。カメがWのN、E、S、に面している場合、xその方向にのみ正方形で描画されます。タートルがNE、NW、SE、またはSWに面している場合はx、両方向に正方形で描画されます。つまり、NEに面しているFORWARD 1では、次のように描画されます。

 X  
X

DISPLAY- X塗りつぶされた四角(x / y座標)に使用するボードを表示し、空の四角に空白スペースを表示します。

POSITION-カメのx / y座標をボードに印刷します。

SETPOS xyd- dDIRECTIONコマンドと同じ表記法を使用して、タートルをx / y座標方向に設定します。

STOP-ボードを表示し、ユーザーが文字を入力した後にプログラムを終了します~

コマンドの例:

方向2フォワード1方向4フォワード1:

 X  
X X 

方向2フォワード1方向4フォワード4:

 X  
X X  
   X  
    X

方向3フォワード5:

XXXXX

このプログラムは、標準のスコアリングルールを使用して、JavaやC ++などの非難解なプログラミング言語が競合できるようにします。

バージョン1はこちらです。ボードのサイズとカメの始点をユーザーが入力する必要はなく、斜めに動かす必要もありませんでした。

回答:


2

Python 3.3(354?)

私はこれが未回答の質問であることに気づき、試してみることにしました。

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スコアリングの設定がわからないので、スコアが正しくない可能性があります。


いいね。勝ったと思います。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.