• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    学会用Python实现滑雪小游戏,再也不用去北海道啦

    一、效果图

    二、必要工具

    Python3.7

    pycharm2019

    再然后配置它的文件,设置游戏屏幕的大小,图片路径。

    代码如下

    '''配置文件'''
    import os
     
     
    '''FPS'''
    FPS = 40
    '''游戏屏幕大小'''
    SCREENSIZE = (640, 640)
    '''图片路径'''
    SKIER_IMAGE_PATHS = [
        os.path.join(os.getcwd(), 'resources/images/skier_forward.png'),
        os.path.join(os.getcwd(), 'resources/images/skier_right1.png'),
        os.path.join(os.getcwd(), 'resources/images/skier_right2.png'),
        os.path.join(os.getcwd(), 'resources/images/skier_left2.png'),
        os.path.join(os.getcwd(), 'resources/images/skier_left1.png'),
        os.path.join(os.getcwd(), 'resources/images/skier_fall.png')
    ]
    OBSTACLE_PATHS = {
        'tree': os.path.join(os.getcwd(), 'resources/images/tree.png'),
        'flag': os.path.join(os.getcwd(), 'resources/images/flag.png')
    }
    '''背景音乐路径'''
    BGMPATH = os.path.join(os.getcwd(), 'resources/music/bgm.mp3')
    '''字体路径'''
    FONTPATH = os.path.join(os.getcwd(), 'resources/font/FZSTK.TTF')
    

    三、全部源码

    '''滑雪者类'''
    class SkierClass(pygame.sprite.Sprite):
        def __init__(self):
            pygame.sprite.Sprite.__init__(self)
            # 滑雪者的朝向(-2到2)
            self.direction = 0
            self.imagepaths = cfg.SKIER_IMAGE_PATHS[:-1]
            self.image = pygame.image.load(self.imagepaths[self.direction])
            self.rect = self.image.get_rect()
            self.rect.center = [320, 100]
            self.speed = [self.direction, 6-abs(self.direction)*2]
        '''改变滑雪者的朝向. 负数为向左,正数为向右,0为向前'''
        def turn(self, num):
            self.direction += num
            self.direction = max(-2, self.direction)
            self.direction = min(2, self.direction)
            center = self.rect.center
            self.image = pygame.image.load(self.imagepaths[self.direction])
            self.rect = self.image.get_rect()
            self.rect.center = center
            self.speed = [self.direction, 6-abs(self.direction)*2]
            return self.speed
        '''移动滑雪者'''
        def move(self):
            self.rect.centerx += self.speed[0]
            self.rect.centerx = max(20, self.rect.centerx)
            self.rect.centerx = min(620, self.rect.centerx)
        '''设置为摔倒状态'''
        def setFall(self):
            self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])
        '''设置为站立状态'''
        def setForward(self):
            self.direction = 0
            self.image = pygame.image.load(self.imagepaths[self.direction])
     
     
    '''
    Function:
        障碍物类
    Input:
        img_path: 障碍物图片路径
        location: 障碍物位置
        attribute: 障碍物类别属性
    '''
    class ObstacleClass(pygame.sprite.Sprite):
        def __init__(self, img_path, location, attribute):
            pygame.sprite.Sprite.__init__(self)
            self.img_path = img_path
            self.image = pygame.image.load(self.img_path)
            self.location = location
            self.rect = self.image.get_rect()
            self.rect.center = self.location
            self.attribute = attribute
            self.passed = False
        '''移动'''
        def move(self, num):
            self.rect.centery = self.location[1] - num
     
     
    '''创建障碍物'''
    def createObstacles(s, e, num=10):
        obstacles = pygame.sprite.Group()
        locations = []
        for i in range(num):
            row = random.randint(s, e)
            col = random.randint(0, 9)
            location  = [col*64+20, row*64+20]
            if location not in locations:
                locations.append(location)
                attribute = random.choice(list(cfg.OBSTACLE_PATHS.keys()))
                img_path = cfg.OBSTACLE_PATHS[attribute]
                obstacle = ObstacleClass(img_path, location, attribute)
                obstacles.add(obstacle)
        return obstacles
     
     
    '''合并障碍物'''
    def AddObstacles(obstacles0, obstacles1):
        obstacles = pygame.sprite.Group()
        for obstacle in obstacles0:
            obstacles.add(obstacle)
        for obstacle in obstacles1:
            obstacles.add(obstacle)
        return obstacles
     
     
    '''显示游戏开始界面'''
    def ShowStartInterface(screen, screensize):
        screen.fill((255, 255, 255))
        tfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//5)
        cfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//20)
        title = tfont.render(u'滑雪游戏', True, (255, 0, 0))
        content = cfont.render(u'按任意键开始游戏', True, (0, 0, 255))
        trect = title.get_rect()
        trect.midtop = (screensize[0]/2, screensize[1]/5)
        crect = content.get_rect()
        crect.midtop = (screensize[0]/2, screensize[1]/2)
        screen.blit(title, trect)
        screen.blit(content, crect)
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == pygame.KEYDOWN:
                    return
            pygame.display.update()
     
     
    '''显示分数'''
    def showScore(screen, score, pos=(10, 10)):
        font = pygame.font.Font(cfg.FONTPATH, 30)
        score_text = font.render("Score: %s" % score, True, (0, 0, 0))
        screen.blit(score_text, pos)
     
     
    '''更新当前帧的游戏画面'''
    def updateFrame(screen, obstacles, skier, score):
        screen.fill((255, 255, 255))
        obstacles.draw(screen)
        screen.blit(skier.image, skier.rect)
        showScore(screen, score)
        pygame.display.update()
     
     
    '''主程序'''
    def main():
        # 游戏初始化
        pygame.init()
        pygame.mixer.init()
        pygame.mixer.music.load(cfg.BGMPATH)
        pygame.mixer.music.set_volume(0.4)
        pygame.mixer.music.play(-1)
        # 设置屏幕
        screen = pygame.display.set_mode(cfg.SCREENSIZE)
        pygame.display.set_caption('滑雪游戏 —— 九歌')
        # 游戏开始界面
        ShowStartInterface(screen, cfg.SCREENSIZE)
        # 实例化游戏精灵
        # --滑雪者
        skier = SkierClass()
        # --创建障碍物
        obstacles0 = createObstacles(20, 29)
        obstacles1 = createObstacles(10, 19)
        obstaclesflag = 0
        obstacles = AddObstacles(obstacles0, obstacles1)
        # 游戏clock
        clock = pygame.time.Clock()
        # 记录滑雪的距离
        distance = 0
        # 记录当前的分数
        score = 0
        # 记录当前的速度
        speed = [0, 6]
        # 游戏主循环
        while True:
            # --事件捕获
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT or event.key == pygame.K_a:
                        speed = skier.turn(-1)
                    elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:
                        speed = skier.turn(1)
            # --更新当前游戏帧的数据
            skier.move()
            distance += speed[1]
            if distance >= 640 and obstaclesflag == 0:
                obstaclesflag = 1
                obstacles0 = createObstacles(20, 29)
                obstacles = AddObstacles(obstacles0, obstacles1)
            if distance >= 1280 and obstaclesflag == 1:
                obstaclesflag = 0
                distance -= 1280
                for obstacle in obstacles0:
                    obstacle.location[1] = obstacle.location[1] - 1280
                obstacles1 = createObstacles(10, 19)
                obstacles = AddObstacles(obstacles0, obstacles1)
            for obstacle in obstacles:
                obstacle.move(distance)
            # --碰撞检测
            hitted_obstacles = pygame.sprite.spritecollide(skier, obstacles, False)
            if hitted_obstacles:
                if hitted_obstacles[0].attribute == "tree" and not hitted_obstacles[0].passed:
                    score -= 50
                    skier.setFall()
                    updateFrame(screen, obstacles, skier, score)
                    pygame.time.delay(1000)
                    skier.setForward()
                    speed = [0, 6]
                    hitted_obstacles[0].passed = True
                elif hitted_obstacles[0].attribute == "flag" and not hitted_obstacles[0].passed:
                    score += 10
                    obstacles.remove(hitted_obstacles[0])
            # --更新屏幕
            updateFrame(screen, obstacles, skier, score)
            clock.tick(cfg.FPS)
    

    到此这篇关于学会用Python实现滑雪小游戏,再也不用去北海道啦的文章就介绍到这了,更多相关Python滑雪小游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python实现滑雪游戏
    • python实现滑雪者小游戏
    • Python实现滑雪小游戏
    上一篇:pytorch 带batch的tensor类型图像显示操作
    下一篇:python 提取html文本的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    学会用Python实现滑雪小游戏,再也不用去北海道啦 学,会用,Python,实现,滑雪,