用Python写一个植物大战僵尸,找找90后童年的乐趣

self.image = pygame.image.load(‘imgs/peabullet.png’)

self.damage = 50

self.speed = 10

self.rect = self.image.get_rect()

self.rect.x = peashooter.rect.x + 60

self.rect.y = peashooter.rect.y + 15

def move_bullet(self):

7 在屏幕范围内,实现往右移动

if self.rect.x < scrrr_width:

self.rect.x += self.speed

else:

self.live = False

7 新增,子弹与僵尸的碰撞

def hit_zombie(self):

for zombie in MainGame.zombie_list:

if pygame.sprite.collide_rect(self, zombie):

打中僵尸之后,修改子弹的状态,

self.live = False

僵尸掉血

zombie.hp -= self.damage

if zombie.hp <= 0:

zombie.live = False

self.nextLevel()

7闯关方法

def nextLevel(self):

MainGame.score += 20

MainGame.remnant_score -= 20

for i in range(1, 100):

if MainGame.score == 100 * i and MainGame.remnant_score == 0:

MainGame.remnant_score = 100 * i

MainGame.shaoguan += 1

MainGame.produce_zombie += 50

def display_peabullet(self):

MainGame.window.blit(self.image, self.rect)

僵尸类

class Zombie(pygame.sprite.Sprite):

def init(self, x, y):

super(Zombie, self).init()

self.image = pygame.image.load(‘imgs/zombie.png’)

self.rect = self.image.get_rect()

self.rect.x = x

self.rect.y = y

self.hp = 1000

self.damage = 2

self.speed = 1

self.live = True

self.stop = False

9 僵尸的移动

def move_zombie(self):

if self.live and not self.stop:

self.rect.x -= self.speed

if self.rect.x < -80:

8 调用游戏结束方法

MainGame().gameOver()

9 判断僵尸是否碰撞到植物,如果碰撞,调用攻击植物的方法

def hit_plant(self):

for plant in MainGame.plants_list:

if pygame.sprite.collide_rect(self, plant):

8 僵尸移动状态的修改

self.stop = True

self.eat_plant(plant)

9 僵尸攻击植物

def eat_plant(self, plant):

9 植物生命值减少

plant.hp -= self.damage

9 植物死亡后的状态修改,以及地图状态的修改

if plant.hp <= 0:

a = plant.rect.y // 80 - 1

b = plant.rect.x // 80

map = MainGame.map_list[a][b]

map.can_grow = True

plant.live = False

8 修改僵尸的移动状态

self.stop = False

9 将僵尸加载到地图中

def display_zombie(self):

MainGame.window.blit(self.image, self.rect)

主程序

class MainGame():

2 创建关数,得分,剩余分数,钱数

shaoguan = 1

score = 0

remnant_score = 100

money = 200

3 存储所有地图坐标点

map_points_list = []

3 存储所有的地图块

map_list = []

4 存储所有植物的列表

plants_list = []

7 存储所有豌豆子弹的列表

peabullet_list = []

9 新增存储所有僵尸的列表

zombie_list = []

count_zombie = 0

produce_zombie = 100

1 加载游戏窗口

def init_window(self):

1 调用显示模块的初始化

pygame.display.init()

1 创建窗口

MainGame.window = pygame.display.set_mode([scrrr_width, scrrr_height])

2 文本绘制

def draw_text(self, content, size, color):

pygame.font.init()

font = pygame.font.SysFont(‘kaiti’, size)

text = font.render(content, True, color)

return text

2 加载帮助提示

def load_help_text(self):

text1 = self.draw_text(‘1.按左键创建向日葵 2.按右键创建豌豆射手’, 26, (255, 0, 0))

MainGame.window.blit(text1, (5, 5))

3 初始化坐标点

def init_plant_points(self):

for y in range(1, 7):

points = []

for x in range(10):

point = (x, y)

points.append(point)

MainGame.map_points_list.append(points)

print(“MainGame.map_points_list”, MainGame.map_points_list)

3 初始化地图

def init_map(self):

for points in MainGame.map_points_list:

temp_map_list = list()

for point in points:

map = None

if (point[0] + point[1]) % 2 == 0:

map = Map(point[0] * 80, point[1] * 80, 0)

else:

map = Map(point[0] * 80, point[1] * 80, 1)

将地图块加入到窗口中

temp_map_list.append(map)

print(“temp_map_list”, temp_map_list)

MainGame.map_list.append(temp_map_list)

print(“MainGame.map_list”, MainGame.map_list)

3 将地图加载到窗口中

def load_map(self):

for temp_map_list in MainGame.map_list:

for map in temp_map_list:

map.load_map()

6 增加豌豆射手发射处理

def load_plants(self):

for plant in MainGame.plants_list:

6 优化加载植物的处理逻辑

if plant.live:

if isinstance(plant, Sunflower):

plant.display_sunflower()

plant.produce_money()

elif isinstance(plant, PeaShooter):

plant.display_peashooter()

plant.shot()

else:

MainGame.plants_list.remove(plant)

7 加载所有子弹的方法

def load_peabullets(self):

for b in MainGame.peabullet_list:

if b.live:

b.display_peabullet()

b.move_bullet()

v1.9 调用子弹是否打中僵尸的方法

b.hit_zombie()

else:

MainGame.peabullet_list.remove(b)

8事件处理

def deal_events(self):

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-bLtqqWS4-1712553475477)]

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值