Arcs没有响应关键功能?

时间:2014-01-29 19:16:44

标签: python pygame

我正在阅读有关如何编程python的教程。其中有一款名为“馅饼游戏”的游戏。游戏是屏幕上弹出这4个数字的地方,你按相应的数字弹出弧线。按下所有数字后,所有弧线都会从圆圈中弹出,圆圈变为绿色。我按照书中的说法输入了代码。我跑了,弹出了四个数字,但是当我按下相应的数字时没有任何反应。 继承人代码:

import math
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((600,500))
pygame.display.set_caption("The Pie Game")
pygame.display.set_caption("The Pie Game - Press 1,2,3,4")
myfont = pygame.font.Font(None, 60)

color = 200, 80, 60
width = 4
x = 300
y = 250
radius = 200
poisition = x-radius, y-radius, radius*2, radius*2

piece1 = False
piece2 = False
piece3 = False
piece4 = False

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        elif event.type == KEYUP:
            if event.key == pygame.K_ESCAPE:
                sys.exit()
            elif event.key == pygame.K_1:
                piece1 = True
            elif event.key == pygame.K_2:
                piece2 = True
            elif event.key == pygame.K_3:
                piece3 = True
            elif event.key == pygame.K_4:
                piece4 = True
    #clear the screen
    screen.fill((0,0,200))

    #draw the four numbers
    textImg1 = myfont.render("1", True, color)
    screen.blit(textImg1, (x+radius/2-20, y-radius/2))
    textImg2 = myfont.render("2", True, color)
    screen.blit(textImg2, (x-radius/2, y-radius/2))
    textImg3 = myfont.render("2", True, color)
    screen.blit(textImg3, (x-radius/2, y+radius/2-20))
    textImg4 = myfont.render("4", True, color)
    screen.blit(textImg4, (x+radius/2-20, y+radius/2-20))

    #should the pieces be drawn?
    if piece1:
        start_angle = math.radians(0)
        end_angle = math.radians(90)
        pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
        pygame.draw.line(screen, color, (x,y), (x,y-radius), width)
        pygame.draw.line(screen, color, (x,y), (x+radius,y), width)
    if piece2:
        start_angle = math.radians(90)
        end_angle = math.radians(180)
        pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
        pygame.draw.line(screen, color, (x,y), (x,y-radius), width)
        pygame.draw.line(screen, color, (x,y), (x+radius,y), width)
    if piece3:
        start_angle = math.radians(180)
        end_angle = math.radians(270)
        pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
        pygame.draw.line(screen, color, (x,y), (x,y-radius), width)
        pygame.draw.line(screen, color, (x,y), (x+radius,y), width)
    if piece4:
        start_angle = math.radians(270)
        end_angle = math.radians(360)
        pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
        pygame.draw.line(screen, color, (x,y), (x,y-radius), width)
        pygame.draw.line(screen, color, (x,y), (x+radius,y), width)

    #is the pie finished
    if piece1 and piece2 and piece3 and piece4:
        color = 0,255,0

    pygame.display.update()

这就是我遇到的问题:

    if piece1:
        start_angle = math.radians(0)
        end_angle = math.radians(90)
        pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
        pygame.draw.line(screen, color, (x,y), (x,y-radius), width)
        pygame.draw.line(screen, color, (x,y), (x+radius,y), width)

但通常所有的“if piece1,2,3,4部分因为我复制它们并稍作改动以节省时间。我试着去书籍网站寻找答案,但它没有答案。我我想知道当按下相应的数字时如何弹出圆弧。 任何帮助都可以! 谢谢!

1 个答案:

答案 0 :(得分:1)

当出现问题时,您应该查看回溯。运行代码后,我收到以下错误:

Traceback (most recent call last):
  File "C:\test.py", line 54, in <module>
    pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
NameError: name 'position' is not defined

在寻找位置的定义之后,我注意到你犯了错字。

poisition = x-radius, y-radius, radius*2, radius*2

将此问题解决到位,解决了问题。

还有一件事,你忘了导入sys模块。您可以将其用于sys.exit()