首页 文章详情

Python实战小游戏飞机大战详解

python教程 | 452 2021-11-05 16:31 0 0 0
UniSMS (合一短信)

大家还记得微信版《经典飞机大战》嘛?

今天做的这款“打飞机”小游戏——画面诙谐,精致,完全复刻经典微信飞机大战哦!

完全复刻?怎么?大家不信嘛!那跟着小编一起来看看吧~


正文


一、环境安装

本文是写的游戏代码,基于Pygame的源码项目,这里是自己写的飞机大战的1.0版本,比较简陋。

准备:python3、Pycharm、pygame模块以及自带的部分模块。

  1. pip install -i https://pypi.douban.com/simple/ pygame


二、我方飞机

  1. def main():

  2. global is_hit

  3. global nums

  4. screen = pygame.display.set_mode((480, 852), 0, 32)

  5. background = pygame.image.load("./feiji/background.png")

  6. # 创建飞机

  7. hero = HeroPlane(screen)

  8. enermy_plane = EnermyPlane(screen)

  9. while True:

  10. global hero_nums

  11. global enermy_nums

  12. # 显示背景

  13. screen.blit(background, (0, 0))

  14. # 显示我方飞机

  15. hero.display()

  16. # 测试是否被子弹击中

  17. hero.test(enermy_plane.bullets)

  18. if hero.is_hit:

  19. hero_nums += 1

  20. if hero_nums == 10:

  21. hero.image = pygame.image.load("./feiji/hero_blowup_n1.png")

  22. elif hero_nums == 20:

  23. hero.image = pygame.image.load("./feiji/hero_blowup_n2.png")

  24. elif hero_nums == 30:

  25. hero.image = pygame.image.load("./feiji/hero_blowup_n3.png")

  26. elif hero_nums == 40:

  27. hero.image = pygame.image.load("./feiji/hero_blowup_n4.png")

  28. elif hero_nums > 50:

  29. break


三、敌方飞机

  1. # 显示敌飞机

  2. enermy_plane.display()

  3. enermy_plane.test(hero.bullets)

  4. if enermy_plane.is_hit:

  5. enermy_nums += 1

  6. if enermy_nums == 10:

  7. enermy_plane.image = pygame.image.load("./feiji/enemy0_down1.png")

  8. elif enermy_nums == 20:

  9. enermy_plane.image = pygame.image.load("./feiji/enemy0_down2.png")

  10. elif enermy_nums == 30:

  11. enermy_plane.image = pygame.image.load("./feiji/enemy0_down3.png")

  12. elif enermy_nums == 40:

  13. enermy_plane.image = pygame.image.load("./feiji/enemy0_down4.png")

  14. elif enermy_nums > 50:

  15. enermy_plane = EnermyPlane(screen)

  16. enermy_nums = 0

  17. else:

  18. enermy_plane.move()

  19. enermy_plane.fire()

  20. # 控制飞机左右

  21. key_control(hero)

  22. # 刷新屏幕

  23. pygame.display.update()

  24. # 程序休眠0.01秒

  25. time.sleep(0.01)


四、控制键盘移动

  1. def key_control(hero):

  2. for event in pygame.event.get():

  3. if event.type == QUIT:

  4. print("exit")

  5. exit()

  6. elif event.type == KEYDOWN:

  7. if event.key == K_a or event.key == K_LEFT:

  8. hero.move_left()

  9. print("left")

  10. elif event.key == K_d or event.key == K_RIGHT:

  11. hero.move_right()

  12. print("right")

  13. elif event.key == K_SPACE:

  14. hero.fire()

  15. print("space")


五、检测子弹碰撞

  1. class BasePlane(object):

  2. def __init__(self, screen, x, y, image):

  3. self.= x

  4. self.= y

  5. self.screen = screen

  6. self.image = pygame.image.load(image)

  7. self.is_hit = False # 此标志用来表示飞机是否被击中了

  8. self.bullets = []

  9. def test(self, bullets):

  10. for bullet in bullets:

  11. if self.< bullet.< self.+ self.image.get_width() and \

  12. self.< bullet.< self.+ self.image.get_height():

  13. self.is_hit = True

  14. # 检测子弹碰撞

  15. for item in self.bullets:

  16. for bullet in bullets:

  17. if item.< bullet.< item.+ item.image.get_width() and \

  18. item.< bullet.< item.+ item.image.get_height():

  19. item.is_hit = True

  20. bullet.is_hit = True


六、效果图

总结

嘿~简单版本是无限流的,没补给包,大飞机小飞机啥的!

后续有时间的话小编会继续完善,奥里给~

好啦!本次文章就到这里了~如有想跟着小编一起学习交流的,欢迎大家!

搜索下方加老师微信

老师微信号:XTUOL1988切记备注学习Python

领取Python web开发,Python爬虫,Python数据分析,人工智能等精品学习课程。带你从零基础系统性的学好Python!

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter