学习总结-《父与子的编程之旅》chapter 10

根据书中的代码自己敲上去的,顺便把图片也附上。后面的章节会有对这个代码的解释,到时再来细说。

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_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()

滑雪的动作
直行
小旗子
左1
左2
右1
右2
树

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值