From 7745c20945d27d70983d0f4000a1d7aa8a7ef38e Mon Sep 17 00:00:00 2001 From: trw <1550076411@qq.com> Date: Sun, 2 Jun 2024 10:04:17 +0800 Subject: [PATCH] first commit --- plantsgames/.idea/.gitignore | 3 + .../inspectionProfiles/Project_Default.xml | 12 + .../inspectionProfiles/profiles_settings.xml | 6 + plantsgames/.idea/misc.xml | 7 + plantsgames/.idea/modules.xml | 8 + .../游戏源码-10 植物大战僵尸.iml | 10 + plantsgames/README.md | 4 + plantsgames/game.py | 383 ++++++++++++++++++ plantsgames/imgs/._map1.png | Bin 0 -> 4096 bytes plantsgames/imgs/grassland.png | Bin 0 -> 3264 bytes plantsgames/imgs/map1.png | Bin 0 -> 240 bytes plantsgames/imgs/map2.png | Bin 0 -> 240 bytes plantsgames/imgs/peabullet.png | Bin 0 -> 1065 bytes plantsgames/imgs/peashooter.png | Bin 0 -> 13486 bytes plantsgames/imgs/sunflower.png | Bin 0 -> 12766 bytes plantsgames/imgs/zombie.png | Bin 0 -> 9812 bytes 16 files changed, 433 insertions(+) create mode 100644 plantsgames/.idea/.gitignore create mode 100644 plantsgames/.idea/inspectionProfiles/Project_Default.xml create mode 100644 plantsgames/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 plantsgames/.idea/misc.xml create mode 100644 plantsgames/.idea/modules.xml create mode 100644 plantsgames/.idea/游戏源码-10 植物大战僵尸.iml create mode 100644 plantsgames/README.md create mode 100644 plantsgames/game.py create mode 100644 plantsgames/imgs/._map1.png create mode 100644 plantsgames/imgs/grassland.png create mode 100644 plantsgames/imgs/map1.png create mode 100644 plantsgames/imgs/map2.png create mode 100644 plantsgames/imgs/peabullet.png create mode 100644 plantsgames/imgs/peashooter.png create mode 100644 plantsgames/imgs/sunflower.png create mode 100644 plantsgames/imgs/zombie.png diff --git a/plantsgames/.idea/.gitignore b/plantsgames/.idea/.gitignore new file mode 100644 index 0000000..359bb53 --- /dev/null +++ b/plantsgames/.idea/.gitignore @@ -0,0 +1,3 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml diff --git a/plantsgames/.idea/inspectionProfiles/Project_Default.xml b/plantsgames/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..dc5f2ab --- /dev/null +++ b/plantsgames/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/plantsgames/.idea/inspectionProfiles/profiles_settings.xml b/plantsgames/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/plantsgames/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/plantsgames/.idea/misc.xml b/plantsgames/.idea/misc.xml new file mode 100644 index 0000000..5ad901e --- /dev/null +++ b/plantsgames/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/plantsgames/.idea/modules.xml b/plantsgames/.idea/modules.xml new file mode 100644 index 0000000..cb03454 --- /dev/null +++ b/plantsgames/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/plantsgames/.idea/游戏源码-10 植物大战僵尸.iml b/plantsgames/.idea/游戏源码-10 植物大战僵尸.iml new file mode 100644 index 0000000..2b9314d --- /dev/null +++ b/plantsgames/.idea/游戏源码-10 植物大战僵尸.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/plantsgames/README.md b/plantsgames/README.md new file mode 100644 index 0000000..aa71f61 --- /dev/null +++ b/plantsgames/README.md @@ -0,0 +1,4 @@ +# pygame +python开发植物大战僵尸游戏用pygame框架 + +项目具体教程:https://segmentfault.com/a/1190000019418065 diff --git a/plantsgames/game.py b/plantsgames/game.py new file mode 100644 index 0000000..8e3eaff --- /dev/null +++ b/plantsgames/game.py @@ -0,0 +1,383 @@ +#1 引入需要的模块 +import pygame +import random +#1 配置图片地址 +IMAGE_PATH = 'imgs/' +#1 设置页面宽高 +scrrr_width=800 +scrrr_height =560 +#1 创建控制游戏结束的状态 +GAMEOVER = False +#4 图片加载报错处理 +LOG = '文件:{}中的方法:{}出错'.format(__file__,__name__) +#3 创建地图类 +class Map(): + #3 存储两张不同颜色的图片名称 + map_names_list = [IMAGE_PATH + 'map1.png', IMAGE_PATH + 'map2.png'] + #3 初始化地图 + def __init__(self, x, y, img_index): + self.image = pygame.image.load(Map.map_names_list[img_index]) + self.position = (x, y) + # 是否能够种植 + self.can_grow = True + #3 加载地图 + def load_map(self): + MainGame.window.blit(self.image,self.position) +#4 植物类 +class Plant(pygame.sprite.Sprite): + def __init__(self): + super(Plant, self).__init__() + self.live=True + + # 加载图片 + def load_image(self): + if hasattr(self, 'image') and hasattr(self, 'rect'): + MainGame.window.blit(self.image, self.rect) + else: + print(LOG) +#5 向日葵类 +class Sunflower(Plant): + def __init__(self,x,y): + super(Sunflower, self).__init__() + self.image = pygame.image.load('imgs/sunflower.png') + self.rect = self.image.get_rect() + self.rect.x = x + self.rect.y = y + self.price = 50 + self.hp = 100 + #5 时间计数器 + self.time_count = 0 + + #5 新增功能:生成阳光 + def produce_money(self): + self.time_count += 1 + if self.time_count == 25: + MainGame.money += 5 + self.time_count = 0 + #5 向日葵加入到窗口中 + def display_sunflower(self): + MainGame.window.blit(self.image,self.rect) +#6 豌豆射手类 +class PeaShooter(Plant): + def __init__(self,x,y): + super(PeaShooter, self).__init__() + # self.image 为一个 surface + self.image = pygame.image.load('imgs/peashooter.png') + self.rect = self.image.get_rect() + self.rect.x = x + self.rect.y = y + self.price = 50 + self.hp = 200 + #6 发射计数器 + self.shot_count = 0 + + #6 增加射击方法 + def shot(self): + #6 记录是否应该射击 + should_fire = False + for zombie in MainGame.zombie_list: + if zombie.rect.y == self.rect.y and zombie.rect.x < 800 and zombie.rect.x > self.rect.x: + should_fire = True + #6 如果活着 + if self.live and should_fire: + self.shot_count += 1 + #6 计数器到25发射一次 + if self.shot_count == 25: + #6 基于当前豌豆射手的位置,创建子弹 + peabullet = PeaBullet(self) + #6 将子弹存储到子弹列表中 + MainGame.peabullet_list.append(peabullet) + self.shot_count = 0 + + #6 将豌豆射手加入到窗口中的方法 + def display_peashooter(self): + MainGame.window.blit(self.image,self.rect) + +#7 豌豆子弹类 +class PeaBullet(pygame.sprite.Sprite): + def __init__(self,peashooter): + self.live = True + 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) +#9 僵尸类 +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) +#1 主程序 +class MainGame(): + #2 创建关数,得分,剩余分数,钱数 + shaoguan = 1 + score = 0 + remnant_score = 100 + money = 500 + #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): + #8 获取所有事件 + eventList = pygame.event.get() + #8 遍历事件列表,判断 + for e in eventList: + if e.type == pygame.QUIT: + self.gameOver() + elif e.type == pygame.MOUSEBUTTONDOWN: + # print('按下鼠标按键') + print(e.pos) + # print(e.button)#左键1 按下滚轮2 上转滚轮为4 下转滚轮为5 右键 3 + + x = e.pos[0] // 80 + y = e.pos[1] // 80 + print(x, y) + map = MainGame.map_list[y - 1][x] + print(map.position) + #8 增加创建时候的地图装填判断以及金钱判断 + if e.button == 1: + if map.can_grow and MainGame.money >= 50: + sunflower = Sunflower(map.position[0], map.position[1]) + MainGame.plants_list.append(sunflower) + print('当前植物列表长度:{}'.format(len(MainGame.plants_list))) + map.can_grow = False + MainGame.money -= 50 + elif e.button == 3: + if map.can_grow and MainGame.money >= 50: + peashooter = PeaShooter(map.position[0], map.position[1]) + MainGame.plants_list.append(peashooter) + print('当前植物列表长度:{}'.format(len(MainGame.plants_list))) + map.can_grow = False + MainGame.money -= 50 + + #9 新增初始化僵尸的方法 + def init_zombies(self): + for i in range(1, 7): + dis = random.randint(1, 5) * 200 + zombie = Zombie(800 + dis, i * 80) + MainGame.zombie_list.append(zombie) + + #9将所有僵尸加载到地图中 + def load_zombies(self): + for zombie in MainGame.zombie_list: + if zombie.live: + zombie.display_zombie() + zombie.move_zombie() + # v2.0 调用是否碰撞到植物的方法 + zombie.hit_plant() + else: + MainGame.zombie_list.remove(zombie) + #1 开始游戏 + def start_game(self): + #1 初始化窗口 + self.init_window() + #3 初始化坐标和地图 + self.init_plant_points() + self.init_map() + #9 调用初始化僵尸的方法 + self.init_zombies() + #1 只要游戏没结束,就一直循环 + while not GAMEOVER: + #1 渲染白色背景 + MainGame.window.fill((255, 255, 255)) + #2 渲染的文字和坐标位置 + MainGame.window.blit(self.draw_text('当前钱数$: {}'.format(MainGame.money), 26, (255, 0, 0)), (500, 40)) + MainGame.window.blit(self.draw_text( + '当前关数{},得分{},距离下关还差{}分'.format(MainGame.shaoguan, MainGame.score, MainGame.remnant_score), 26, + (255, 0, 0)), (5, 40)) + self.load_help_text() + + #3 需要反复加载地图 + self.load_map() + #6 调用加载植物的方法 + self.load_plants() + #7 调用加载所有子弹的方法 + self.load_peabullets() + #8 调用事件处理的方法 + self.deal_events() + #9 调用展示僵尸的方法 + self.load_zombies() + #9 计数器增长,每数到100,调用初始化僵尸的方法 + MainGame.count_zombie += 1 + if MainGame.count_zombie == MainGame.produce_zombie: + self.init_zombies() + MainGame.count_zombie = 0 + #9 pygame自己的休眠 + pygame.time.wait(10) + #1 实时更新 + pygame.display.update() + + #10 程序结束方法 + def gameOver(self): + MainGame.window.blit(self.draw_text('游戏结束', 50, (255, 0, 0)), (300, 200)) + print('游戏结束') + pygame.time.wait(400) + global GAMEOVER + GAMEOVER = True +#1 启动主程序 +if __name__ == '__main__': + game = MainGame() + game.start_game() \ No newline at end of file diff --git a/plantsgames/imgs/._map1.png b/plantsgames/imgs/._map1.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2186f1ab6e87b57a79fe9de207c3db63a96a7e GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt(=a103vvYvJF zKST$^44`sLG%bukK2%&ZIX_n~v7jI)Rj;r#u_!UGBr`9S!N9=6(AqS`BH7Z?+}zqZ zqbNT&)!NO>+0eqm)K%Bi+0a$j#L3Y}*U8b`OxM-O$=uA+$->gr&<)L^QSN96jE2By z2#kinXb6mkz-S1JhQMeDjE2By2#kin$O!>ZXA^|MKrSRBvsj@hwK%`DC^=OjEx#yR uAv3Qe71-^}&r8h7sZ_{GO)F7I%1O-22KI%ax`s4`>VLRbWEkZB{|5k>v(#iEr{BvyaBtAWpz%p8u>We0%V5 znf;sF_Z$D_zR6EU&4}`&*>5lxJDxw_v#)O7{BwVIeg0Z>W%>Tr<8S}n_BQ~x zVMZfy$h6dI=B*dME@zYX{qVlOvdHaFXdM1v9Bq6K-iG&rk3hixdP}a||G(msfjtuj MPgg&ebxsLQ05eEM&;S4c literal 0 HcmV?d00001 diff --git a/plantsgames/imgs/map1.png b/plantsgames/imgs/map1.png new file mode 100644 index 0000000000000000000000000000000000000000..b5e4954cd2753d44fbd8a7403814a55a814743ed GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)+dW+zLn`LHybP0l+XkK!qG%m literal 0 HcmV?d00001 diff --git a/plantsgames/imgs/map2.png b/plantsgames/imgs/map2.png new file mode 100644 index 0000000000000000000000000000000000000000..16a6942364b3e17f5cc3197b758c2761fb984758 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)+dW+zLn`LHybP0l+XkKNlQg} literal 0 HcmV?d00001 diff --git a/plantsgames/imgs/peabullet.png b/plantsgames/imgs/peabullet.png new file mode 100644 index 0000000000000000000000000000000000000000..912bdf2b64875633eb8e657d429f05a092a73549 GIT binary patch literal 1065 zcmV+^1lIeBP)P000>X1^@s6#OZ}&000BT4IV{9o)&>Z2>=AWmvNycOsggw1-XYE8zKI(I9c3 zeNsx)~G7gG+NavOo`jiF~6y2KIRe=iz`&utnCwU*?Z3mhHxW=3| z6LnLmM>U`O@2OC0Cw9vYq_y=8%rOM8MYk*hEQ75ULv`Sbr#)yUP z8}qER{oL;x?Ow~ZrmnhUch_Z*U8-orA>9=OM^2m;qyPl5R8wmu1X06?8Zih#1Woxk|!cNMV1AhW#omsu1Jqf zO4(2CFY9DT(=PF>3T~{*iU;<1>9wdAj9xyvRAp3=Vd;ojU&{*6t?#edTK5L(*4Iv1 z7P1yal4U9|wjE~oNW=xw-M73dYl(|@ICYXg5}3?ozwsTK3bBx4SJU2Sqs0fMHd)JpR((*IiwoW877>ohOp3MP{M7T0Db+Y85S(Dv~Ub zeh@E?PNMU{^yhtI{N?ywyXLNgmq)+ol?dzg$a>HgE4_^LxcIfTVM(r8kCVWMz&CPq zW#c$rg>Olblc>5i6EBM4)DyG!mCO(e<*6lTf@i&IbC0Fkub$|@e(J&5dq*?1?{wDf zBKCgzQWW(pi~LwxE+MKe5TC6rYV&V^Hyu~bG%as1FPYjkLwBtUL3PAJdr2QscT2i- zJvM&tWE%bc@@QCgPW!#(Em+k)71O6x1<|x(Wcga_*Y4=2cmJ93Gw??Ll3B*uAlC6a z@SK^wr>b{`zazkrh&?I$Gu?-h?wIi|a8b?>gsATGNi>ExG&lWH22qZ|9_pp&w!lvY j*MKj8e-6Ia)&cwn!?@1zJZM@d00000NkvXXu0mjf%Hsta literal 0 HcmV?d00001 diff --git a/plantsgames/imgs/peashooter.png b/plantsgames/imgs/peashooter.png new file mode 100644 index 0000000000000000000000000000000000000000..58dff5eee50e98b62e16b90f95d11b811a9bf6c1 GIT binary patch literal 13486 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 literal 0 HcmV?d00001 diff --git a/plantsgames/imgs/zombie.png b/plantsgames/imgs/zombie.png new file mode 100644 index 0000000000000000000000000000000000000000..2621c4ffdb48ca8132e62c2629764ac8b135825d GIT binary patch literal 9812 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