zoukankan      html  css  js  c++  java
  • Python小恐龙快跑小游戏源代码及素材

    该游戏是仿谷歌浏览器小恐龙游戏,程序运行入口Game7.py,配置文件:cfg.py,完整程序包及资源包请在本文文末下载,先上程序运行截图:

    Game7.py
    '''
    Function:
      仿谷歌浏览器小恐龙游戏
    微信公众号:
      学创英才
    '''
    import cfg
    import sys
    import random
    import pygame
    from modules.sprites.scene import *
    from modules.sprites.obstacle import *
    from modules.sprites.dinosaur import *
    from modules.interfaces.gameend import GameEndInterface
    from modules.interfaces.gamestart import GameStartInterface
    
    
    '''main'''
    def main(highest_score):
      # 游戏初始化
      pygame.init()
      screen = pygame.display.set_mode(cfg.SCREENSIZE)
      pygame.display.set_caption('小恐龙快跑-学创英才')
      # 导入所有声音文件
      sounds = {}
      for key, value in cfg.AUDIO_PATHS.items():
        sounds[key] = pygame.mixer.Sound(value)
      # 游戏开始界面
      GameStartInterface(screen, sounds, cfg)
      # 定义一些游戏中必要的元素和变量
      score = 0
      score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(534, 15), bg_color=cfg.BACKGROUND_COLOR)
      highest_score = highest_score
      highest_score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(435, 15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True)
      dino = Dinosaur(cfg.IMAGE_PATHS['dino'])
      ground = Ground(cfg.IMAGE_PATHS['ground'], position=(0, cfg.SCREENSIZE[1]))
      cloud_sprites_group = pygame.sprite.Group()
      cactus_sprites_group = pygame.sprite.Group()
      ptera_sprites_group = pygame.sprite.Group()
      add_obstacle_timer = 0
      score_timer = 0
      # 游戏主循环
      clock = pygame.time.Clock()
      while True:
        for event in pygame.event.get():
          if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
          elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
              dino.jump(sounds)
            elif event.key == pygame.K_DOWN:
              dino.duck()
          elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:
            dino.unduck()
        screen.fill(cfg.BACKGROUND_COLOR)
        # --随机添加云
        if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10:
          cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75))))
        # --随机添加仙人掌/飞龙
        add_obstacle_timer += 1
        if add_obstacle_timer > random.randrange(50, 150):
          add_obstacle_timer = 0
          random_value = random.randrange(0, 10)
          if random_value >= 5 and random_value <= 7:
            cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))
          else:
            position_ys = [cfg.SCREENSIZE[1]*0.82, cfg.SCREENSIZE[1]*0.75, cfg.SCREENSIZE[1]*0.60, cfg.SCREENSIZE[1]*0.20]
            ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys))))
        # --更新游戏元素
        dino.update()
        ground.update()
        cloud_sprites_group.update()
        cactus_sprites_group.update()
        ptera_sprites_group.update()
        score_timer += 1
        if score_timer > (cfg.FPS//12):
          score_timer = 0
          score += 1
          score = min(score, 99999)
          if score > highest_score:
            highest_score = score
          if score % 100 == 0:
            sounds['point'].play()
          if score % 1000 == 0:
            ground.speed -= 1
            for item in cloud_sprites_group:
              item.speed -= 1
            for item in cactus_sprites_group:
              item.speed -= 1
            for item in ptera_sprites_group:
              item.speed -= 1
        # --碰撞检测
        for item in cactus_sprites_group:
          if pygame.sprite.collide_mask(dino, item):
            dino.die(sounds)
        for item in ptera_sprites_group:
          if pygame.sprite.collide_mask(dino, item):
            dino.die(sounds)
        # --将游戏元素画到屏幕上
        dino.draw(screen)
        ground.draw(screen)
        cloud_sprites_group.draw(screen)
        cactus_sprites_group.draw(screen)
        ptera_sprites_group.draw(screen)
        score_board.set(score)
        highest_score_board.set(highest_score)
        score_board.draw(screen)
        highest_score_board.draw(screen)
        # --更新屏幕
        pygame.display.update()
        clock.tick(cfg.FPS)
        # --游戏是否结束
        if dino.is_dead:
          break
      # 游戏结束界面
      return GameEndInterface(screen, cfg), highest_score
    
    
    '''run'''
    if __name__ == '__main__':
      highest_score = 0
      while True:
        flag, highest_score = main(highest_score)
        if not flag: break
    cfg.py
    '''配置文件'''
    import os
    
    
    '''屏幕大小'''
    SCREENSIZE = (600, 150)
    '''FPS'''
    FPS = 60
    '''音频素材路径'''
    AUDIO_PATHS = {
      'die': os.path.join(os.getcwd(), 'resources/audios/die.wav'),
      'jump': os.path.join(os.getcwd(), 'resources/audios/jump.wav'),
      'point': os.path.join(os.getcwd(), 'resources/audios/point.wav')
    }
    '''图片素材路径'''
    IMAGE_PATHS = {
      'cacti': [os.path.join(os.getcwd(), 'resources/images/cacti-big.png'),
            os.path.join(os.getcwd(), 'resources/images/cacti-small.png')],
      'cloud': os.path.join(os.getcwd(), 'resources/images/cloud.png'),
      'dino': [os.path.join(os.getcwd(), 'resources/images/dino.png'),
           os.path.join(os.getcwd(), 'resources/images/dino_ducking.png')],
      'gameover': os.path.join(os.getcwd(), 'resources/images/gameover.png'),
      'ground': os.path.join(os.getcwd(), 'resources/images/ground.png'),
      'numbers': os.path.join(os.getcwd(), 'resources/images/numbers.png'),
      'ptera': os.path.join(os.getcwd(), 'resources/images/ptera.png'),
      'replay': os.path.join(os.getcwd(), 'resources/images/replay.png')
    }
    '''背景颜色'''
    BACKGROUND_COLOR = (235, 235, 235)
    BLACK = (0, 0, 0)
    WHITE = (255, 255, 255)

    欢迎关注公众号:

  • 相关阅读:
    JZOJ 3034. 【NOIP2012模拟10.17】独立集
    JZOJ 3035. 【NOIP2012模拟10.17】铁轨
    JZOJ 1259. 牛棚安排
    数位DP JZOJ 3316. 非回文数字
    JZOJ 3046. 游戏
    JZOJ 3013. 填充棋盘
    debian 安装oracle提供的java8
    java 汉字转拼音 PinYin4j
    debian ssh设置root权限登陆 Permission denied, please try again
    java并发下订单生成策略
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/14624733.html
Copyright © 2011-2022 走看看