From 292cdce05aeae712937cd4e46d3d15e587a375d6 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:25:13 +0800 Subject: [PATCH 01/20] Initial commit --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..e64fcb0 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# oop_Pygame_PvZ + -- 2.34.1 From b4daf81a82daf14c5291707f2e2147f63b3c8069 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:29:33 +0800 Subject: [PATCH 02/20] ADD file via upload --- main | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 main diff --git a/main b/main new file mode 100644 index 0000000..e69de29 -- 2.34.1 From 2188830ca5e6f1f7a870d5c903a2bd3ce7b7748b Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:31:37 +0800 Subject: [PATCH 03/20] ADD file via upload --- Constant.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Constant.py diff --git a/Constant.py b/Constant.py new file mode 100644 index 0000000..6accbfc --- /dev/null +++ b/Constant.py @@ -0,0 +1,10 @@ +# Constant.py +# 配置图片地址 +IMAGE_PATH = "imgs\\" +# 设置页面宽高 +scrrr_width = 800 +scrrr_height = 560 +# 创建控制游戏结束的状态 +GAMEOVER = False +# 图片加载报错处理 +LOG = "文件:{}中的方法:{}出错".format(__file__, __name__) -- 2.34.1 From b68084a5bd08f9d7d6e23893ba9c393cf29f3153 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:31:53 +0800 Subject: [PATCH 04/20] ADD file via upload --- Enemy.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Enemy.py diff --git a/Enemy.py b/Enemy.py new file mode 100644 index 0000000..07c9d55 --- /dev/null +++ b/Enemy.py @@ -0,0 +1,12 @@ +# Enemy.py +import pygame + + +class Enemy(pygame.sprite.Sprite): + def __init__(self): + super(Enemy, self).__init__() + self.speed = 4 + self.live = True + self.stop = False + self.distance = 80 + self.distance_count = self.distance -- 2.34.1 From 19f310355b5eaa759c0c61897879537a3b97fa34 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:32:11 +0800 Subject: [PATCH 05/20] ADD file via upload --- game.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 game.py diff --git a/game.py b/game.py new file mode 100644 index 0000000..76c00c8 --- /dev/null +++ b/game.py @@ -0,0 +1,8 @@ +# game.py +# 引入需要的模块 +from TurnGmae import MainGame + +# 启动主程序 +if __name__ == "__main__": + game = MainGame() + game.start_game() -- 2.34.1 From c3888b79afc7f105362ea0b191b93bbb66b1a11d Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:32:22 +0800 Subject: [PATCH 06/20] ADD file via upload --- Map.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Map.py diff --git a/Map.py b/Map.py new file mode 100644 index 0000000..fa28f0d --- /dev/null +++ b/Map.py @@ -0,0 +1,16 @@ +# Map.py +import pygame +from Constant import IMAGE_PATH + + +# 创建地图类 +class Map: + # 存储两张不同颜色的图片名称 + map_names_list = [IMAGE_PATH + "map1.png", IMAGE_PATH + "map2.png"] + + # 初始化地图 + 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 -- 2.34.1 From 7da24ee07ab0a716416ea4651b4d623b14158321 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:32:31 +0800 Subject: [PATCH 07/20] ADD file via upload --- PeaBullet.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 PeaBullet.py diff --git a/PeaBullet.py b/PeaBullet.py new file mode 100644 index 0000000..6753162 --- /dev/null +++ b/PeaBullet.py @@ -0,0 +1,22 @@ +# PeaBullet.py +import pygame +from Constant import scrrr_width + + +# 豌豆子弹类 +class PeaBullet(pygame.sprite.Sprite): + def __init__(self, peashooter, damage): + self.live = True + self.image = pygame.image.load("imgs/peabullet.png") + self.damage = damage + 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): + # 在屏幕范围内,实现往右移动 + if self.rect.x < scrrr_width: + self.rect.x += self.speed + else: + self.live = False -- 2.34.1 From ae8f48a8f51504f33dac544f864a94d31cd58651 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:32:40 +0800 Subject: [PATCH 08/20] ADD file via upload --- PeaShooter.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 PeaShooter.py diff --git a/PeaShooter.py b/PeaShooter.py new file mode 100644 index 0000000..069c701 --- /dev/null +++ b/PeaShooter.py @@ -0,0 +1,34 @@ +# PeaShooter.py +import pygame +from Plant import Plant + + +# 豌豆射手类 +class PeaShooter(Plant): + def __init__(self, x, y, grade): + super(PeaShooter, self).__init__() + + self.image = pygame.image.load("imgs/peashooter.png") + self.rect = self.image.get_rect() + self.rect.x = x + self.rect.y = y + + self.count = 0 + + self.shot_count = 25 + # 1-4 + self.grade = grade + self.couple = self.get_couple(grade) + self.shoot_number = self.couple[0] + self.shoot_number_count = self.shoot_number + self.bullet_damage = self.couple[1] + self.damage = self.shoot_number * self.bullet_damage + self.should_fire = False + self.should_count_fire = True + + def get_couple(self, grade): + # 1*1 2*1 4*1 1*8 2*8 4*8 + # 1 2 4 8 16 32 + # 1 2 3 4 5 6 + lis = [[1, 1], [2, 1], [4, 1], [1, 8], [2, 8], [4, 8]] + return lis[grade - 1] -- 2.34.1 From 8bb0656008e5fffb83e262053a50d25700b4a4b0 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:32:49 +0800 Subject: [PATCH 09/20] ADD file via upload --- Plant.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Plant.py diff --git a/Plant.py b/Plant.py new file mode 100644 index 0000000..a987d0c --- /dev/null +++ b/Plant.py @@ -0,0 +1,9 @@ +import pygame +from Constant import LOG + + +# 植物类 +class Plant(pygame.sprite.Sprite): + def __init__(self): + super(Plant, self).__init__() + self.live = True -- 2.34.1 From e8a169f321cf0ebeae5a219035ebf78d3be6da6e Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:32:58 +0800 Subject: [PATCH 10/20] ADD file via upload --- Sunflower.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Sunflower.py diff --git a/Sunflower.py b/Sunflower.py new file mode 100644 index 0000000..a37be7e --- /dev/null +++ b/Sunflower.py @@ -0,0 +1,17 @@ +# Sunflower.py +import pygame +from Plant import Plant + + +# 向日葵类 +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 + # 时间计数器 + self.time_count = 0 -- 2.34.1 From 962fb98cb56bd69396960fbce53e6527510dd528 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:33:08 +0800 Subject: [PATCH 11/20] ADD file via upload --- Sunshine.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Sunshine.py diff --git a/Sunshine.py b/Sunshine.py new file mode 100644 index 0000000..e8d6acc --- /dev/null +++ b/Sunshine.py @@ -0,0 +1,33 @@ +# Sunshine.py +import pygame +from Enemy import Enemy + + +class Sunshine(Enemy): + def __init__(self, x, y): + super(Sunshine, self).__init__() + + self.image = self.scale_image() + + self.rect = self.image.get_rect() + self.rect.x = x + self.rect.y = y + self.money = 1 + self.damage = 0 + + def scale_image(self): + # 原始图片 + original_image = pygame.image.load("imgs/Sunshine.png") + # 缩放比例 + scale_factor = 0.5 + # 计算新尺寸 + original_size = original_image.get_size() + new_size = ( + int(original_size[0] * scale_factor), + int(original_size[1] * scale_factor), + ) + # 执行等比缩放 + scaled_image = pygame.transform.scale(original_image, new_size) + return scaled_image + + # self.image = pygame.image.load("imgs/Sunshine.png") -- 2.34.1 From 168cdd15cfdaab3b435058e7cf829fbd38b646c4 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:33:17 +0800 Subject: [PATCH 12/20] ADD file via upload --- TurnGmae.py | 498 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 498 insertions(+) create mode 100644 TurnGmae.py diff --git a/TurnGmae.py b/TurnGmae.py new file mode 100644 index 0000000..6ef29da --- /dev/null +++ b/TurnGmae.py @@ -0,0 +1,498 @@ +# TurnGame.py + +import pygame +from Constant import scrrr_width, scrrr_height, GAMEOVER +import random +from Map import Map +from Sunshine import Sunshine +from PeaShooter import PeaShooter +from PeaBullet import PeaBullet +from Zombie import Zombie + + +# 主程序 +class MainGame: + + score = 0 + + # 存储所有地图坐标点 + map_points_list = [] + # 存储所有的地图块 + map_list = [] + # 存储所有植物的列表 + plants_list = [] + plants_pool = [0, 0, 0, 0, 0, 0] + plants_pool_list = [] + # 存储所有豌豆子弹的列表 + peabullet_list = [] + peabullet_count = 0 + # 新增存储所有僵尸的列表 + zombie_list = [] + window = pygame.display.set_mode([scrrr_width, scrrr_height]) + # 0为植物回合,1为僵尸回合,2为玩家回合 + game_turn = 2 + + something_in_mouse_store = False + mouse_pressed = False + mouse_get: PeaBullet = None + mouse_store = [] + + timecount = 50 + + shoule_creat_zombie = False + + turn_count = 0 + + # 开始游戏 + def start_game(self): + # 初始化窗口 + # pygame.display.init() + # 初始化坐标和地图 + self.init_plant_points() + pygame.font.init() + self.init_map() + initmap = self.map_list[1][1] + self.creat_plant(PeaShooter(initmap.position[0], initmap.position[1], 1), 1) + self.creat_plant(PeaShooter(initmap.position[1], initmap.position[1], 1), 1) + for i in range(0, 6): + # self.creat_plant(PeaShooter((i - 1) * 80 + 4 * 80, 0, 1), 1) + peashooter = PeaShooter((i - 1) * 80 + 5 * 80, 0, i + 1) + MainGame.plants_pool_list.append(peashooter) + # 只要游戏没结束,就一直循环 + while not GAMEOVER: + self.load_ui() + # 需要反复加载地图 + self.load_map() + # 调用加载植物的方法 + self.load_plants() + # 调用加载所有子弹的方法 + self.load_peabullets() + # 调用事件处理的方法 + # 调用展示僵尸的方法 + self.load_zombies() + # 计数器增长,每数到100,调用初始化僵尸的方法 + self.turn() + self.update_pool() + self.debugg() + # pygame自己的休眠 + pygame.time.wait(10) + # 实时更新 + pygame.display.update() + + # 显示哪里种植了植物和棋盘上有多少植物 + def debugg(self): + self.timecount += 1 + if self.timecount > 500: + for i in range(len(self.map_list)): + print() + for j in range(len(self.map_list[i])): + print(self.map_list[i][j].can_grow, end="\t") + print() + print(len(self.peabullet_list)) + + self.timecount = 0 + + # 绘制物体和提示文本 + def draw_object(self, object): + self.window.blit(object.image, object.rect) + if not isinstance(object, Sunshine): + self.window.blit( + self.draw_text(f"{object.damage}", 26, (255, 0, 0)), object.rect + ) + else: + self.window.blit( + self.draw_text(f"{object.money}", 26, (255, 0, 0)), object.rect + ) + + # 更新植物池列表 + def update_pool(self): + for i in range(0, 6): + self.plants_pool_list[i].count = self.plants_pool[i] + + self.window.blit( + self.draw_text(f"{self.plants_pool_list[i].count}", 26, (255, 0, 0)), + self.plants_pool_list[i].rect.move(50, 45), + ) + + # 加载僵尸或者移除僵尸 + def load_zombies(self): + for zombie in MainGame.zombie_list: + if zombie.live: + self.draw_object(zombie) + # self.window.blit(zombie.image, zombie.rect) + else: + MainGame.zombie_list.remove(zombie) + + def turn(self): + # 主死循环每一次更新一帧 + # 0为植物回合,1为僵尸回合,3为操控回合 + if self.game_turn == 0: + self.plants_event() + # self.load_peabullets() + if self.peabullet_count <= 0: + self.zombie_turn_start() + + elif self.game_turn == 1: + if self.shoule_creat_zombie == True: + self.init_zombies() + self.shoule_creat_zombie = False + self.zombies_event() + # self.zombie_turn_count += 1 + if self.is_zombie_end(): + self.play_turn_start() + + elif self.game_turn == 2: + self.move_plant() + pass + + # 初始化玩家回合 + def play_turn_start(self): + self.game_turn = 2 + + # 僵尸回合结束 + def is_zombie_end(self): + for zombie in MainGame.zombie_list: + if zombie.stop == False: + return False + + return True + + # 植物回合开始 + def plant_turn_start(self): + self.turn_count += 1 + self.game_turn = 0 + for plant in MainGame.plants_list: + plant.should_fire = True + plant.should_count_fire = True + plant.shoot_number_count = plant.shoot_number + + # 僵尸回合开始 + def zombie_turn_start(self): + self.shoule_creat_zombie = True + self.game_turn = 1 + for zombie in MainGame.zombie_list: + zombie.stop = False + zombie.distance_count = zombie.distance + + # 加载ui + def load_ui(self): + self.window.fill((255, 255, 255)) + self.window.blit( + self.draw_text( + f"当前回合数{self.turn_count}", + 26, + (255, 0, 0), + ), + (5, 40), + ) + + text1 = self.draw_text("按右键拖动豌豆射手", 26, (255, 0, 0)) + self.window.blit(text1, (5, 5)) + + # 文本绘制 + def draw_text(self, content, size, color): + + font = pygame.font.SysFont("kaiti", size) + text = font.render(content, True, color) + return text + + # 植物创建逻辑 + def creat_plant(self, plant, grade): + a = plant.rect[1] // 80 - 1 + b = plant.rect[0] // 80 + map = MainGame.map_list[a][b] + map.can_grow = False + + peashooter = PeaShooter(map.position[0], map.position[1], grade) + MainGame.plants_list.append(peashooter) + + # 移动植物逻辑 + def move_plant(self): + # try: + eventList = pygame.event.get() + for event in eventList: + if event.type == pygame.QUIT: + self.gameOver() + elif event.type == pygame.MOUSEBUTTONDOWN: + x = event.pos[0] // 80 + y = (event.pos[1] // 80) - 1 + if y == -1: + map = MainGame.map_list[6][x - 4] + else: + map = MainGame.map_list[y][x] + print(event.pos) + print(y, x) + print(map.position) + + self.mouse_pressed = True + if y == -1: + number = (map.position[0] // 80) - 3 + print(f"number={number}") + # 此植物位置存mouse_store,植物存mouse_get + + self.mouse_get = PeaShooter( + map.position[0], + map.position[1], + MainGame.plants_pool_list[number - 1].grade, + ) + self.mouse_store = [ + [map.position[1], map.position[0]], + MainGame.plants_pool_list[number - 1].grade, + ] + + MainGame.plants_pool_list[number - 1].count -= 1 + MainGame.plants_pool[number - 1] -= 1 + + else: + + # 有东西 + can_grow = map.can_grow + if not can_grow: + + print(f"{map.position} 1 not can grow") + + # 此植物位置存mouse_store,植物存mouse_get + for plant in MainGame.plants_list: + + if ( + plant.rect.x == map.position[0] + and plant.rect.y == map.position[1] + ): + self.mouse_get = plant + self.mouse_store = [ + [map.position[1], map.position[0]], + plant.grade, + ] + print("mouse_store get", self.mouse_store) + # 删除原植物 + MainGame.plants_list.remove(plant) + MainGame.map_list[y][x].can_grow = True + + else: + print(f"{map.position} 1 can grow") + + elif event.type == pygame.MOUSEBUTTONUP: + x = event.pos[0] // 80 + y = (event.pos[1] // 80) - 1 + if y == -1: + map = MainGame.map_list[6][x - 4] + else: + map = MainGame.map_list[y][x] + print(map.position) + + self.mouse_pressed = False + # 能放,清空mouse_store,此位置创建植物 + can_grow = map.can_grow + if can_grow: + print(f"{map.position} 2 can grow") + # 清空mouse_store + if self.mouse_get is not None: + self.creat_plant( + self.mouse_get, + self.mouse_get.grade, + ) + # self.turn_count += 1 + self.plant_turn_start() + else: + print("1 Empty mouse_get") + self.mouse_get = None + + else: + print(f"{map.position} 2 not can grow") + + if not can_grow: + # 不能放,且等级同,清空mouse_store,mouse_get,本植物等级加一 + for plant in MainGame.plants_list: + if ( + plant.rect.x == map.position[0] + and plant.rect.y == map.position[1] + ): + if self.mouse_store[1] == plant.grade: + plant.grade += 1 + MainGame.plants_list.remove(plant) + self.creat_plant(plant, plant.grade) + self.mouse_store = None + self.mouse_get = None + self.plant_turn_start() + + # 不能放,且等级不同,在原位置恢复,清空mouse_store,mouse_get + print(f"{map.position} 3 not can grow") + if self.mouse_get is not None: + self.creat_plant( + PeaShooter( + self.mouse_store[0][1], + self.mouse_store[0][0], + self.mouse_store[1], + ), + self.mouse_store[1], + ) + print("mouse_store out", self.mouse_store) + + self.mouse_store = None + self.mouse_get = None + + else: + print("2 Empty mouse_store") + else: + print(f"{map.position} 3 can grow") + + if self.mouse_pressed: + if self.mouse_get is not None: + self.mouse_get.rect = pygame.mouse.get_pos() + self.draw_object(self.mouse_get) + # self.window.blit(self.mouse_get.image, self.mouse_get.rect) + else: + print("3 Empty mouse_get") + # except IndexError: + # print("Empty Index!") + + # 初始化坐标点 + 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) + + points = [] + for x in range(4, 10): + point = (x, 0) + points.append(point) + MainGame.map_points_list.append(points) + print("MainGame.map_points_list", MainGame.map_points_list) + + # 初始化地图 + 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) + + # 新增初始化僵尸的方法 + def init_zombies(self): + # 不同的 + first_numbers = random.sample(range(1, 7), random.randint(1, 5)) + + # 生成0或1的随机数,列表推导式 + second_numbers = [random.choice([0, 1]) for _ in range(len(first_numbers))] + + # 组合成元组 + random_tuples = list(zip(first_numbers, second_numbers)) + + for i in random_tuples: + if i[1] == 1: + sunshine = Sunshine(800, i[0] * 80) + MainGame.zombie_list.append(sunshine) + else: + zombie = Zombie(800, i[0] * 80) + MainGame.zombie_list.append(zombie) + + # 将地图加载到窗口中 + def load_map(self): + for temp_map_list in MainGame.map_list: + for map in temp_map_list: + # map.load_map() + + self.window.blit(map.image, map.position) + + # 更新加载植物或移除植物 + def load_plants(self): + for plant in MainGame.plants_list + MainGame.plants_pool_list: + + if plant.live: + self.draw_object(plant) + # self.window.blit(plant.image, plant.rect) + + else: + MainGame.plants_list.remove(plant) + + # 植物处理 + def plants_event(self): + for plant in MainGame.plants_list: + self.draw_object(plant) + # self.window.blit(plant.image, plant.rect) + + # 如果活着 + if plant.should_fire: + if plant.should_count_fire == True: + self.peabullet_count += plant.shoot_number + print("plus", self.peabullet_count) + plant.should_count_fire = False + self.plant_shoot(plant) + + # 植物射击逻辑 + def plant_shoot(self, plant): + plant.shot_count += 1 + # 计数器到25发射一次 + if plant.shot_count >= 25 and plant.shoot_number_count >= 1: + # 基于当前豌豆射手的位置,创建子弹 + print(plant.shoot_number_count) + plant.shoot_number_count -= 1 + peabullet = PeaBullet(plant, plant.bullet_damage) + # 将子弹存储到子弹列表中 + MainGame.peabullet_list.append(peabullet) + plant.shot_count = 0 + + # 加载所有子弹的方法 + def load_peabullets(self): + for bullet in MainGame.peabullet_list: + if bullet.live: + self.draw_object(bullet) + # self.window.blit(bullet.image, bullet.rect) + bullet.move_bullet() + # 调用子弹是否打中僵尸的方法 + + for enemy in MainGame.zombie_list: + if pygame.sprite.collide_rect(bullet, enemy): + # 打中僵尸之后,修改子弹的状态, + bullet.live = False + # 僵尸掉血 + enemy.damage -= bullet.damage + if enemy.damage <= 0: + enemy.live = False + if isinstance(enemy, Sunshine): + self.plants_pool[enemy.money - 1] += 1 + else: + MainGame.peabullet_list.remove(bullet) + self.peabullet_count -= 1 + + # 将所有僵尸加载到地图中 + def zombies_event(self): + for enemy in MainGame.zombie_list: + if enemy.live: + self.zombie_move(enemy) + else: + MainGame.zombie_list.remove(enemy) + + # 僵尸移动逻辑 + def zombie_move(self, zombie): + self.draw_object(zombie) + # self.window.blit(zombie.image, zombie.rect) + + if zombie.live and not zombie.stop: + zombie.distance_count -= zombie.speed + zombie.rect.x -= zombie.speed + if zombie.rect.x < -80: + # 调用游戏结束方法 + MainGame().gameOver() + if zombie.distance_count <= 0: + zombie.stop = True + + # 程序结束方法 + def gameOver(self): + self.window.blit(self.draw_text("游戏结束", 50, (255, 0, 0)), (300, 200)) + print("游戏结束") + pygame.time.wait(400) + global GAMEOVER + GAMEOVER = True -- 2.34.1 From b64bfd8df24c4329f0edfc6b25222539dd513fc1 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:33:25 +0800 Subject: [PATCH 13/20] ADD file via upload --- Zombie.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Zombie.py diff --git a/Zombie.py b/Zombie.py new file mode 100644 index 0000000..d159959 --- /dev/null +++ b/Zombie.py @@ -0,0 +1,15 @@ +# Zombie.py +import pygame +from Enemy import Enemy + + +# 僵尸类 +class Zombie(Enemy): + def __init__(self, x, y): + super(Zombie, self).__init__() + self.image = pygame.image.load(f"imgs/{__name__}.png") + self.rect = self.image.get_rect() + self.rect.x = x + self.rect.y = y + + self.damage = 2 -- 2.34.1 From 68b5784ed7314654374a50efe035fe3211b09dba Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:41:07 +0800 Subject: [PATCH 14/20] ADD file via upload --- img | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img diff --git a/img b/img new file mode 100644 index 0000000..e69de29 -- 2.34.1 From 1320154c1b82dce1784909119a294c46ccddc9a3 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:42:22 +0800 Subject: [PATCH 15/20] Delete 'main' --- main | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 main diff --git a/main b/main deleted file mode 100644 index e69de29..0000000 -- 2.34.1 From 34f48d48d160d5dcfc64f6b9010d8e263baaa2f0 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:43:11 +0800 Subject: [PATCH 16/20] Delete 'img' --- img | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img diff --git a/img b/img deleted file mode 100644 index e69de29..0000000 -- 2.34.1 From 2eddf290ce8a9275fd1fd375c37e419bfd8db33e Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:45:18 +0800 Subject: [PATCH 17/20] ADD file via upload --- imgsimgs | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 imgsimgs diff --git a/imgsimgs b/imgsimgs new file mode 100644 index 0000000..e69de29 -- 2.34.1 From cdf282e95ab1adcd31f37922ca66fc124e9265a8 Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 19:45:25 +0800 Subject: [PATCH 18/20] Delete 'imgsimgs' --- imgsimgs | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 imgsimgs diff --git a/imgsimgs b/imgsimgs deleted file mode 100644 index e69de29..0000000 -- 2.34.1 From fa1f1a3034e98b118b7568c3c1af6336ca199c01 Mon Sep 17 00:00:00 2001 From: unknown <1377053057@qq.com> Date: Tue, 30 Apr 2024 20:23:09 +0800 Subject: [PATCH 19/20] test --- Enemy1.png | Bin 0 -> 9812 bytes Sunshine.png | Bin 0 -> 4796 bytes Zombie.png | Bin 0 -> 9812 bytes grassland.png | Bin 0 -> 3264 bytes map1.png | Bin 0 -> 240 bytes map2.png | Bin 0 -> 240 bytes peabullet.png | Bin 0 -> 1065 bytes peashooter.png | Bin 0 -> 13486 bytes sunflower.png | Bin 0 -> 12766 bytes 9 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Enemy1.png create mode 100644 Sunshine.png create mode 100644 Zombie.png create mode 100644 grassland.png create mode 100644 map1.png create mode 100644 map2.png create mode 100644 peabullet.png create mode 100644 peashooter.png create mode 100644 sunflower.png diff --git a/Enemy1.png b/Enemy1.png new file mode 100644 index 0000000000000000000000000000000000000000..2621c4ffdb48ca8132e62c2629764ac8b135825d GIT binary patch literal 9812 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 literal 0 HcmV?d00001 diff --git a/Zombie.png b/Zombie.png new file mode 100644 index 0000000000000000000000000000000000000000..2621c4ffdb48ca8132e62c2629764ac8b135825d GIT binary patch literal 9812 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 MPgg&ebxsLQ05eEM&;S4c literal 0 HcmV?d00001 diff --git a/map1.png b/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/map2.png b/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/peabullet.png b/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/peashooter.png b/peashooter.png new file mode 100644 index 0000000000000000000000000000000000000000..58dff5eee50e98b62e16b90f95d11b811a9bf6c1 GIT binary patch literal 13486 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 literal 0 HcmV?d00001 -- 2.34.1 From c750f4698068abcb1577c663648846ee1cbf5f9f Mon Sep 17 00:00:00 2001 From: ppqz7ofga <1377053057@qq.com> Date: Tue, 30 Apr 2024 20:39:21 +0800 Subject: [PATCH 20/20] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e64fcb0..f3b0a5e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # oop_Pygame_PvZ +imgs文件夹图片在分支master下 \ No newline at end of file -- 2.34.1