Python小游戏(404小恐龙)

举报
红目香薰 发表于 2022/01/22 23:49:34 2022/01/22
1.7k+ 0 0
【摘要】 玩法:上下控制起跳躲避 源码分享: import cfgimport sysimport randomimport pygamefrom modules import * '''main'''def main(highest_score): # 游戏初始化 pygame.init() screen = py...

玩法:上下控制起跳躲避

源码分享:


      import cfg
      import sys
      import random
      import pygame
      from modules import *
      '''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
  
 

祝大家玩得开心,欢迎点赞、关注、评论,欢迎一健三联。

文章来源: laoshifu.blog.csdn.net,作者:红目香薰,版权归原作者所有,如需转载,请联系作者。

原文链接:laoshifu.blog.csdn.net/article/details/120425258

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。