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

Python小恐龙快跑小游戏源代码及素材_Python

 

 

 

 

 

Game7.py'''Function:
  仿谷歌浏览器小恐龙游戏
微信公众号:
  学创英才'''import cfgimport sysimport randomimport pygamefrom modules.sprites.scene import *from modules.sprites.obstacle import *from modules.sprites.dinosaur import *from modules.interfaces.gameend import GameEndInterfacefrom 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 += 1if 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 += 1if 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 -= 1for item in cloud_sprites_group:
          item.speed -= 1for item in cactus_sprites_group:
          item.speed -= 1for 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: breakcfg.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)

欢迎关注公众号:Python小恐龙快跑小游戏源代码及素材_Python_02