2017-04-21 51 views
2

Picture of what the code does with the Top Hat我正在使用面向对象编程的项目,我们的任务是绘制一个雪人,主要是形状的类。我把整个雪人抽出来,但是当试图填充正方形时,它会填满一个三角形,而不是出于某种原因。填写由列表绘制的形状

import turtle 

class Shape(object): 

    def __init__(self, pensize = 1, pencolor = "black"): 

     self.pensize = pensize 
     self.pencolor = pencolor 

class Line(Shape): 
    def __init__(self, start = (0.0, 0.0), end = (50.0, 0.0), 
       pencolor = "black", pensize = 1): 

     Shape.__init__(self,pensize,pencolor) 
     self.start = start 
     self.end = end 

    def __str__(self): 
     return "Line(beg:{},end:{})".format(self.start ,self.end) 

    def draw(self, pen): 
     """draw the line using the provided pen""" 
     pen.pensize(self.pensize) 
     pen.pencolor(self.pencolor) 
     pen.up() 
     pen.goto(self.start) 
     pen.down() 
     pen.goto(self.end) 

class Square(object): 
    def __init__(self, pos = (0.0,0.0), size = 50): 

     self.pos = pos 
     x ,y = pos 
     self.size = size 
     self.side_lines = [Line((x, y), (x, y + size)), # front, left 
          Line((x, y), (x + size, y)), # front, bottom 
          Line((x + size, y), (x + size, y + size)), # front, right 
          Line((x, y + size), (x + size, y + size))] # front, top 

    def __str__(self): 
     return "Square(pos:{},size:{})".format(self.pos, self.size) 

    def draw(self, pen): 
     for l in self.side_lines: 
      l.draw(pen) 

class Snow_man(Shape): 
    def __init__(self, pos = (0.0, 0.0)): 
     self.pos= pos 

    def __str__(self): 
     return "Drawing a Snowman" 

    def draw(self, pen): 
     brim = Line((-400, 300), (-200, 300), "black", 5) 
     brim.draw(pen) 
     pen.color("black") 
     pen.begin_fill() 
     topHat = Square((-360, 300), 120) 
     topHat.draw(pen) 
     pen.end_fill() 

pen= turtle.Turtle() 
snowman= Snow_man() 
snowman.draw(pen) 
turtle.exitonclick() 

回答

0

首先你打电话begin_fill()的时候,你要调用begin_fill()在广场一角是帽檐结束乌龟的当前位置。

因此,在使用begin_fill()之前使用类似pen.goto(-360,300)的东西会将龟带到起始位置。那么你可以调用begin_fill()。

接下来,如何绘制线条,如果线条是从一个角落画到另一个角落,而不是像使用fd()和right()命令一样简单地来回绘制线条,会更好。

being_fill() 
fd(50) 
right(90) 
fd(50) 
right(90) 
fd(50) 
right(90) 
fd(50) 
end_fill() 

会填满一个正方形。所以我只是觉得你应该在side_lines上重新调整你的线条。像它坐标的起始位置等。