简体   繁体   English

如何绘制正方形网格?

[英]How can I draw a grid of squares?

My current code only draws 1 row of squares, however I want to draw a whole grid of squares?我当前的代码只绘制了 1 行正方形,但是我想绘制整个正方形网格? How do I do this?我该怎么做?

from turtle import*

bob=Turtle()
def square():
    x = 0
    y=0
    for i in range(4):
        bob.forward(50)
        bob.left(90)
        bob.forward(50)
        bob.left(90)
        bob.forward(50)
        bob.left(90)
        bob.forward(50)
        bob.left(90)
        bob.goto(50+x,0)
        x+=50
    bob.goto(0,-50)
    bob.right(90)
square()
square()
square()
input()

You have to play around to understand better the concept of functions - the idea is that you get a function that does one simple task, and do it well - and then write other functions to combine calls to that first one with other code, to do other tasks.您必须尝试更好地理解函数的概念——这个想法是你得到一个函数,它可以完成一个简单的任务,并且做得很好——然后编写其他函数来将第一个函数的调用与其他代码结合起来,做其他任务。

Your code looks like you picked the square example from somewhere, and them just tried to pump-up the square function to do everything at once: that makes for poor quality code, which is hard to understand, or even to write correctly.您的代码看起来就像您从某个地方选择了 square 示例,而他们只是尝试使用 square 函数来一次完成所有事情:这导致代码质量很差,难以理解,甚至难以正确编写。

So try the following:因此,请尝试以下操作:

  • A function that draws a square, and comes back to the point of start, heading the sameway一个绘制正方形并返回起点的函数,以同样的方式前进
  • A function that draws a square row, by repeating "n" times: (draw a square, walk forward the square size), and them go back to the starting place.一个绘制正方形行的函数,通过重复“n”次:(绘制一个正方形,向前走正方形大小),然后它们回到起始位置。
  • Another function that repeats "m" times: drawing a square row, going up one square size, heading back to the side it was originanlly facing.另一个重复“m”次的函数:绘制一个正方形的行,向上增加一个正方形大小,然后返回到它最初面向的一侧。

import turtle
bob = turtle.Turtle()

def square(side):
    for i in range(4):
        bob.forward(side)
        bob.left(90)

def row(n, side):
    for i in range(n):
        square(side)
        bob.forward(side)
    bob.penup()
    bob.left(180)
    bob.forward(n * side)
    bob.left(180)
    bob.pendown()

def row_of_rows(m, n, side):
    for i in range(m):
        row(n, side)
        bob.penup()
        bob.left(90)
        bob.forward(side)
        bob.right(90)
        bob.pendown()
    bob.penup()
    bob.right(90)
    bob.forward(m * side)
    bob.left(90)
    bob.pendown()

row_of_rows(4,5, 20)
import turtle
loadWindow = turtle.Screen()
turtle.speed(1)
turtle.colormode(255)
turtle.pensize(1)

STEP = 25
LENGTH = 1000
for i in range(0, LENGTH, STEP):
   turtle.penup()
   turtle.setpos(-LENGTH/2, LENGTH/2 - i)
   turtle.pendown()
   turtle.setpos(LENGTH/2, LENGTH/2 - i)
   turtle.penup()
   turtle.setpos(-LENGTH/2 + i, LENGTH/2)
   turtle.pendown()
   turtle.setpos(-LENGTH/2 + i, -LENGTH/2)

Thanks to @cdlane for suggesting integer division inside the range function.感谢@cdlane 建议在range函数内进行整数除法。

import turtle
size = 50
for x in range(-300//size, 300//size):
    for y in range(-300//size, 300//size):
        turtle.up()
        turtle.goto(x * size, y * size)
        turtle.down()
        for sides in range(4):
            turtle.forward(size)
            turtle.left(90)
turtle.update()
turtle.done()

I can see why some of the answers call hideturtle() at the beginning of the code, instead of at the end, as well as tracer(0) , as that is some of the most painful to watch drawing I've ever seen.我可以hideturtle()为什么一些答案在代码的开头而不是结尾调用hideturtle()以及tracer(0) ,因为这是我见过的最痛苦的观看绘图。 I feel part of the fun of turtle graphics is watching the turtles, so I offer my solution:我觉得海龟图形的部分乐趣在于观察海龟,所以我提供了我的解决方案:

from turtle import Turtle, Screen

UNIT_SIZE, GRID_SIZE = 50, 200

def half_grid(turtle):
    speed = turtle.speed()

    for brick in range(GRID_SIZE // UNIT_SIZE):
        direction = [turtle.right, turtle.left][brick % 2 == 1]
        for i in range(0, GRID_SIZE, speed):
            turtle.forward(speed)
            yield(0)
        direction(90)
        for i in range(0, UNIT_SIZE, speed):
            turtle.forward(speed)
            yield(0)
        direction(90)

    for i in range(0, GRID_SIZE, speed):
        turtle.forward(speed)
        yield(0)

mickey = Turtle(shape='turtle')
mickey.speed(5)
mickey.up()
mickey.goto(-GRID_SIZE//2, -GRID_SIZE//2)
mickey.down()
mickey.left(90)

donnie = Turtle(shape='turtle')
donnie.speed(5)
donnie.up()
donnie.goto(GRID_SIZE//2, -GRID_SIZE//2)
donnie.down()
donnie.left(180)

generator1, generator2 = half_grid(mickey), half_grid(donnie)

while (next(generator1, 1) + next(generator2, 1) < 2):
        pass

mickey.hideturtle()
donnie.hideturtle()

screen = Screen()
screen.exitonclick()

Admittedly, you have to choose UNIT_SIZE , GRID_SIZE , and turtle.speed() carefully for this to work properly.诚然,您必须仔细选择UNIT_SIZEGRID_SIZEturtle.speed()以使其正常工作。

Turtles at work:工作中的乌龟:

在此处输入图片说明

This is working :)这是有效的:)

import turtle

turtle.tracer(1)  # Turns off screen updates

grid = turtle.Turtle()
STEP = 20
LENGTH = 200
for i in range(0, LENGTH+STEP, STEP):
   grid.penup()
   grid.setpos(-LENGTH/2, (LENGTH/2 - i)) # go to start hoz line possition
   grid.pendown()
   grid.setpos(LENGTH/2, (LENGTH/2 - i)) # draw horizontal line

   grid.penup()
   grid.setpos((-LENGTH/2 + i), LENGTH/2) # go to start vertical line possition
   grid.pendown()
   grid.setpos((-LENGTH / 2 + i), -LENGTH / 2)


turtle.update() 
turtle.exitonclick()

If you want to display instantly, change this:如果要立即显示,请更改此:

turtle.tracer(1)  # Turns off screen updates

to this:对此:

turtle.tracer(0)  # Turns off screen updates

use two for loops to draw your grid使用两个 for 循环来绘制网格

for row in range(x, width_of_screen,width_of_grid_box):
    for column in range(y,height_of_screen,height_of_grid_box):
            square = pygame.draw.rect(surface, COLOR, (row, column, width_of_grid_box, height_of_grid_box),2)
            square_pos.append(square)

Result Image结果图片

import turtle as t

t.tracer(0, 0)
t.speed(0)

grid={
    'left':-500,
    'right':500,
    'top':-500,
    'bottom':500,
    'interval':10
    }

x_positions=range(grid['left'],grid['right'],grid['interval'])
y_positions=range(grid['top'],grid['bottom'],grid['interval'])

for x in x_positions:
    t.penup()
    t.setpos(x,grid['top'])
    t.pendown()
    t.setpos(x,grid['bottom'])

for y in y_positions:
    t.penup()
    t.setpos(grid['left'],y)
    t.pendown()
    t.setpos(grid['right'],y)


t.update()
import turtle


wn = turtle.Screen()
wn.title("title")
wn.bgcolor("white")
wn.setup(width=500, height=500)



grid = turtle.Turtle()
grid.speed(0)
grid.hideturtle()
grid.penup()
grid.goto(-240, 240)
grid.direction = "right"
grid.pendown()
grid.forward(480)
grid.right(90)
grid.forward(480)
grid.right(90)
grid.forward(480)
grid.right(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.left(180)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)
grid.right(90)
grid.forward(20)
grid.right(90)
grid.forward(480)
grid.left(90)
grid.forward(20)
grid.left(90)
grid.forward(480)

sorry, it's really long对不起,真的很长

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM