学python第二十一弹 编写一个简单的小游戏

学python第二十一弹 编写一个简单的小游戏

Skier🐱‍🚀 (滑雪的人)一款 简单的滑雪游戏,这个游戏中,你需要滑下小山,努力避开树🎄🌴🌱🌲和尽量捡起小旗🏳‍🌈🚩🏳🏴🏴‍☠️,捡起一个小旗🚩得 10分,撞到树🌴则丢 100分。
Skier 使用一个名字叫做 Pygame 的模块来帮助实现图形。 Pygame 是一个 python 模块(module)。我们先进入 cmd 中安装。window+r 输入 cmd
在这里插入图片描述
在这里插入图片描述
输入

pip install pygame

在这里插入图片描述
在这里插入图片描述

可以在网盘 链接:https://pan.baidu.com/s/1c0n2cVHTJQTjc7SZYwYC_w 密码:5otk 中免费下载。要把它们放在保存程序的同一个文件夹或目录中。如果它们与程序不在同一个目录中,Python就无法找到这些文件,这个程序就无法正常工作。

# -*- coding: utf-8 -*-
"""
Created on Tue Jun  1 14:07:06 2021

@author: 耿小建
"""

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.location=location

        self.rect=self.image.get_rect()

        self.rect.center=location

        self.type=type

        self.passed=False


    def scroll(self,t_ptr):

        self.rect.centery=self.location[1]-t_ptr


def create_map(start,end):

        obstacles=pygame.sprite.Group ()

        gates=pygame.sprite.Group ()

        locations=[]

        for i in range(10):

            row=random.randint(start,end)

            col=random.randint(0,9)

            location=[col*64+20,row*64+20]

            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)

        return obstacles

def animate():
        

        screen.fill([255,255,255])

        pygame.display.update(obstacles.draw(screen))

        screen.blit(skier.image,skier.rect)

        screen.blit(score_text,[10,10])

        pygame.display.flip()
def updateObstacleGroup(map0,map1):

        obstacles=pygame.sprite .Group()

        for ob in map0:obstacles.add(ob)

        for ob in map1:obstacles.add(ob)

        return obstacles
pygame.init()

screen=pygame.display.set_mode([640,640])

clock=pygame.time.Clock()

skier=SkierClass()

speed=[0,6]

map_position=0

points=0

map0=create_map(20,29)

map1=create_map(10,19)

activeMap=0

obstacles=updateObstacleGroup(map0,map1)

font=pygame.font.Font(None,50)


while True:

    clock.tick(30)

    for event in pygame.event.get():

        if event.type==pygame.QUIT:sys.exit()

        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 and activeMap==0:

        activeMap==1

        map0=create_map(20,29)

        obstacles=updateObstacleGroup(map0,map1)

    if map_position>=1280 and activeMap==1:

        activeMap=0

        for ob in map:

            ob.location[1]=ob.location[1]-1280

        map_position=map_position-1280

        map1=create_map(10,19)

        obstacles=updateObstacleGroup(map0,map1)


    for obstacle in obstacles:

        obstacle.scroll(map_position)

        hit = pygame.sprite.spritecollide(skier,obstacles,False)

        if hit:

            if hit[0].type=="type" 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

                obstacles.remove(hit[0])



        score_text=font.render('Score: '+str(points),1,(0,0,0))

        animate()

            
        

如果有错误大家上网。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布鲁斯#李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值