当前位置:   article > 正文

Python小游戏(404小恐龙)

404小恐龙

玩法:上下控制起跳躲避

源码分享:

  1. import cfg
  2. import sys
  3. import random
  4. import pygame
  5. from modules import *
  6. '''main'''
  7. def main(highest_score):
  8. # 游戏初始化
  9. pygame.init()
  10. screen = pygame.display.set_mode(cfg.SCREENSIZE)
  11. pygame.display.set_caption('九歌')
  12. # 导入所有声音文件
  13. sounds = {}
  14. for key, value in cfg.AUDIO_PATHS.items():
  15. sounds[key] = pygame.mixer.Sound(value)
  16. # 游戏开始界面
  17. GameStartInterface(screen, sounds, cfg)
  18. # 定义一些游戏中必要的元素和变量
  19. score = 0
  20. score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(534, 15), bg_color=cfg.BACKGROUND_COLOR)
  21. highest_score = highest_score
  22. highest_score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(435, 15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True)
  23. dino = Dinosaur(cfg.IMAGE_PATHS['dino'])
  24. ground = Ground(cfg.IMAGE_PATHS['ground'], position=(0, cfg.SCREENSIZE[1]))
  25. cloud_sprites_group = pygame.sprite.Group()
  26. cactus_sprites_group = pygame.sprite.Group()
  27. ptera_sprites_group = pygame.sprite.Group()
  28. add_obstacle_timer = 0
  29. score_timer = 0
  30. # 游戏主循环
  31. clock = pygame.time.Clock()
  32. while True:
  33. for event in pygame.event.get():
  34. if event.type == pygame.QUIT:
  35. pygame.quit()
  36. sys.exit()
  37. elif event.type == pygame.KEYDOWN:
  38. if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
  39. dino.jump(sounds)
  40. elif event.key == pygame.K_DOWN:
  41. dino.duck()
  42. elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:
  43. dino.unduck()
  44. screen.fill(cfg.BACKGROUND_COLOR)
  45. # --随机添加云
  46. if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10:
  47. cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75))))
  48. # --随机添加仙人掌/飞龙
  49. add_obstacle_timer += 1
  50. if add_obstacle_timer > random.randrange(50, 150):
  51. add_obstacle_timer = 0
  52. random_value = random.randrange(0, 10)
  53. if random_value >= 5 and random_value <= 7:
  54. cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))
  55. else:
  56. position_ys = [cfg.SCREENSIZE[1]*0.82, cfg.SCREENSIZE[1]*0.75, cfg.SCREENSIZE[1]*0.60, cfg.SCREENSIZE[1]*0.20]
  57. ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys))))
  58. # --更新游戏元素
  59. dino.update()
  60. ground.update()
  61. cloud_sprites_group.update()
  62. cactus_sprites_group.update()
  63. ptera_sprites_group.update()
  64. score_timer += 1
  65. if score_timer > (cfg.FPS//12):
  66. score_timer = 0
  67. score += 1
  68. score = min(score, 99999)
  69. if score > highest_score:
  70. highest_score = score
  71. if score % 100 == 0:
  72. sounds['point'].play()
  73. if score % 1000 == 0:
  74. ground.speed -= 1
  75. for item in cloud_sprites_group:
  76. item.speed -= 1
  77. for item in cactus_sprites_group:
  78. item.speed -= 1
  79. for item in ptera_sprites_group:
  80. item.speed -= 1
  81. # --碰撞检测
  82. for item in cactus_sprites_group:
  83. if pygame.sprite.collide_mask(dino, item):
  84. dino.die(sounds)
  85. for item in ptera_sprites_group:
  86. if pygame.sprite.collide_mask(dino, item):
  87. dino.die(sounds)
  88. # --将游戏元素画到屏幕上
  89. dino.draw(screen)
  90. ground.draw(screen)
  91. cloud_sprites_group.draw(screen)
  92. cactus_sprites_group.draw(screen)
  93. ptera_sprites_group.draw(screen)
  94. score_board.set(score)
  95. highest_score_board.set(highest_score)
  96. score_board.draw(screen)
  97. highest_score_board.draw(screen)
  98. # --更新屏幕
  99. pygame.display.update()
  100. clock.tick(cfg.FPS)
  101. # --游戏是否结束
  102. if dino.is_dead:
  103. break
  104. # 游戏结束界面
  105. return GameEndInterface(screen, cfg), highest_score
  106. '''run'''
  107. if __name__ == '__main__':
  108. highest_score = 0
  109. while True:
  110. flag, highest_score = main(highest_score)
  111. if not flag: break

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/997045
推荐阅读
相关标签
  

闽ICP备14008679号