Python中的Pygame没有响应?

Python中的Pygame没有响应?,python,pygame,Python,Pygame,我是Python新手,我输入了我购买的书中的代码来了解Python。我正在尝试使基本滑雪者成为pygame,每次我运行模块时,pygame窗口会弹出黑色,然后显示“无响应” 我使用的是Windows8、Python2.5.7,下面是代码。任何帮助都将不胜感激 import pygame, sys, random skier_images = ["skier_down.png", "skier_right1.png", "skier_right2.png", "skier_left2.png",

我是Python新手,我输入了我购买的书中的代码来了解Python。我正在尝试使基本滑雪者成为pygame,每次我运行模块时,pygame窗口会弹出黑色,然后显示“无响应” 我使用的是Windows8、Python2.5.7,下面是代码。任何帮助都将不胜感激

import pygame, sys, random

skier_images = ["skier_down.png", "skier_right1.png", "skier_right2.png", "skier_left2.png", "skier_left1.png"]

class SkierClass(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("skier_down.png")
        self.rect = self.image.get_rect()
        self.rect.center = [320, 100]
        self.angle = 0

    def turn(self, direction):
        self.angle = self.angle + direction
        if self.angle < -2:  self.angle = -2
        if self.angle >  2:  self.angle =  2
        center = self.rect.center
        self.image = pygame.image.load(skier_images[self.angle])
        self.rect = self.image.get_rect()
        self.rect.center = center
        speed = [self.angle, 6 - abs(self.angle) * 2]
        return speed

    def move(self, speed):
        self.rect.centerx = self.rect.centerx + speed[0]
        if self.rect.centerx < 20:  self.rect.centerx = 20
        if self.rect.centerx > 620: self.rect.centerx = 620

class ObstacleClass(pygame.sprite.Sprite):
    def __init__(self, image_file, location, type):
        pygame.sprite.Sprite__init__(self)
        self.image_file = image_file
        self.image = pygame.image.load(image_file)
        self.rect = self.image.get_rect()
        self.rect.center = location
        self.type = type
        self.passed = False
    def update(self):
        global speed
        self.rect.centery -= speed[1]
        if self.rect.centery < -32:
            self.kill()

def create_map():
    global obstacles
    locations = []
    for i in range(10):
        row = random.randint(0, 9)
        col = random.randint(0, 9)
        location  = [col * 64 + 20, row * 64 + 20 + 640]
        if not (location in locations):
            locations.append(location)
            type = random.choice(["tree", "flag"])
            if type == "tree": img = "skier_tree.png"
            elif type == "flag": img = "skier_flag.png"
            obstacle = ObstacleClass(img, location, type)
            obstacles.add(obstacle)

def animate():
    screen.fill([255, 255, 255])
    obstacles.draw(screen)
    screen.blit(skier.image, skier.rect)
    screen.blit(score_text, [10, 10])
    pygame.display.flip()

pygame.init()
screen = pygame.display.set_mode([640, 640])
clock = pygame.time.Clock()
skier = SkierClass()
speed = [0, 6]
obstacles = pygame.sprite.Group()
map_position = 0
points = 0
create_map()
font = pygame.font.Font(None, 50)

running = True
while running:
    clock.tick(30)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed = skier.turn(-1)
            elif event.key == pygame.K_RIGHT:
                speed = skier.turn(1)
    skier.move(speed)

    map_position += speed[1]

    if map_position >=640:
        create_map()
        map_position = 0

    hit = pygame.sprite.spritecollide(skier, obstacles, False)
    if hit:
        if hit[0].type == "tree" and not hit[0].passed:
            points = points - 100
            skier.image = pygame.image.load("skier_crash.png")
            animate()
            pygame.time.delay(1000)
            skier.image = pygame.image.load("skier_down.png")
            skier.angle = 0
            speed = [0, 6]
            hit[0].passed = True
        elif hit[0].type == "flag" and not hit[0].passed:
            points += 10
            hit[0].kill()

    obstacles.update()
    score_text = font.render("Score: " +str(points), 1, (0, 0, 0))
    animate()
pygame.quit()
import pygame,sys,random
skier_images=[“skier_down.png”、“skier_right1.png”、“skier_right2.png”、“skier_left2.png”、“skier_left1.png”]
类SkierClass(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“skier\u down.png”)
self.rect=self.image.get_rect()
self.rect.center=[320100]
自转角=0
def转向(自转向):
自转角=自转角+方向
如果self.angle<-2:self.angle=-2
如果self.angle>2:self.angle=2
中心=self.rect.center
self.image=pygame.image.load(滑雪者图片[self.angle])
self.rect=self.image.get_rect()
self.rect.center=中心
速度=[自转角,6-abs(自转角)*2]
回程速度
def移动(自身、速度):
self.rect.centerx=self.rect.centerx+速度[0]
如果self.rect.centerx<20:self.rect.centerx=20
如果self.rect.centerx>620:self.rect.centerx=620
类障碍类(pygame.sprite.sprite):
def uuu init uuu(self,image_文件,位置,类型):
pygame.sprite.sprite____;init____;(self)
self.image\u文件=image\u文件
self.image=pygame.image.load(图像文件)
self.rect=self.image.get_rect()
self.rect.center=位置
self.type=type
self.passed=False
def更新(自我):
全球速度
self.rect.centery-=速度[1]
如果self.rect.centery<-32:
self.kill()
def create_map():
全球障碍
地点=[]
对于范围(10)内的i:
row=random.randint(0,9)
col=random.randint(0,9)
位置=[列*64+20,行*64+20+640]
如果不是(位置中的位置):
位置。追加(位置)
type=random.choice([“树”,“标志])
如果type==“tree”:img=“skier\u tree.png”
elif type==“flag”:img=“skier\u flag.png”
障碍物=障碍物类别(img、位置、类型)
障碍。添加(障碍)
def animate():
屏幕填充([255,255,255])
障碍物。绘制(屏幕)
screen.blit(skier.image,skier.rect)
blit(分数文本,[10,10])
pygame.display.flip()
pygame.init()
screen=pygame.display.set_模式([640640640])
clock=pygame.time.clock()
滑雪者=滑雪者等级()
速度=[0,6]
障碍=pygame.sprite.Group()
地图位置=0
分数=0
创建地图()
font=pygame.font.font(无,50)
运行=真
运行时:
时钟滴答(30)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
速度=滑雪者。转弯(-1)
elif event.key==pygame.K_RIGHT:
速度=滑雪者。转弯(1)
滑雪者。移动(速度)
地图位置+=速度[1]
如果地图位置>=640:
创建地图()
地图位置=0
hit=pygame.sprite.spritecollide(滑雪者、障碍物、错误)
如果击中:
如果命中[0]。类型==“树”而未命中[0]。传递:
点数=点数-100
skier.image=pygame.image.load(“skier\u crash.png”)
制作动画()
pygame.时间延迟(1000)
skier.image=pygame.image.load(“skier\u down.png”)
滑雪者角度=0
速度=[0,6]
命中[0]。已通过=真
elif命中[0]。类型==“标志”且未命中[0]。已传递:
积分+=10
命中[0]。杀死()
更新(
score_text=font.render(“分数:+str(点),1,(0,0,0))
制作动画()
pygame.quit()

我下载了代码,运行了它,添加了随机图像,这样它就不会抛出错误,问题似乎在这里:
pygame.sprite.sprite\uuuu init\uuuu(self)
第31行 您错过了
Sprite
\uuuuu init\uuuuuu
之间的点 所以这条线应该是这样的:

pygame.sprite.Sprite.__init__(self) #added dot

不一定是一个解决方案,但尝试升级到Python 2.7。我会的,但书中告诉我只使用他们的版本:(实际上,并非Python版本之间的所有内容都会发生变化,所以在pyton 2.7中有一些小东西可以这样打印:
print“something”
在3.4.3中是这样的:
print(“something”)
您可以很容易地找到这些东西并修复它们,这样您就可以使用2.5.7版的书并用python 3.4.3编写代码(您可以查看在线python库dor 2.5.7和3.4.3,了解打印和其他一切工作方式的不同)您是一个天才!谢谢!)