我是stackoverflow新手,但希望能从更高级的程序员那里获得一些见解。下学期我将转学计算机科学专业,并参加一个入门课程,学习一些初级Python编程。我已经完成了下面的程序(任务是通过填充教授的一些代码来制作一个在窗口表面绘制椭圆的程序,一点也不差),但我想补充一些额外的东西:如你所见,我将椭圆的颜色设置为随机的,但它保持不变,直到程序完全重新启动,也就是说,所有的椭圆都是程序长度的特定颜色。代码是这样写的,我想不出一种方法来改变每个椭圆的颜色。请记住,这一切都是为了好玩,但如果有人觉得特别有帮助或创造力,我很想看看你要说些什么。如果我能详细说明什么,请告诉我。谢谢!在
import pygame, random, sys
WINDOWWIDTH = 700
WINDOWHEIGHT = 700
BACKGROUNDCOLOR = (150,160,100)
#A different color every run
OVAL_COLOR = (random.randint (0,255),random.randint (0,255),
random.randint (0,255))
pygame.init()
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption("Mobile Ovals")
#The draw variable is used later to indicate the mouse is still pressed
ovals = []
completedOvals = []
finished = False
draw = False
startXY = (-1, -1)
while not finished:
for event in pygame.event.get():
if event.type == pygame.QUIT or (event.type == pygame.KEYUP and
event.key == pygame.K_ESCAPE):
finished = True
elif event.type == pygame.KEYDOWN:
pressed = pygame.key.get_pressed()
if pressed[pygame.K_F4] and (pressed[pygame.K_LALT] or
pressed[pygame.K_RALT]):
finished = True
elif event.type == pygame.MOUSEBUTTONDOWN:
startXY = event.pos
draw = True
elif event.type == pygame.MOUSEBUTTONUP:
draw = False
for oval in ovals:
completedOvals.append (oval)
if draw == True:
del ovals [:]
#The above function ensures only one oval is onscreen at any given time
endXY = event.pos
width = (abs(endXY[0]-startXY[0]))
height = (abs(endXY[1]-startXY[1]))
#The code below allows the user to drag any direction
if endXY[0] < startXY[0]:
left = endXY[0]
else:
left = startXY[0]
if endXY[1] < startXY[1]:
top = endXY[1]
else:
top = startXY[1]
ovals.append (pygame.Rect (left, top, width, height))
windowSurface.fill(BACKGROUNDCOLOR)
for oval in ovals:
pygame.draw.ellipse(windowSurface, OVAL_COLOR, oval)
for completedOval in completedOvals:
pygame.draw.ellipse(windowSurface, OVAL_COLOR, completedOval)
pygame.display.update()
pygame.quit()
创建一个简单的
Oval()
类,它包含它的颜色和大小。在我大部分时间都漏掉了你未完成的椭圆。那是不是在点击前显示尺寸?在
你的问题很简单。设置
OVAL_COLOR
一次。但是每次引用变量OVAL_COLOR
,您并不是在创建一个新的随机颜色,而是在使用创建变量时随机生成的RGB颜色。在现在,按照程序的结构方式,每次
draw
变量设置为true时,都要维护一个绘制的所有完整椭圆的列表。如果您将OVAL_COLOR
变量放在for循环中,您将随着鼠标的每次移动而更新颜色,从而更改正在绘制的椭圆的颜色,以及重新绘制的所有旧椭圆的颜色。在一个新的随机椭圆颜色的解决方案是在鼠标按下时设置变量
OVAL_COLOR
。这样,当你拖动鼠标来调整椭圆时,椭圆的颜色就不会改变。但是,考虑到程序的当前结构,您需要保存分配给已完成椭圆的椭圆颜色,否则每次仍会更改椭圆颜色。在当按下鼠标按钮时,我们需要一个新的随机颜色为我们的圆圈。生成一个随机值,该值将在每次重新绘制圆时使用。在
松开鼠标按钮后,保存椭圆的坐标,以及用绘制的颜色。在
^{pr2}$当我们迭代这些完成的椭圆时,每次都用相同的颜色绘制它们。在
相关问题 更多 >
编程相关推荐