首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巨蟒乌龟棋盘

巨蟒乌龟棋盘
EN

Stack Overflow用户
提问于 2019-10-14 05:03:41
回答 1查看 277关注 0票数 0

我应该用python画一个棋盘游戏。但是,一旦我输入要求输入开始位置、宽度和高度的输入,它就会在主要棋盘矩形之外绘制黑色矩形。8 x 8矩形的网格必须用交替的黑/白矩形正确绘制。我做错了什么?我的第一个模块是这个:

代码语言:javascript
复制
from chessboard import *

def main():
    startX, startY = eval(input("Enter at start position (x, y): "))
    width = input("Enter the width: ")
    height = input("Enter the height: ")
    spaceX = eval(width) / 8
    spaceY = eval(height) / 8

    def variables():
        global startX, startY, width, height, spaceX, spaceY, xLocation, yLocation

    if width == "" and height == "":
        drawChessboard(startX, startY)
    elif height == "":
        drawChessboard(startX, startY, width=eval(width))
    elif width == "":
        drawChessboard(startX, startY, height=eval(height))
    else:
        drawChessboard(startX, startY, eval(width), eval(height))
main()

这是我的第二个模块chessboard.py

代码语言:javascript
复制
import turtle

def drawRectangle(xLocation, yLocation, spaceX, spaceY):

    turtle.penup()
    turtle.goto(xLocation, yLocation)
    turtle.pendown()

    turtle.begin_fill()

    for _ in range(2):
        turtle.forward(spaceX)
        turtle.left(90)
        turtle.forward(spaceY)
        turtle.left(90)

    turtle.end_fill()

def drawAllRectangles(startX, startY, width, height):

    spaceX = width / 8
    spaceY = height / 8

    yLocation = startY

    while yLocation <= (height - 2 * spaceY): 
        xLocation = startX
        while xLocation <= (width - 2 * spaceX):
            drawRectangle(xLocation, yLocation, spaceX, spaceY)
            xLocation += 2 * spaceX
        yLocation += 2 * spaceY

    turtle.penup()
    turtle.goto(startX + spaceX, startY + spaceY)
    turtle.pendown()

    yLocation = startY + spaceY

    while yLocation <= (height - spaceY): 
        xLocation = startX + spaceX
        while xLocation <= (width - spaceX):
            drawRectangle(xLocation, yLocation, spaceX, spaceY)
            xLocation += 2 * spaceX
        yLocation += 2 * spaceY

def drawChessboard(startX, startY, width=250, height=250):


    turtle.penup()
    turtle.goto(startX, startY)
    turtle.pendown()

    for _ in range(2):
        turtle.forward(width)
        turtle.left(90)
        turtle.forward(height)
        turtle.left(90)

    drawAllRectangles(startX, startY, width, height)

def main():

    startX, startY = eval(input("Enter at start position (x, y): "))
    width = input("Enter the width: ")
    height = input("Enter the height: ")

    turtle.speed('fastest')

    if width == "" and height == "":
        drawChessboard(startX, startY)
    elif height == "":
        drawChessboard(startX, startY, width=int(width))
    elif width == "":
        drawChessboard(startX, startY, height=int(height))
    else:
        drawChessboard(startX, startY, int(width), int(height))

    turtle.done()

main()

我不知道问题是什么,也不知道为什么它会在主要棋盘矩形之外绘制矩形。

EN

回答 1

Stack Overflow用户

发布于 2019-10-14 10:12:57

具体地说,我认为你的循环终止逻辑是不正确的;一般来说,我认为你把事情搞得太复杂了。而不是让drawAllRectanges()在两个不同的起点上做同一件事两次,我们可以让它做一次,但用不同的起点调用它两次(即下面新命名的drawRectangles() )。我对你的代码进行了修改:

代码语言:javascript
复制
import turtle

def drawRectangle(xLocation, yLocation, spaceX, spaceY):

    turtle.goto(xLocation, yLocation)

    turtle.begin_fill()

    for _ in range(2):
        turtle.forward(spaceX)
        turtle.left(90)
        turtle.forward(spaceY)
        turtle.left(90)

    turtle.end_fill()

def drawRectangles(startX, startY, width, height):

    endX, endY = startX + width - 1, startY + height - 1

    spaceX, spaceY = width / 8, height / 8

    yLocation = startY

    while yLocation < endY:
        xLocation = startX

        while xLocation < endX:
            drawRectangle(xLocation, yLocation, spaceX, spaceY)
            xLocation += 2 * spaceX

        yLocation += 2 * spaceY

def drawChessboard(startX, startY, width=250, height=250):

    turtle.penup()
    turtle.goto(startX, startY)
    turtle.pendown()

    for _ in range(2):
        turtle.forward(width)
        turtle.left(90)
        turtle.forward(height)
        turtle.left(90)

    turtle.penup()

    drawRectangles(startX, startY, width, height)

    drawRectangles(startX + width / 8, startY + height / 8, width, height)

def main():
    startX, startY = eval(input("Enter at start position (x, y): "))
    width = input("Enter the width: ")
    height = input("Enter the height: ")

    turtle.speed('fastest')

    if width == "" and height == "":
        drawChessboard(startX, startY)
    elif height == "":
        drawChessboard(startX, startY, width=float(width))
    elif width == "":
        drawChessboard(startX, startY, height=float(height))
    else:
        drawChessboard(startX, startY, float(width), float(height))

    turtle.hideturtle()
    turtle.mainloop()

main()

仍然存在的主要问题是您对eval()的使用--寻找另一种方法!( variables()函数是关于什么的?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58367763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档