当前位置:   article > 正文

Python植物大战僵尸源码分享

植物大战僵尸源码

前言

今天给大家推荐一个Gtihub开源项目:PythonPlantsVsZombies,翻译成中就是植物大战僵尸。

植物大战僵尸》是一款极富策略性的小游戏。可怕的僵尸即将入侵,每种僵尸都有不同的特点,例如铁桶僵尸拥有极强的抗击打能力,矿工僵尸可以挖地道绕过种植在土壤表面的植物等。玩家防御僵尸的方式就是栽种植物。49种植物每种都有不同的功能,例如樱桃炸弹可以和周围一定范围内的所有僵尸同归于尽,而食人花可以吃掉最靠近自己的一只僵尸。玩家可以针对不同僵尸的弱点来合理地种植植物,这也是胜利的诀窍。

功能实现

  • 支持的植物:向日葵、豌豆射手、胡桃、雪豌豆射手、樱桃炸弹、三豌豆射手、大嘴花、puffshroom、马铃薯胺、穗状杂草、南瓜、胆小菇、墨西哥胡椒、阳光菇、冰川菇、催眠蘑菇。

  • 支持僵尸:普通僵尸,旗帜僵尸,路障僵尸,铁桶僵尸,报纸僵尸。

  • 支持在关卡开始时选择植物卡片。

  • 支持白天级别、夜间级别、移动卡选择级别和胡桃保龄球

环境要求

1、python3.7

2、Python-Pygame 1.9

展示部分素材

游戏界面

个性化定义

游戏的关卡数据,存储在json文件里的。具体目录:PythonPlantsVsZombies-master\source\data。我们可以进行自定义配置,例如僵尸的位置和时间,背景信息。

 主要代码

  1. __author__ = 'marble_xu'
  2. import pygame as pg
  3. from .. import tool
  4. from .. import constants as c
  5. class Menu(tool.State):
  6. def __init__(self):
  7. tool.State.__init__(self)
  8. def startup(self, current_time, persist):
  9. self.next = c.LEVEL
  10. self.persist = persist
  11. self.game_info = persist
  12. self.setupBackground()
  13. self.setupOption()
  14. def setupBackground(self):
  15. frame_rect = [80, 0, 800, 600]
  16. self.bg_image = tool.get_image(tool.GFX[c.MAIN_MENU_IMAGE], *frame_rect)
  17. self.bg_rect = self.bg_image.get_rect()
  18. self.bg_rect.x = 0
  19. self.bg_rect.y = 0
  20. def setupOption(self):
  21. self.option_frames = []
  22. frame_names = [c.OPTION_ADVENTURE + '_0', c.OPTION_ADVENTURE + '_1']
  23. frame_rect = [0, 0, 165, 77]
  24. for name in frame_names:
  25. self.option_frames.append(tool.get_image(tool.GFX[name], *frame_rect, c.BLACK, 1.7))
  26. self.option_frame_index = 0
  27. self.option_image = self.option_frames[self.option_frame_index]
  28. self.option_rect = self.option_image.get_rect()
  29. self.option_rect.x = 435
  30. self.option_rect.y = 75
  31. self.option_start = 0
  32. self.option_timer = 0
  33. self.option_clicked = False
  34. def checkOptionClick(self, mouse_pos):
  35. x, y = mouse_pos
  36. if(x >= self.option_rect.x and x <= self.option_rect.right and
  37. y >= self.option_rect.y and y <= self.option_rect.bottom):
  38. self.option_clicked = True
  39. self.option_timer = self.option_start = self.current_time
  40. return False
  41. def update(self, surface, current_time, mouse_pos, mouse_click):
  42. self.current_time = self.game_info[c.CURRENT_TIME] = current_time
  43. if not self.option_clicked:
  44. if mouse_pos:
  45. self.checkOptionClick(mouse_pos)
  46. else:
  47. if(self.current_time - self.option_timer) > 200:
  48. self.option_frame_index += 1
  49. if self.option_frame_index >= 2:
  50. self.option_frame_index = 0
  51. self.option_timer = self.current_time
  52. self.option_image = self.option_frames[self.option_frame_index]
  53. if(self.current_time - self.option_start) > 1300:
  54. self.done = True
  55. surface.blit(self.bg_image, self.bg_rect)
  56. surface.blit(self.option_image, self.option_rect)
  1. __author__ = 'marble_xu'
  2. import pygame as pg
  3. from .. import tool
  4. from .. import constants as c
  5. class Screen(tool.State):
  6. def __init__(self):
  7. tool.State.__init__(self)
  8. self.end_time = 3000
  9. def startup(self, current_time, persist):
  10. self.start_time = current_time
  11. self.next = c.LEVEL
  12. self.persist = persist
  13. self.game_info = persist
  14. name = self.getImageName()
  15. self.setupImage(name)
  16. self.next = self.set_next_state()
  17. def getImageName(self):
  18. pass
  19. def set_next_state(self):
  20. pass
  21. def setupImage(self, name):
  22. frame_rect = [0, 0, 800, 600]
  23. self.image = tool.get_image(tool.GFX[name], *frame_rect)
  24. self.rect = self.image.get_rect()
  25. self.rect.x = 0
  26. self.rect.y = 0
  27. def update(self, surface, current_time, mouse_pos, mouse_click):
  28. if(current_time - self.start_time) < self.end_time:
  29. surface.fill(c.WHITE)
  30. surface.blit(self.image, self.rect)
  31. else:
  32. self.done = True
  33. class GameVictoryScreen(Screen):
  34. def __init__(self):
  35. Screen.__init__(self)
  36. def getImageName(self):
  37. return c.GAME_VICTORY_IMAGE
  38. def set_next_state(self):
  39. return c.LEVEL
  40. class GameLoseScreen(Screen):
  41. def __init__(self):
  42. Screen.__init__(self)
  43. def getImageName(self):
  44. return c.GAME_LOOSE_IMAGE
  45. def set_next_state(self):
  46. return c.MAIN_MENU
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/381584
推荐阅读
相关标签
  

闽ICP备14008679号