如何使用此代码在pygame中制作圣诞树?

2024-03-28 14:19:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在皮加梅做一棵圣诞树,但我想不通。你知道吗

窗户打开了,但又立刻关上了。你知道吗

import pygame

BLACK = ( 0, 0, 0)
WHITE = ( 255, 255, 255)
GREEN = ( 0, 255, 0)
RED = ( 255, 0, 0)
GREEN = ( 0, 0, 255)
BROWN = ( 160, 82, 45)

pygame.init()

size = (700, 500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame window")
done = True
clock = pygame.time.Clock()

while not done:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      done = True
  screen.fill(WHITE)  
  # Code here 
  pygame.draw.rect(screen, BROWN, (350 - 10, 250, 10, 250))
  pygame.draw.lines(screen, GREEN, TRUE, (100,100), (150,200), 1)

  pygame.display.flip()

  clock.tick(60)

pygame.quit()

Tags: eventtruesizedisplaygreenscreenpygame窗户
1条回答
网友
1楼 · 发布于 2024-03-28 14:19:56

代码有一些基本的语法错误。你知道吗

主代码是循环while not done,但是done最初是从True开始的,所以它不做任何事情就存在了。你知道吗

在python中,逻辑(布尔)值是True而不是TRUE。(我真希望它是true我自己)显然它的对应物是False。你知道吗

另一个重要的问题是pygame.draw.lines()函数采用坐标列表。你知道吗

噢,代码将GREEN重新定义为蓝色,我想这应该是BLUE。你知道吗

我将主干的矩形和树的点列表从主循环移到常量中。这样就可以分别更改它们,而不必将主循环与大量的点列表混淆。你知道吗

import pygame

BLACK = ( 0, 0, 0)
WHITE = ( 255, 255, 255)
GREEN = ( 0, 255, 0)
RED   = ( 255, 0, 0)
BLUE  = ( 0, 0, 255)        # <  Not 'GREEN' again
BROWN = ( 160, 82, 45)

TRUNK_RECT  = [ 350-10, 250, 10, 250 ]      # Rectangle x,y,width,height
TREE_POINTS = [ (100,100), (150,200) ]      # list of points for tree polygon

pygame.init()
size = (700, 500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Pygame window")
done = False                                    # <  Was True
clock = pygame.time.Clock()

while not done:
    # Handle Events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    # Code here 
    screen.fill(WHITE)
    #pygame.draw.rect(screen, BROWN, (350 - 10, 250, 10, 250) )
    pygame.draw.rect( screen, BROWN, TRUNK_RECT )
    #pygame.draw.lines(screen, GREEN, True, [ (100,100), (150,200)], 1)   # <  Needs a list of points
    pygame.draw.lines(screen, GREEN, True, TREE_POINTS, 1)

    pygame.display.flip()

    clock.tick(60)

pygame.quit()

显然你需要为这棵树计算出更多的坐标。你知道吗

绘制按比例缩放以适合窗口的树是一种更好(但更复杂)的方法。将窗口维度放入常量中(例如:WINDOW_WIDTH&;WINDOW_HEIGHT),并按这些值的百分比绘制。例如,主干现在可能是:

TRUNK_WIDTH  = WINDOW_WIDTH // 20                  # 5% of screen width
TRUNK_HEIGHT = WINDOW_HEIGHT // 4                  # 25% of screen height
TRUNK_RECT   = [ WINDOW_WIDTH//2-TRUNK_WIDTH//2,   # x-pos = Middle of the window
                 WINDOW_HEIGHT-TRUNK_HEIGHT,       # y-pos = Trunk at Bottom 
                 TRUNK_WIDTH, TRUNK_HEIGHT ]

相关问题 更多 >