【问题标题】:PyGame - Rendering shapesPyGame - 渲染形状
【发布时间】:2014-07-16 17:41:09
【问题描述】:

我正在编写一个名为 pie game 的游戏,该游戏来自一本名为“更多 Python 编程供绝对初学者”的书,但形状不呈现并且出现黑屏。

我希望它显示 4 个数字,当您按下键盘上的 1、2、3 和 4 键时,会出现馅饼片/比萨饼/圆形面包/任何东西(1 条弧线和 2 条线)。

我看不出代码有问题。

# The PieGame
#
# The last game for C02. Press keys 1, 2, 3 and 4 and the
# pie pieces will change colour! :)
#
# The PieGame was programmed in PyGame
#
# Copyright by wait, who cares, this is just a really boring game
#
# -----------------------------------------------------------------

import pygame, sys, math, random
from pygame.locals import *

# +---+ SETUP +---+

pygame.init()

SURFACE = pygame.display.set_mode((600, 500))
pygame.display.set_caption("The PieGame - Press keys 1, 2, 3, 4")

FONT = pygame.font.Font(None, 60)

# +---+ SETUP 2 +---+

BLACK  = 0, 0, 0
SILVER = 200, 200, 200

RED    = 220, 0, 0
YELLOW = 0, 220, 220
GREEN  = 0, 220, 0
BLUE   = 0, 0, 220
PINK   = 220, 220, 0

COLOUR = SILVER

WIDTH = 4
X = 300
Y = 250
RADIUS = 200
POSITION = X-RADIUS, Y-RADIUS, RADIUS*2, RADIUS*2

piece1 = False # state based programming
piece2 = False
piece3 = False
piece4 = False

# +---+ LOOP +---+

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        elif event.type == KEYUP:
            if event.key == K_ESCAPE:
                sys.exit()

            elif event.key == pygame.K_1:
                piece1 = True
            elif event.key == pygame.K_2:
                piece1 = True
            elif event.key == pygame.K_3:
                piece1 = True
            elif event.key == pygame.K_4:
                piece1 = True

    pygame.display.update()

# +---+ MAIN CODE +---+

SURFACE.fill(BLACK)

# draw numbers inside pie slices
TEXT1 = FONT.render("1", True, COLOUR)
screen.blit(TEXT1, (X+RADIUS/2-20, Y-RADIUS/2))

TEXT2 = FONT.render("2", True, COLOUR)
screen.blit(TEXT2, (X+RADIUS/2, Y-RADIUS/2))

TEXT3 = FONT.render("3", True, COLOUR)
screen.blit(TEXT3, (X+RADIUS/2, Y-RADIUS/2-20))

TEXT4 = FONT.render("1", True, COLOUR)
screen.blit(TEXT4, (X+RADIUS/2-20, Y-RADIUS/2-20))

# if piece state flag is true, draw the piece
if piece1:
    start_angle = math.radians(0)
    end_angle = math.radians(90)
    pygame.draw.arc(SURFACE, COLOUR, POSITION, start_angle, end_angle, WIDTH)
    pygame.draw.line(SURFACE, COLOUR, (X, Y), (X,Y-RADIUS), width)
    pygame.draw.line(SURFACE, COLOUR, (X, Y), (X+RADIUS,Y), width)

if piece2:
    start_angle = math.radians(90)
    end_angle = math.radians(180)
    pygame.draw.arc(SURFACE, COLOUR, POSITION, start_angle, end_angle, WIDTH)
    pygame.draw.line(SURFACE, COLOUR, (X, Y), (X,Y-RADIUS), width)
    pygame.draw.line(SURFACE, COLOUR, (X, Y), (X-RADIUS,Y), width)

if piece3:
    start_angle = math.radians(180)
    end_angle = math.radians(270)
    pygame.draw.arc(SURFACE, COLOUR, POSITION, start_angle, end_angle, WIDTH)
    pygame.draw.line(SURFACE, COLOUR, (X, Y), (X-RADIUS,Y), width)
    pygame.draw.line(SURFACE, COLOUR, (X, Y), (X,Y+RADIUS), width)

if piece4:
    start_angle = math.radians(270)
    end_angle = math.radians(360)
    pygame.draw.arc(SURFACE, COLOUR, POSITION, start_angle, end_angle, WIDTH)
    pygame.draw.line(SURFACE, COLOUR, (X, Y), (X,Y+RADIUS), width)
    pygame.draw.line(SURFACE, COLOUR, (X, Y), (X+RADIUS,Y), width)

# detect if the pie is finished
if piece1 and piece2 and piece3 and piece4:
    new_colour = random.randint(1,5)
    if new_colour == 1:
        COLOUR = RED
    elif new_colour == 2:
        COLOUR = YELLOW
    elif new_colour == 3:
        COLOUR = GREEN
    elif new_colour == 4:
        COLOUR = BLUE
    elif new_colour == 5:
        COLOUR = PURPLE

pygame.display.update()

【问题讨论】:

  • 在检测到键状态发生变化后,循环不会调用主代码,因此永远不会绘制形状 - 你确定缩进是正确的吗?
  • # MAIN CODE 行添加缩进(如 gkusner 所说)到最后一行。

标签: python pygame rendering shapes


【解决方案1】:

首先,按键没有效果的原因是绘制弧线的代码不在主循环中。它必须缩进一个制表符空格;但是,这会导致两个:

pygame.display.update() 

函数调用。您必须删除第一个,因为它应该在主循环的末尾找到。

其次,您没有一个名为 screen 的表面来blit 上的文本。在这里您必须使用 SURAFCE 变量。

这些编辑使程序运行,但它可能没有您想要的功能。以下是有效更新代码的链接:http://pastebin.com/GFfP2hX4

【讨论】:

  • 为什么绘制的数字非常接近?馅饼也画在相同的位置:|
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多