当前位置:   article > 正文

学习Python开发小游戏(二)-----飞机大战_background1 = actor('background')

background1 = actor('background')

前提条件:

        需要安装pygame,pgzero,numpy(windows:1.19.3)

功能:

       1.玩家飞机子弹连发

       2.初始化三架敌机,随机出现

       3.特效:背景音乐,子弹发射音乐,子弹击中敌机的声音,玩家飞机爆炸的声音

       4.统计玩家击中敌机的数量,每击中一架敌机分数加1,显示分数

       5.玩家飞机爆炸后游戏结束

附:

       代码中涉及到的素材来自异步社区:《Python游戏趣味编程》一书中提供的素材:https://www.epubit.com/bookDetails?id=UB72096d97d6149

以下是代码:

  1. import pgzrun
  2. import random
  3. TITLE = '飞机大战'
  4. WIDTH = 480
  5. HEIGHT = 700
  6. # 背景图片1
  7. background1 = Actor('background')
  8. background1.x = WIDTH / 2
  9. background1.y = 852 / 2
  10. # 背景图片2
  11. background2 = Actor('background')
  12. background2.x = WIDTH / 2
  13. background2.y = -852 / 2
  14. # 玩家
  15. hero = Actor('hero')
  16. hero.x = WIDTH / 2
  17. hero.y = HEIGHT * 2 / 3
  18. # 存储敌机的信息
  19. enemies = []
  20. # 初始化三架敌机,依次出现
  21. for i in range(3):
  22. # 敌机
  23. enemy = Actor('enemy')
  24. enemy.x = random.randint(80, 320)
  25. enemy.y = -i * 100
  26. enemies.append(enemy)
  27. # 子弹
  28. bullet = Actor('bullet')
  29. bullet.x = WIDTH / 2
  30. bullet.y = -HEIGHT
  31. # 存储发射的子弹
  32. bullets = [bullet]
  33. # 移动速度
  34. speed_enemy = 3
  35. speed_bullet = 10
  36. # 分数
  37. score = 0
  38. # 游戏是否失败
  39. isLoose = False
  40. # 加载背景音乐
  41. sounds.game_music.play(-1)
  42. def draw():
  43. # 绘制背景
  44. background1.draw()
  45. background2.draw()
  46. # 绘制玩家
  47. hero.draw()
  48. # 绘制子弹
  49. for bt in bullets:
  50. bt.draw()
  51. # 绘制敌机
  52. for emy in enemies:
  53. emy.draw()
  54. # 显示分数
  55. screen.draw.text('当前得分: ' + str(score), (160, HEIGHT - 50), fontsize=30, fontname='s', color='green')
  56. # 失败后输出信息
  57. if isLoose:
  58. screen.draw.text('游戏失败', (150, HEIGHT / 2), fontsize=50, fontname='s', color='red')
  59. def update():
  60. global score, isLoose
  61. if not isLoose:
  62. # 游戏失败的判定
  63. for emy in enemies:
  64. if hero.colliderect(emy):
  65. isLoose = True
  66. # 更换敌机的图片
  67. hero.image = 'hero_blowup'
  68. # 播放玩家飞机爆炸的声音
  69. sounds.explode.play()
  70. # 判断是否击中敌机
  71. for bt in bullets:
  72. for emy in enemies:
  73. if bt.colliderect(emy):
  74. # 击中敌机后,敌机位置重置,并将分数加1,隐藏子弹
  75. emy.y = 0
  76. emy.x = random.randint(80, 320)
  77. score += 1
  78. bt.y = -HEIGHT
  79. # 加载子弹击中敌机的音乐
  80. sounds.got_enemy.play()
  81. # 背景图片
  82. if background1.y > 852 / 2 + 852:
  83. background1.y = -852 / 2
  84. if background2.y > 852 / 2 + 852:
  85. background2.y = -852 / 2
  86. # 背景移动
  87. background1.y += 1
  88. background2.y += 1
  89. # 敌机移动
  90. for emy in enemies:
  91. emy.y += speed_enemy
  92. # 子弹移动
  93. for bt in bullets:
  94. if bt.y > -HEIGHT:
  95. bt.y -= speed_bullet
  96. # 当敌机移出视野后,重置敌机的位置
  97. for emy in enemies:
  98. if emy.y > HEIGHT:
  99. emy.y = 0
  100. emy.x = random.randint(80, 320)
  101. # 玩家飞机跟随鼠标移动
  102. def on_mouse_move(pos, rel, buttons):
  103. if not isLoose:
  104. hero.x = pos[0] # 玩家飞机的x坐标为鼠标的x坐标
  105. hero.y = pos[1] # 玩家飞机的y坐标为鼠标的y坐标
  106. # 鼠标按下发射子弹
  107. def on_mouse_down():
  108. if not isLoose:
  109. # 播放发射子弹的背景音乐
  110. sounds.gun.play()
  111. # 生成新的子弹,并将子弹放到飞机的正上方
  112. new_bullet = Actor('bullet')
  113. new_bullet.x = hero.x
  114. new_bullet.y = hero.y - 40
  115. bullets.append(new_bullet)
  116. # 执行游戏
  117. pgzrun.go()

 

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

闽ICP备14008679号