找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4582|回复: 3

自己学习《与孩子一起学编程》,skier游戏报错

1

主题

3

帖子

3

积分

贫民

积分
3
minicrazyguo 发表于 2017-3-13 17:00:02 | 显示全部楼层 |阅读模式

import pygame,sys,random
skier_images = ['skier_down.png','skier_crash.png','skier_right1.png','skier_right2.png','skier_left1.png','skier_left2.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(locations 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)
            siker.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))
pygame.quit()
               
以上是输入的程序,运行显示gui,但是没有响应。
错误显示如下:Traceback (most recent call last):
  File "C:/Python27/真正的游戏开始了", line 66, in <module>
    skier = SkierClass()
  File "C:/Python27/真正的游戏开始了", line 8, in __init__
    self.rect.center [320,100]
TypeError: tuple indices must be integers, not tuple
回复

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
minicrazyguo  楼主| 发表于 2017-3-13 17:02:21 | 显示全部楼层
哪位大侠指点一下,不胜感激!
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
minicrazyguo  楼主| 发表于 2017-3-15 14:50:08 | 显示全部楼层
解决了,第八行缺了一个等号,第一百零一行拼错一个单词。游戏已经开始,只是找不到原版中的png图片,我自己找的图片,按照程序要求命名的。图片有些大,玩不了,正准备修改图片了。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分

贫民

积分
1
精神斌 发表于 2017-3-19 13:10:15 | 显示全部楼层
楼主是用的py2吗,我现在也在按照这本书自学,可是版本语法不一样,反复出错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表