我应该用python画一个棋盘游戏。但是,一旦我输入要求输入开始位置、宽度和高度的输入,它就会在主要棋盘矩形之外绘制黑色矩形。8 x 8矩形的网格必须用交替的黑/白矩形正确绘制。我做错了什么?我的第一个模块是这个:
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
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()我不知道问题是什么,也不知道为什么它会在主要棋盘矩形之外绘制矩形。
发布于 2019-10-14 10:12:57
具体地说,我认为你的循环终止逻辑是不正确的;一般来说,我认为你把事情搞得太复杂了。而不是让drawAllRectanges()在两个不同的起点上做同一件事两次,我们可以让它做一次,但用不同的起点调用它两次(即下面新命名的drawRectangles() )。我对你的代码进行了修改:
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()函数是关于什么的?)
https://stackoverflow.com/questions/58367763
复制相似问题