From b1a5e3134f3f08d56bed130e1ba3dc29b70906ec Mon Sep 17 00:00:00 2001 From: pgcauvty5 <1136718971@qq.com> Date: Fri, 31 May 2024 15:44:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E8=A6=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager.py | 1368 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1368 insertions(+) create mode 100644 manager.py diff --git a/manager.py b/manager.py new file mode 100644 index 0000000..0dbbf16 --- /dev/null +++ b/manager.py @@ -0,0 +1,1368 @@ +import pygame +import random +from pygame.locals import * + + +class SoundPlay: + game_bgm = "sound/GameSceneBGM.ogg" + world_bgm = 'sound/WorldSceneBGM.ogg' + eliminate = ('sound/eliminate1.ogg', 'sound/eliminate2.ogg', 'sound/eliminate3.ogg', 'sound/eliminate4.ogg',\ + 'sound/eliminate5.ogg') # 消除声音 + score_level = ('sound/good.ogg', 'sound/great.ogg', 'sound/amazing.ogg', 'sound/excellent.ogg',\ + 'sound/unbelievable.ogg') # 得分声音 + click = "sound/click.bubble.ogg" # 点击选中声音 + board_sound = 'sound/board.ogg' # 落板子声音 + click_button = 'sound/click_common_button.ogg' # 点击按钮声音 + money_sound = 'sound/money.ogg' # 点击银币声音 + ice_break = 'sound/ice_break.ogg' # 冰消除声音 + + def __init__(self, filename, loops=0): + self.sound = pygame.mixer.Sound(filename) + self.sound.play(loops) + + +class Tree(pygame.sprite.Sprite): + """树类""" + tree = 'pic2/tree.png' # 树 + fruit = 'pic2/fruit.png' # 果子 + energy_num = 'pic2/energy_num.png' # 精力 + money = 'pic2/money.png' # 银币 + energy_buy = 'pic2/energy_buy.png' # 购买精力 + x, y = 340, 510 + h = 90 + position = ([x, y], [x+50, y-25], [x+105, y-45], [x-5, y-h-5], [x+55, y-25-h+10], [x+105, y-45-h], \ + [x, y-h*2], [x+50+10, y-25-h*2-5], [x+105+25, y-45-h*2-14], [x+30, y-h*3-30]) # 果子坐标组 + energy_num_position = (15, 70) # 精力坐标 + energy_buy_position = (250, 400) + + def __init__(self, icon, position): + super().__init__() + self.image = pygame.image.load(icon).convert_alpha() + self.rect = self.image.get_rect() + self.rect.bottomleft = position # 左下角为坐标 + + def draw(self, screen): + screen.blit(self.image, self.rect) + + +class ManagerTree: + """管理树类""" + __screen_size = (900, 600) + screen = pygame.display.set_mode(__screen_size, DOUBLEBUF, 32) + fruit_list = [] + fruit_image = pygame.image.load(Tree.fruit).convert_alpha() + fruit_width = fruit_image.get_width() + fruit_height = fruit_image.get_height() + type = 0 # 0树界面,1加精力界面 + energy_full = False # 精力已满标志 初始未满 + money_empty = False # 银币不足 + + def load_text(self, text, position, txt_size=25, txt_color=(255, 255, 255)): + my_font = pygame.font.SysFont(None, txt_size) + text_screen = my_font.render(text, True, txt_color) + self.screen.blit(text_screen, position) + + def draw_tree(self, energy_num, money_num): + """画tree""" + Tree(Tree.tree, (0, 600)).draw(self.screen) # 画树 + Tree(Tree.energy_num, Tree.energy_num_position).draw(self.screen) # 画精力 + # print("energy", energy_num) + if energy_num > 30: + self.load_text(str(30) + '/30', (22, 55), 21) + else: + self.load_text(str(energy_num)+'/30', (22, 55), 21) + # print("money", money_num) + Tree(Tree.money, (15, 135)).draw(self.screen) # 画银币 + self.load_text(str(money_num), (32, 124), 21) + for i in range(0, 10): # 画果子 + Tree(Tree.fruit, Tree.position[i]).draw(self.screen) + self.load_text(str(i+1), (Tree.position[i][0]+15, Tree.position[i][1]-47)) + if self.type == 1: + Tree(Tree.energy_buy, Tree.energy_buy_position).draw(self.screen) + if self.energy_full: + self.load_text("energy is full!", (430, 310), 30, (255, 0, 0)) + pygame.display.flip() + pygame.time.delay(500) + self.energy_full = False + if self.money_empty: + self.load_text("money is not enough!", (410, 310), 30, (255, 0, 0)) + pygame.display.flip() + pygame.time.delay(500) + self.money_empty = False + + def mouse_select(self, button, level, energy_num, money_num): + """鼠标点击""" + if button.type == MOUSEBUTTONDOWN: + mouse_down_x, mouse_down_y = button.pos + print(button.pos) + if level == 0: + if self.type == 0: # 树界面 + for i in range(0, 10): + if Tree.position[i][0] < mouse_down_x < Tree.position[i][0] + self.fruit_width \ + and Tree.position[i][1] - self.fruit_height < mouse_down_y < Tree.position[i][1]: + if energy_num <= 0: + self.type = 1 + else: + level = i + 1 + if Tree.energy_num_position[0] < mouse_down_x < Tree.energy_num_position[0]+60 \ + and Tree.energy_num_position[1]-60 < mouse_down_y < Tree.energy_num_position[1]: # 精力60*60 + SoundPlay(SoundPlay.click) + self.type = 1 + else: # 加精力弹窗界面 + if 408 < mouse_down_x < 600 and 263 < mouse_down_y < 313: # 点加精力按钮 + SoundPlay(SoundPlay.click_button) + if money_num < 50: + self.money_empty = True + if energy_num >= 30: + self.energy_full = True + elif energy_num < 30 and money_num >= 50: + energy_num += 5 + money_num -= 50 + elif 619 < mouse_down_x < 638 and 158 < mouse_down_y < 177: # 点叉号 + self.type = 0 + if button.type == MOUSEBUTTONUP: + pass + return level, energy_num, money_num + + +class Element(pygame.sprite.Sprite): + """ 元素类 """ + # 图标元组,包括6个小动物, + animal = ('pic2/fox.png', 'pic2/bear.png', 'pic2/chick.png', 'pic2/eagle.png', 'pic2/frog.png', 'pic2/cow.png') + ice = 'pic2/ice.png' # 冰层 + brick = 'pic2/brick.png' # 砖 + frame = 'pic2/frame.png' # 选中框 + bling = ("pic2/bling1.png", "pic2/bling2.png", "pic2/bling3.png", "pic2/bling4.png", "pic2/bling5.png",\ + "pic2/bling6.png", "pic2/bling7.png", "pic2/bling8.png", "pic2/bling9.png") # 消除动画 + + ice_eli = ('pic2/ice0.png', 'pic2/ice1.png', 'pic2/ice2.png', 'pic2/ice3.png', 'pic2/ice4.png', 'pic2/ice5.png',\ + 'pic2/ice6.png', 'pic2/ice7.png', 'pic2/ice8.png') # 消除冰块动画 + + # 得分图片 + score_level = ('pic2/good.png', 'pic2/great.png', 'pic2/amazing.png', 'pic2/excellent.png', 'pic2/unbelievable.png') + none_animal = 'pic2/noneanimal.png' # 无可消除小动物 + stop = 'pic2/exit.png' # 暂停键 + stop_position = (20, 530) + + def __init__(self, icon, position): + super().__init__() + self.image = pygame.image.load(icon).convert_alpha() + self.rect = self.image.get_rect() + self.rect.topleft = position # 左上角坐标 + self.speed = [0, 0] + self.init_position = position + + def move(self, speed): + self.speed = speed + self.rect = self.rect.move(self.speed) + if self.speed[0] != 0: # 如果左右移动 + if abs(self.rect.left-self.init_position[0]) == self.rect[2]: + self.init_position = self.rect.topleft + self.speed = [0, 0] + else: + if abs(self.rect.top-self.init_position[1]) == self.rect[3]: + self.init_position = self.rect.topleft + self.speed = [0, 0] + + def draw(self, screen): + screen.blit(self.image, self.rect) + + +class Board(pygame.sprite.Sprite): + step_board = 'pic2/step.png' # 剩余步数板子 + step = ('pic2/0.png', 'pic2/1.png', 'pic2/2.png', 'pic2/3.png', 'pic2/4.png', 'pic2/5.png',\ + 'pic2/6.png', 'pic2/7.png', 'pic2/8.png', 'pic2/9.png', ) + task_board = 'pic2/task.png' # 任务板子 + ok = 'pic2/ok.png' # ok勾 + # 关数板子 + levelBoard = ('pic2/level0.png', 'pic2/level1.png', 'pic2/level2.png', 'pic2/level3.png', 'pic2/level4.png', 'pic2/level5.png', + 'pic2/level6.png', 'pic2/level7.png', 'pic2/level8.png', 'pic2/level9.png', 'pic2/level10.png') + # xxx = 'pic2/x.png' # 叉掉 + test = 'pic2/test.png' + success_board = 'pic2/successtest1.png' # 过关成功板子 + fail_board = 'pic2/failBoard.png' # 任务失败 + step_add = 'pic2/step_add.png' # 增加步数 + next = "pic2/next.png" # 下一关按钮 + replay = "pic2/replay.png" # 重玩图片 + stars = 'pic2/startest.png' # 星星图片 + money = 'pic2/money.png' # 银币 + energy = 'pic2/energ.png' # 精力 + button_position = [[300, 465], [500, 465]] + starts_position = [[280+50, 340], [375+38, 340], [460+35, 340]] + + def __init__(self, icon, position): + super().__init__() + self.image = pygame.image.load(icon).convert_alpha() + self.speed = [0, 45] + self.rect = self.image.get_rect() + self.rect.bottomleft = position # 左下角为坐标值 + + def move(self): + self.rect = self.rect.move(self.speed) + if self.rect.bottom >= 543: + self.speed = [0, -45] + if self.speed == [0, -45] and self.rect.bottom <= 450: + self.speed = [0, 0] + + def draw(self, screen): + screen.blit(self.image, self.rect) + + +class Manager: + """ 数组类 """ + __screen_size = (900, 600) + screen = pygame.display.set_mode(__screen_size, DOUBLEBUF, 32) + __brick_size = 50 + __bg = pygame.image.load('pic2/bg.png').convert() + stop_width = 63 + selected = [-1, -1] # 现选中[row, col] + exchange_sign = -1 # 未交换标志 + last_sel = [-1, -1] # 上一次选中[row, col] + change_value_sign = False # 是否交换值标志,初始不交换 + death_sign = True # 死图标志,初始不是死图 + boom_sel = [-1, -1] # 四连消特效小动物所在位置 row,col + level = 0 # 当前关卡数 初始第0关 + money = 100 # 金币 + energy_num = 30 # 精力值 + num_sign = True + type = 2 # 0代表游戏中; 1代表完成任务,过关; -1代表步数用完,任务未完成,过关失败; 2代表未游戏状态,板子界面 + reset_mode = True # 是否重新布局(每关布局) + init_step = 15 # 每关规定步数 + step = init_step # 代表游戏所剩余的步数 + score = 0 # 得数 + min = 20 # 分数中间值1 + max = 50 # 分数中间值2 + animal_num = [0, 0, 0, 0, 0, 0] # 本关消除各小动物的个数 + ice_num = 0 + success_board = Board(Board.success_board, [200, 0]) # 过关成功板 + fail_board = Board(Board.fail_board, [200, 0]) # 任务失败板 + height, width = 9, 9 + row, col = 5, 5 + ice_list = [[-1 for col in range(21)]for row in range(21)] # -1不画,1画冰 + animal = [[-1 for col in range(21)]for row in range(21)] # -2消除的,-1不画,0-4小动物 + list_x, list_y = (__screen_size[0] - 11 * __brick_size) / 2, (__screen_size[1] - 11 * __brick_size) / 2 # 矩阵坐标 + + def __init__(self, width, height): + self.height = height + self.width = width + self.list_x = (Manager.__screen_size[0] - self.width * Manager.__brick_size) / 2 + self.list_y = (Manager.__screen_size[1] - self.height * Manager.__brick_size) / 2 + self.row, self.col = Manager.xy_rc(self.list_x, self.list_y) + self.list_x, self.list_y = Manager.rc_xy(self.row, self.col) + self.ice_list = [[-1 for col in range(21)]for row in range(21)] + self.animal = [[-1 for col in range(21)]for row in range(21)] + self.reset_animal() + + def reset_animal(self): + for row in range(self.row, self.row + self.height): + for col in range(self.col, self.col + self.width): + self.animal[row][col] = random.randint(0, 5) + + @staticmethod + def rc_xy(row, col): + """row col 转 x,y坐标""" + return int(Manager.list_x + (col-Manager.col)*Manager.__brick_size), int\ + (Manager.list_y+(row-Manager.row)*Manager.__brick_size) + + @staticmethod + def xy_rc(x, y): + """x,y坐标转row col""" + return int((y-Manager.list_y)/Manager.__brick_size+Manager.row), int\ + ((x-Manager.list_x)/Manager.__brick_size+Manager.col) + + @staticmethod + def draw_brick(x, y): + brick = Element(Element.brick, (x, y)) + Manager.screen.blit(brick.image, brick.rect) + + def draw_task(self, task_animal_num, which_animal, \ + board_position=(400, 90), animal_position=(430, 35), txt_position=(455, 60)): + """画任务板子""" + txt_size = 24 + txt_color = (0, 0, 0) + Board(Board.task_board, board_position).draw(self.screen) + if which_animal == 6: + task_animal = Element(Element.ice, animal_position) + else: + task_animal = Element(Element.animal[which_animal], animal_position) + task_animal.image = pygame.transform.smoothscale(task_animal.image, (40, 40)) + task_animal.draw(self.screen) + if which_animal == 6: + if task_animal_num-self.ice_num <= 0: + Board(Board.ok, (txt_position[0], txt_position[1]+15)).draw(self.screen) + else: + self.load_text(str(task_animal_num-self.ice_num), txt_position, txt_size, txt_color) + else: + if task_animal_num - self.animal_num[which_animal] <= 0: + Board(Board.ok, (txt_position[0], txt_position[1]+15)).draw(self.screen) + else: + self.load_text(str(task_animal_num - self.animal_num[which_animal]), txt_position, txt_size, txt_color) + + def draw(self): + """ 画背景,小动物等等 """ + # if self.level != 0: + self.screen.blit(Manager.__bg, (0, 0)) # 背景 + Board(Board.step_board, (0, 142)).draw(self.screen) # 剩余步数板子 + tens = self.step//10 # 剩余步数十位数 + single = self.step % 10 # 剩余步数个位数 + if tens == 0: + Board(Board.step[single], (790, 110)).draw(self.screen) + else: + Board(Board.step[tens], (775, 110)).draw(self.screen) + Board(Board.step[single], (805, 110)).draw(self.screen) # 剩余步数的数 + Board(Board.levelBoard[self.level], (30, 105)).draw(self.screen) # 关卡数板子 + Element(Element.stop, Element.stop_position).draw(self.screen) # 暂停键 + + BrickGroup = pygame.sprite.Group() + AnimalGroup = pygame.sprite.Group() + IceGroup = pygame.sprite.Group() + for i in range(0, 21): + for j in range(0, 21): + x, y = Manager.rc_xy(i, j) + if self.animal[i][j] != -1: + BrickGroup.add(Element(Element.brick, (x, y))) + AnimalGroup.add(Element(Element.animal[self.animal[i][j]], (x, y))) + if self.ice_list[i][j] != -1: + IceGroup.add(Element(Element.ice, (x, y))) + BrickGroup.draw(self.screen) # 砖 + IceGroup.draw(self.screen) + for animallist in AnimalGroup: + self.screen.blit(animallist.image, animallist.rect) # 小动物 + if self.level == 1: + self.draw_task(10, 4) + elif self.level == 2: + self.draw_task(21, 1) + elif self.level == 3: + self.draw_task(16, 4, (300, 90), (330, 35), (360, 60)) + self.draw_task(16, 5, (500, 90), (530, 35), (560, 60)) + elif self.level == 4: + self.draw_task(18, 5, (300, 90), (330, 35), (360, 60)) + self.draw_task(18, 2, (500, 90), (530, 35), (560, 60)) + elif self.level == 5: + self.draw_task(28, 2, (300, 90), (330, 35), (360, 60)) + self.draw_task(28, 0, (500, 90), (530, 35), (560, 60)) + elif self.level == 6: + self.draw_task(70, 4) + elif self.level == 7: + self.draw_task(36, 1) + self.draw_task(36, 2, (300, 90), (330, 35), (360, 60)) + self.draw_task(36, 0, (500, 90), (530, 35), (560, 60)) + elif self.level == 8: + self.draw_task(15, 6) + elif self.level == 9: + self.draw_task(49, 6) + else: + self.draw_task(39, 6) + + if self.selected != [-1, -1]: + frame_sprite = Element(Element.frame, Manager.rc_xy(self.selected[0], self.selected[1])) + self.screen.blit(frame_sprite.image, frame_sprite.rect) # 选中框 + + self.load_text('score:' + str(self.score), (300, 550), 30) # 积分 + pygame.draw.rect(self.screen, (50, 150, 50, 180), Rect(300, 570, self.score * 2, 25)) + pygame.draw.rect(self.screen, (100, 200, 100, 180), Rect(300, 570, 200, 25), 2) + return AnimalGroup + + def mouse_image(self): + """" 更换鼠标图片 """ + mouse_cursor = pygame.image.load('pic2/mouse.png').convert_alpha() + mouse_x, mouse_y = pygame.mouse.get_pos() + # 隐藏鼠标 + pygame.mouse.set_visible(False) + # 计算光标的左上角位置 + mouse_x -= mouse_cursor.get_width() / 2 + mouse_y -= mouse_cursor.get_height() / 2 + self.screen.blit(mouse_cursor, (mouse_x, mouse_y)) + + def mouse_select(self, button): + """鼠标点击""" + if button.type == MOUSEBUTTONDOWN: + mouse_down_x, mouse_down_y = button.pos + if self.type == 1: # 过关成功 + if Board.button_position[0][0] < mouse_down_x < Board.button_position[0][0]+100 \ + and Board.button_position[0][1]-50 < mouse_down_y < Board.button_position[0][1]: # 点击再来一次按钮 + if self.energy_num < 5: + self.level = 0 + self.reset_mode = True + # self.set_level_mode(self.level) + elif Board.button_position[1][0] < mouse_down_x < Board.button_position[1][0]+100 \ + and Board.button_position[1][1]-50 < mouse_down_y < Board.button_position[1][1]: # 点击下一关按钮 + if self.energy_num < 5: + self.level = 0 + else: + self.level += 1 # 关卡数加一 + self.reset_mode = True + # self.set_level_mode(self.level) + # elif self.success_board.rect[0]+410 < mouse_down_x < self.success_board.rect[0]+410+55 \ + # and self.success_board.rect.bottom+245-55 < mouse_down_x < self.success_board.rect.bottom+245: + elif 610 < mouse_down_x < 610 + 55 and 205 - 55 < mouse_down_y < 205: # x + self.level = 0 + self.reset_mode = True + + elif self.type == -1: # 过关失败 + if Board.button_position[1][0] < mouse_down_x < Board.button_position[1][0]+100 \ + and Board.button_position[1][1]-50 < mouse_down_y < Board.button_position[1][1]: # 点击再来一次按钮 + if self.energy_num < 5: + self.level = 0 + self.reset_mode = True + elif Board.button_position[0][0] < mouse_down_x < Board.button_position[0][0]+100 \ + and Board.button_position[0][1]-50 < mouse_down_y < Board.button_position[0][1]: # 点击再来5步按钮 + if self.money < 5: + self.level = 0 + else: + self.money -= 5 + self.step += 5 + self.type = 0 # 游戏中 + self.fail_board = Board(Board.fail_board, [200, 0]) + # elif self.success_board.rect[0] + 410 < mouse_down_x < self.success_board.rect[0] + 410 + 55 \ + # and self.success_board.rect.bottom+245-55 < mouse_down_x < self.success_board.rect.bottom+245: + elif 610 < mouse_down_x < 610 + 55 and 205 - 55 < mouse_down_y < 205: # x + self.level = 0 + self.reset_mode = True + + elif self.type == 0: + if self.list_x < mouse_down_x < self.list_x + Manager.__brick_size * self.width \ + and self.list_y < mouse_down_y < self.list_y + Manager.__brick_size * self.height: + mouse_selected = Manager.xy_rc(mouse_down_x, mouse_down_y) + if self.animal[mouse_selected[0]][mouse_selected[1]] != -1: + SoundPlay(SoundPlay.click) + self.selected = mouse_selected + if (self.last_sel[0] == self.selected[0] and abs(self.last_sel[1] - self.selected[1]) == 1) \ + or (self.last_sel[1] == self.selected[1] and abs(self.last_sel[0] - self.selected[0]) == 1): + self.exchange_sign = 1 # 点击相邻的,交换 + elif Element.stop_position[0] < mouse_down_x < Element.stop_position[0]+self.stop_width\ + and Element.stop_position[1] < mouse_down_y < Element.stop_position[1]+self.stop_width: # 点推出 + SoundPlay(SoundPlay.click_button) + self.level = 0 + self.reset_mode = True + else: + self.selected = [-1, -1] + + if button.type == MOUSEBUTTONUP: + pass + + def exchange(self, spritegroup): + """点击后交换""" + if self.exchange_sign == -1: # 未交换 + self.last_sel = self.selected + if self.exchange_sign == 1: + last_x, last_y = Manager.rc_xy(self.last_sel[0], self.last_sel[1]) + sel_x, sel_y = Manager.rc_xy(self.selected[0], self.selected[1]) + if self.last_sel[0] == self.selected[0]: # 左右相邻 + for animallist in spritegroup: + if animallist.rect.topleft == (last_x, last_y): + last_sprite = animallist + last_sprite.speed = [self.selected[1]-self.last_sel[1], 0] + elif animallist.rect.topleft == (sel_x, sel_y): + selected_sprite = animallist + selected_sprite.speed = [self.last_sel[1]-self.selected[1], 0] + else: # 上下相邻 + for animallist in spritegroup: + if animallist.rect.topleft == (last_x, last_y): + last_sprite = animallist + last_sprite.speed = [0, self.selected[0]-self.last_sel[0]] + elif animallist.rect.topleft == (sel_x, sel_y): + selected_sprite = animallist + selected_sprite.speed = [0, self.last_sel[0]-self.selected[0]] + while last_sprite.speed != [0, 0]: + pygame.time.delay(5) + self.draw_brick(last_x, last_y) + self.draw_brick(sel_x, sel_y) + last_sprite.move(last_sprite.speed) + selected_sprite.move(selected_sprite.speed) + self.screen.blit(last_sprite.image, last_sprite.rect) + self.screen.blit(selected_sprite.image, selected_sprite.rect) + pygame.display.flip() + + self.change_value() + if self.eliminate_animal(): + self.step -= 1 + else: + self.change_value() + self.change_value_sign = False + self.boom_sel = self.selected + self.exchange_sign = -1 + self.selected = [-1, -1] + + def change_value(self): + """交换值""" + temp = self.animal[self.last_sel[0]][self.last_sel[1]] + self.animal[self.last_sel[0]][self.last_sel[1]] = self.animal[self.selected[0]][self.selected[1]] + self.animal[self.selected[0]][self.selected[1]] = temp + + def load_text(self, text, position, txt_size, txt_color=(255, 255, 255)): + my_font = pygame.font.SysFont(None, txt_size) + text_screen = my_font.render(text, True, txt_color) + self.screen.blit(text_screen, position) + + def death_map(self): + """判断死图,更新图""" + for i in range(self.row, self.row + self.height): + for j in range(self.col, self.col + self.width): + if self.animal[i][j] != -1: + if self.animal[i][j] == self.animal[i][j+1]: + if (self.animal[i][j] in [self.animal[i-1][j-1], self.animal[i+1][j-1]] \ + and self.animal[i][j-1] != -1) or \ + (self.animal[i][j] in [self.animal[i-1][j+2], self.animal[i+1][j+2]] \ + and self.animal[i][j+2] != -1): + """a b + a a + c d""" + self.death_sign = False + break + if self.animal[i][j] == self.animal[i+1][j]: + if (self.animal[i][j] in [self.animal[i-1][j-1], self.animal[i-1][j+1]] \ + and self.animal[i-1][j] != -1) or \ + (self.animal[i][j] in [self.animal[i+2][j - 1], self.animal[i+2][j + 1]] \ + and self.animal[i+2][j] != -1): + """a b + a + a + c d""" + self.death_sign = False + break + else: + if self.animal[i-1][j-1] == self.animal[i][j]: + if (self.animal[i][j] == self.animal[i-1][j+1] and self.animal[i-1][j] != -1)\ + or (self.animal[i][j] == self.animal[i+1][j-1] and self.animal[i][j-1] != -1): + """a a a b + a a + c a """ + self.death_sign = False + break + if self.animal[i][j] == self.animal[i+1][j+1]: + if (self.animal[i][j] == self.animal[i-1][j+1] and self.animal[i][j+1] != -1)\ + or (self.animal[i][j] == self.animal[i+1][j-1] and self.animal[i+1][j] != -1): + """ a b + a a + b a a a""" + self.death_sign = False + break + if self.death_sign: + pygame.time.delay(500) + Element(Element.none_animal, (230, 150)).draw(self.screen) + pygame.display.flip() + pygame.time.delay(500) + temp = [self.step, self.score, self.animal_num, self.ice_num, self.energy_num] + self.reset_mode = True + self.set_level_mode(self.level) + self.step = temp[0] + self.score = temp[1] + self.animal_num = temp[2] + self.ice_num = temp[3] + self.energy_num = temp[4] + else: + self.death_sign = True + + # def eliminate_animal(self): + # """消除小动物""" + # score_level = self.score # 当前得分 + # """543连消""" + # for i in range(self.row, self.row + self.height): + # for j in range(self.col, self.col + self.width): + # if self.animal[i][j] == self.animal[i][j+1] == self.animal[i][j+2] == self.animal[i][j-1] == self.animal[i][j-2] \ + # and self.animal[i][j] != -1: # 横五 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 5 + # # print("5", [i, j]) + # SoundPlay(SoundPlay.eliminate[4]) # 消除声音4 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i][j-2] = self.animal[i][j+1] = self.animal[i][j+2] = self.animal[i][j-1] = -2 + # # self.animal[i][j + 2] = 15 + # self.animal[i][j] = -2 + # elif self.animal[i][j] == self.animal[i][j+1] == self.animal[i][j+2] == self.animal[i][j+3] \ + # and self.animal[i][j] != -1: # 横四 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("横四", [i, j]) + # SoundPlay(SoundPlay.eliminate[3]) # 消除声音3 + # self.animal_num[self.animal[i][j]] += 4 # 消除某种小动物计数 + # if i == self.boom_sel[0] and j+1 == self.boom_sel[1]: + # # self.animal[i][j+1] += 5 + # self.animal[i][j + 1] = -2 + # self.animal[i][j] = self.animal[i][j + 2] = self.animal[i][j + 3] = -2 + # else: + # # self.animal[i][j+2] += 5 + # self.animal[i][j + 2] = -2 + # self.animal[i][j] = self.animal[i][j + 1] = self.animal[i][j + 3] = -2 + # elif self.animal[i][j] == self.animal[i][j + 1] == self.animal[i][j + 2] and self.animal[i][j] != -1: + # if self.selected != [-1, -1]: # 横3 + # self.change_value_sign = True + # self.score += 2 + # # print("横三", [i, j]) + # SoundPlay(SoundPlay.eliminate[0]) # 消除声音0 + # self.animal_num[self.animal[i][j]] += 3 # 消除某种小动物计数 + # self.animal[i][j] = self.animal[i][j + 1] = self.animal[i][j + 2] = -2 + # if self.animal[i][j] == self.animal[i+1][j] == self.animal[i+2][j] == self.animal[i-1][j] == self.animal[i-2][j] \ + # and self.animal[i][j] != -1: # 纵五 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 5 + # # print("55", [i, j]) + # SoundPlay(SoundPlay.eliminate[4]) # 消除声音4 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i+2][j] = self.animal[i + 1][j] = self.animal[i-1][j] = self.animal[i-2][j] = -2 + # # self.animal[i + 2][j] = 15 + # self.animal[i][j] = -2 + # elif self.animal[i][j] == self.animal[i+1][j] == self.animal[i+2][j] == self.animal[i+3][j] \ + # and self.animal[i][j] != -1: # 纵四 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("纵四", [i, j]) + # SoundPlay(SoundPlay.eliminate[3]) # 消除声音3 + # self.animal_num[self.animal[i][j]] += 4 # 消除某种小动物计数 + # if i+1 == self.boom_sel[0] and j == self.boom_sel[1]: + # # self.animal[i + 1][j] += 5 + # self.animal[i + 1][j] = -2 + # self.animal[i][j] = self.animal[i + 2][j] = self.animal[i + 3][j] = -2 + # else: + # # self.animal[i + 2][j] += 5 + # self.animal[i + 2][j] = -2 + # self.animal[i][j] = self.animal[i + 1][j] = self.animal[i + 3][j] = -2 + # elif self.animal[i][j] == self.animal[i + 1][j] == self.animal[i + 2][j] and self.animal[i][j] != -1: + # if self.selected != [-1, -1]: # 纵3 + # self.change_value_sign = True + # self.score += 2 + # # print("纵三", [i, j]) + # SoundPlay(SoundPlay.eliminate[0]) # 消除声音0 + # self.animal_num[self.animal[i][j]] += 3 # 消除某种小动物计数 + # self.animal[i][j] = self.animal[i + 1][j] = self.animal[i + 2][j] = -2 + # + # """丁字,勾连消""" + # for i in range(self.row, self.row + self.height): + # for j in range(self.col, self.col + self.width): + # # 丁字 + # if self.animal[i][j] == self.animal[i][j-1] == self.animal[i][j+1] and self.animal[i][j] != -1: + # if self.animal[i][j] == self.animal[i+1][j] == self.animal[i+2][j]: # 下丁 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("下丁", [i, j]) + # SoundPlay(SoundPlay.eliminate[2]) # 消除声音2 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i + 1][j] = self.animal[i + 2][j] = self.animal[i][j-1] = self.animal[i][j+1] = -2 + # # self.animal[i][j] += 10 + # self.animal[i][j] = -2 + # elif self.animal[i][j] == self.animal[i-1][j] == self.animal[i-2][j]: # 上丁 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("上丁", [i, j]) + # SoundPlay(SoundPlay.eliminate[2]) # 消除声音2 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i][j - 1] = self.animal[i][j + 1] = self.animal[i-1][j] = self.animal[i-2][j] = -2 + # # self.animal[i][j] += 10 + # self.animal[i][j] = -2 + # if self.animal[i][j] == self.animal[i-1][j] == self.animal[i+1][j] and self.animal[i][j] != -1: + # if self.animal[i][j] == self.animal[i][j-1] == self.animal[i][j-2]: # 左丁 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("下丁", [i, j]) + # SoundPlay(SoundPlay.eliminate[2]) # 消除声音2 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i + 1][j] = self.animal[i + 2][j] = self.animal[i][j - 1] = self.animal[i][j + 1] = -2 + # # self.animal[i][j] += 10 + # self.animal[i][j] = -2 + # elif self.animal[i][j] == self.animal[i][j+1] == self.animal[i][j+2]: # 右丁 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("上丁", [i, j]) + # SoundPlay(SoundPlay.eliminate[2]) # 消除声音2 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i][j - 1] = self.animal[i][j + 1] = self.animal[i - 1][j] = self.animal[i - 2][j] = -2 + # # self.animal[i][j] += 10 + # self.animal[i][j] = -2 + # # 勾 + # elif self.animal[i][j] == self.animal[i][j+1] == self.animal[i][j+2] and self.animal[i][j] != -1: + # if self.animal[i][j] == self.animal[i+1][j] == self.animal[i+2][j]: # 右下 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("右下", [i, j]) + # SoundPlay(SoundPlay.eliminate[1]) # 消除声音1 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i][j + 1] = self.animal[i][j + 2] = self.animal[i+1][j] = self.animal[i+2][j] = -2 + # # self.animal[i][j] += 10 + # self.animal[i][j] = -2 + # elif self.animal[i][j] == self.animal[i-1][j] == self.animal[i-2][j]: # 右上 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("右上", [i, j]) + # SoundPlay(SoundPlay.eliminate[1]) # 消除声音1 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i][j + 1] = self.animal[i][j + 2] = self.animal[i-1][j] = self.animal[i-2][j] = -2 + # # self.animal[i][j] += 10 + # self.animal[i][j] = -2 + # elif self.animal[i][j] == self.animal[i][j-1] == self.animal[i][j-2] and self.animal[i][j] != -1: + # if self.animal[i][j] == self.animal[i+1][j] == self.animal[i+2][j]: # 左下 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("左下", [i, j]) + # SoundPlay(SoundPlay.eliminate[1]) # 消除声音1 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i][j - 1] = self.animal[i][j - 2] = self.animal[i+1][j] = self.animal[i+2][j] = -2 + # # self.animal[i][j] += 10 + # self.animal[i][j] = -2 + # elif self.animal[i][j] == self.animal[i-1][j] == self.animal[i-2][j]: # 左上 + # if self.selected != [-1, -1]: + # self.change_value_sign = True + # self.score += 3 + # # print("左上", [i, j]) + # SoundPlay(SoundPlay.eliminate[1]) # 消除声音1 + # self.animal_num[self.animal[i][j]] += 5 # 消除某种小动物计数 + # self.animal[i][j - 1] = self.animal[i][j - 2] = self.animal[i-1][j] = self.animal[i-2][j] = -2 + # # self.animal[i][j] += 10 + # self.animal[i][j] = -2 + # eliminate_ice = [] + # for i in range(self.row, self.row + self.height): + # for j in range(self.col, self.col + self.width): + # if self.animal[i][j] == 5 and (-2 in [self.animal[i+1][j], self.animal[i-1][j], self.animal[i][j+1], self.animal[i][j-1]]): + # eliminate_ice.append((i, j)) + # # print(len(eliminate_ice)) + # for n in range(len(eliminate_ice)): + # self.animal[eliminate_ice[n][0]][eliminate_ice[n][1]] = -2 + # + # self.fall_animal() + # + # score_level = self.score-score_level # 一次点击交换后消除的得分值 + # + # # 根据得分差值,播放不同声音,画不同图片,good,great,amazing,excellent,unbelievable, + # if score_level < 5: + # pass + # elif score_level < 8: # 5 good + # SoundPlay(SoundPlay.score_level[0]) + # Element(Element.score_level[0], (350, 250)).draw(self.screen) + # pygame.display.flip() + # pygame.time.delay(500) + # elif score_level < 10: # 8 great + # SoundPlay(SoundPlay.score_level[1]) + # Element(Element.score_level[1], (350, 250)).draw(self.screen) + # pygame.display.flip() + # pygame.time.delay(500) + # elif score_level < 15: # 10 amazing + # SoundPlay(SoundPlay.score_level[2]) + # Element(Element.score_level[2], (350, 250)).draw(self.screen) + # pygame.display.flip() + # pygame.time.delay(500) + # elif score_level < 20: # 15 excellent + # SoundPlay(SoundPlay.score_level[3]) + # Element(Element.score_level[3], (350, 250)).draw(self.screen) + # pygame.display.flip() + # pygame.time.delay(500) + # elif score_level >= 20: # 20 unbelievable + # SoundPlay(SoundPlay.score_level[4]) + # Element(Element.score_level[4], (350, 250)).draw(self.screen) + # pygame.display.flip() + # pygame.time.delay(500) + # return self.change_value_sign # 返回是否交换值标志 + + def exist_left(self, i, j, num): + sl = 0 + for temp in range(0,int(num)): + # print("leftxxxxxx", temp,self.animal[i][j], self.animal[i + temp][j]) + if self.animal[i][j] == self.animal[i][j-temp] and self.animal[i][j]!= -1 and self.animal[i][j] != -2: + # j = j - 1 + # self.animal[i][j] = self.animal[i][j-1] + sl += 1 + # print('left', 'judge num',sl,num,i, j) + if sl == num: + # print('left', 'return true') + return True + else: + # print('left', 'return false') + return False + + def exist_right(self, i, j, num): + sr = 0 + for temp in range(0, int(num)): + # print("rightxxxxxx",temp, self.animal[i][j], self.animal[i + temp][j]) + if self.animal[i][j] == self.animal[i][j + temp] and self.animal[i][j]!= -1 and self.animal[i][j] != -2: + # j = j + 1 + # self.animal[i][j] = self.animal[i][j + 1] + sr = sr + 1 + # print('right', 'judge num',sr,num,i, j) + if sr == num: + # print('right','return true') + return True + else: + # print('right', 'return false') + return False + + def exist_up(self, i, j, num): + su = 0 + for temp in range(0, int(num)): + # print("upxxxxxx", temp,self.animal[i][j], self.animal[i + temp][j]) + if self.animal[i][j] == self.animal[i - temp][j] and self.animal[i][j]!= -1 and self.animal[i][j] != -2: + # self.animal[i][j] = self.animal[i - 1][j] + # i = i - 1 + su = su + 1 + # print('up', 'judge num',su,num,i, j) + if su == num: + # print('up', 'return true') + return True + else: + # print('up', 'return false') + return False + + def exist_down(self, i, j, num): + sd = 0 + for temp in range(0, int(num)): + # print("downxxxxxx",temp,self.animal[i][j],self.animal[i+temp][j]) + if self.animal[i][j] == self.animal[i + temp][j] and self.animal[i][j]!= -1 and self.animal[i][j] != -2: + # self.animal[i][j] = self.animal[i + 1][j] + # i = i + 1 + sd = sd + 1 + # print('down', 'judge num',sd,num,i, j) + if sd == num: + # print('down', 'return true') + return True + else:pass + else: + # print('down', 'return false') + return False + + def change_left(self, i, j, num): + self.change_value_sign = True + self.score += num + print('excute changeleft') + for k in range(0,int(num)): + print('location',i, j-k,self.animal[i][j-k]) + self.animal[i][j-k] = -2 + # cl = 1 + # for temp in (0, num): + # if self.animal[i][j] == self.animal[i][j - 1] : + # self.animal[i][j] = self.animal[i][j - 1] = -2 + # cl = cl + 1 + # print('changeleft', 'judge num') + # if cl == num: + # print('changeleft', 'return true') + # return True + # else: + # print('changeleft', 'return false') + # return False + + def change_right(self, i, j, num): + self.change_value_sign = True + self.score += num + print('excute changeright') + for k in range(0,int(num)): + print('location', i, j + k, self.animal[i][j + k]) + self.animal[i][j+k] = -2 + # cr = 1 + # for temp in (0, num): + # if self.animal[i][j] == self.animal[i][j + 1] : + # self.animal[i][j] = self.animal[i][j + 1] = -2 + # cr = cr + 1 + # print('changeright', 'judge num') + # if cr == num: + # print('changeright', 'return true') + # return True + # else: + # print('changeright', 'return false') + # return False + + def change_up(self, i, j, num): + self.change_value_sign = True + self.score += num + print('excute changeup') + for k in range(0,int(num)): + print('location', i - k, j, self.animal[i - k][j ]) + self.animal[i-k][j] = -2 + # cu = 1 + # for temp in (0, num): + # if self.animal[i][j] == self.animal[i - 1][j] : + # self.animal[i][j] = self.animal[i - 1][j] = -2 + # cu = cu + 1 + # print('changeup', 'judge num') + # if cu == num: + # print('changeup', 'return true') + # return True + # else: + # print('changeup', 'return false') + # return False + + def change_down(self, i, j, num): + self.change_value_sign = True + self.score += num + print('excute changedown') + for k in range(0,int(num)): + print('location', i + k, j, self.animal[i + k][j]) + self.animal[i+k][j] = -2 + + + def eliminate_animal(self): + score_level = self.score + self.change_value_sign = False + for i in range(self.row, self.row + self.height): + for j in range(self.col, self.col + self.width): + if self.exist_right(i, j, 5): + self.change_value_sign = True + if self.exist_down(i, j+2, 3): + self.animal_num[self.animal[i][j]] += 7 + SoundPlay(SoundPlay.eliminate[4]) # 消除声音4 + self.change_right(i, j, 5) + self.change_down(i, j+2, 3) + else: + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_right(i, j, 5) + elif self.exist_right(i, j, 4): + self.change_value_sign = True + if self.exist_down(i, j+1, 3): + self.animal_num[self.animal[i][j]] += 6 + SoundPlay(SoundPlay.eliminate[3]) # 消除声音4 + self.change_right(i, j, 4) + self.change_down(i, j+1, 3) + elif self.exist_down(i, j+2, 3): + self.animal_num[self.animal[i][j]] += 6 + SoundPlay(SoundPlay.eliminate[3]) # 消除声音4 + self.change_right(i, j, 4) + self.change_down(i, j+2, 3) + else: + self.animal_num[self.animal[i][j]] += 4 + SoundPlay(SoundPlay.eliminate[1]) # 消除声音4 + self.change_right(i, j, 4) + elif self.exist_right(i, j, 3): + self.change_value_sign = True + if self.exist_down(i, j, 3): + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_right(i, j, 3) + self.change_down(i, j, 3) + elif self.exist_down(i, j+1, 3): + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_right(i, j, 3) + self.change_down(i, j+1, 3) + elif self.exist_down(i, j+2, 3): + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_right(i, j, 3) + self.change_down(i, j + 2, 3) + else: + self.animal_num[self.animal[i][j]] += 3 + SoundPlay(SoundPlay.eliminate[0]) # 消除声音4 + self.change_right(i, j, 3) + elif self.exist_down(i, j, 5): + self.change_value_sign = True + if self.exist_right(i+2, j, 3): + self.animal_num[self.animal[i][j]] += 7 + SoundPlay(SoundPlay.eliminate[4]) # 消除声音4 + self.change_down(i, j, 5) + self.change_right(i+2, j, 3) + elif self.exist_left(i+2, j, 3): + self.animal_num[self.animal[i][j]] += 7 + SoundPlay(SoundPlay.eliminate[4]) # 消除声音4 + self.change_down(i, j, 5) + self.change_left(i+2, j, 3) + else: + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_down(i, j, 5) + elif self.exist_down(i, j, 4): + self.change_value_sign = True + if self.exist_left(i+1, j, 3): + self.animal_num[self.animal[i][j]] += 6 + SoundPlay(SoundPlay.eliminate[3]) # 消除声音4 + self.change_down(i, j, 4) + self.change_left(i+1, j, 3) + elif self.exist_right(i+1, j, 3): + self.animal_num[self.animal[i][j]] += 6 + SoundPlay(SoundPlay.eliminate[3]) # 消除声音4 + self.change_down(i, j, 4) + self.change_right(i+1, j, 3) + elif self.exist_left(i+2, j, 3): + self.animal_num[self.animal[i][j]] += 6 + SoundPlay(SoundPlay.eliminate[3]) # 消除声音4 + self.change_down(i, j, 4) + self.change_left(i+2, j, 3) + elif self.exist_right(i+2, j, 3): + self.animal_num[self.animal[i][j]] += 6 + SoundPlay(SoundPlay.eliminate[3]) # 消除声音4 + self.change_down(i, j, 4) + self.change_right(i+2, j, 3) + else: + self.animal_num[self.animal[i][j]] += 4 + SoundPlay(SoundPlay.eliminate[1]) # 消除声音4 + self.change_down(i, j, 4) + elif self.exist_down(i, j, 3): + self.change_value_sign = True + if self.exist_left(i+1, j, 3): + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_down(i, j, 3) + self.change_left(i+1, j, 3) + elif self.exist_right(i+1, j, 3): + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_down(i, j, 3) + self.change_right(i+1, j, 3) + elif self.exist_left(i+2, j, 3): + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_down(i, j, 3) + self.change_left(i+2, j, 3) + elif self.exist_right(i+2, j, 3): + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_down(i, j, 3) + self.change_right(i+2, j, 3) + + elif self.exist_left(i+2, j, 2) and self.exist_right(i+2, j, 2): + self.animal_num[self.animal[i][j]] += 5 + SoundPlay(SoundPlay.eliminate[2]) # 消除声音4 + self.change_down(i, j, 3) + self.change_left(i+2, j, 2) + self.change_right(i+2, j, 2) + elif self.exist_left(i+2, j, 2) and self.exist_right(i+2, j, 3): + self.animal_num[self.animal[i][j]] += 6 + SoundPlay(SoundPlay.eliminate[3]) # 消除声音4 + self.change_down(i, j, 3) + self.change_left(i+2, j, 2) + self.change_right(i+2, j, 3) + elif self.exist_left(i+2, j, 3) and self.exist_right(i+2, j, 2): + self.animal_num[self.animal[i][j]] += 6 + SoundPlay(SoundPlay.eliminate[3]) # 消除声音4 + self.change_down(i, j, 3) + self.change_left(i+2, j, 3) + self.change_right(i+2, j, 2) + elif self.exist_left(i+2, j, 3) and self.exist_right(i+2, j, 3): + self.animal_num[self.animal[i][j]] += 7 + SoundPlay(SoundPlay.eliminate[4]) # 消除声音4 + self.change_down(i, j, 3) + self.change_left(i+2, j, 3) + self.change_right(i+2, j, 3) + else: + self.animal_num[self.animal[i][j]] += 3 + SoundPlay(SoundPlay.eliminate[0]) # 消除声音4 + self.change_down(i, j, 3) + + self.fall_animal() + score_level = self.score - score_level # 一次点击交换后消除的得分值 + + # 根据得分差值,播放不同声音,画不同图片,good,great,amazing,excellent,unbelievable, + if score_level < 5: + pass + elif score_level < 8: # 5 good + SoundPlay(SoundPlay.score_level[0]) + Element(Element.score_level[0], (350, 250)).draw(self.screen) + pygame.display.flip() + pygame.time.delay(500) + elif score_level < 10: # 8 great + SoundPlay(SoundPlay.score_level[1]) + Element(Element.score_level[1], (350, 250)).draw(self.screen) + pygame.display.flip() + pygame.time.delay(500) + elif score_level < 15: # 10 amazing + SoundPlay(SoundPlay.score_level[2]) + Element(Element.score_level[2], (350, 250)).draw(self.screen) + pygame.display.flip() + pygame.time.delay(500) + elif score_level < 20: # 15 excellent + SoundPlay(SoundPlay.score_level[3]) + Element(Element.score_level[3], (350, 250)).draw(self.screen) + pygame.display.flip() + pygame.time.delay(500) + elif score_level >= 20: # 20 unbelievable + SoundPlay(SoundPlay.score_level[4]) + Element(Element.score_level[4], (350, 250)).draw(self.screen) + pygame.display.flip() + pygame.time.delay(500) + + return self.change_value_sign # 返回是否交换值标志 + + + + def fall_animal(self): + """下落函数""" + clock = pygame.time.Clock() + position = [] + ice_position = [] + for i in range(self.row, self.row+self.height): + for j in range(self.col, self.col+self.width): + if self.animal[i][j] == -2: + x, y = self.rc_xy(i, j) + position.append((x, y)) + if self.ice_list[i][j] == 1: + ice_position.append((x, y)) + if position != []: + for index in range(0, 9): + # pygame.time.delay(50) + # clock.tick() + clock.tick(20) + for pos in position: + self.draw_brick(pos[0], pos[1]) + if pos in ice_position: + Element(Element.ice_eli[index], (pos[0], pos[1])).draw(self.screen) + Element(Element.bling[index], (pos[0], pos[1])).draw(self.screen) + pygame.display.flip() + + for i in range(self.row, self.row + self.height): + brick_position = [] + fall_animal_list = [] + speed = [0, 1] + for j in range(self.col, self.col + self.width): + if self.animal[i][j] == -2: + + x, y = self.rc_xy(i, j) + if self.ice_list[i][j] == 1: + SoundPlay(SoundPlay.ice_break) + self.ice_num += 1 + self.ice_list[i][j] = -1 + + brick_position.append((x, y)) + + for m in range(i, self.row - 1, -1): + if self.animal[m - 1][j] != -1: + x, y = self.rc_xy(m - 1, j) + brick_position.append((x, y)) + animal = Element(Element.animal[self.animal[m - 1][j]], (x, y)) + fall_animal_list.append(animal) + self.animal[m][j] = self.animal[m - 1][j] + else: + self.animal[m][j] = random.randint(0, 5) + break + while speed != [0, 0] and fall_animal_list != []: + # clock.tick(300) + for position in brick_position: + self.draw_brick(position[0], position[1]) + for animal_sprite in fall_animal_list: + animal_sprite.move(speed) + animal_sprite.draw(self.screen) + print('animal speed', animal_sprite.speed) + speed = animal_sprite.speed + pygame.display.flip() + + + + def judgeNext(self, type, score): + """判断下一步是过关还是失败""" + if type == 1: # 过关 + self.loadFnsWindow(score) + elif type == -1: # 过关失败 + self.loadFailWindow() + + def loadFailWindow(self): + """画失败板子及相关按钮""" + sound_sign = 0 + retry = Board(Board.replay, Board.button_position[1]) # 右再来一次按钮 + step_add = Board(Board.step_add, Board.button_position[0]) # 左再来5步按钮 + self.screen.blit(self.fail_board.image, self.fail_board.rect) # 过关失败板 + self.screen.blit(step_add.image, step_add.rect) + self.screen.blit(retry.image, retry.rect) + while self.fail_board.speed != [0, 0]: + self.draw() + self.screen.blit(self.fail_board.image, self.fail_board.rect) + self.fail_board.move() + pygame.display.flip() + if sound_sign == 0: + SoundPlay(SoundPlay.board_sound) + sound_sign = 1 + + def loadFnsWindow(self, score): + """过关成功及相关按钮""" + sound_sign = 0 + next_level = Board(Board.next, Board.button_position[1]) # 右下一关按钮 + replay = Board(Board.replay, Board.button_position[0]) # 左再来一次按钮 + self.screen.blit(self.success_board.image, self.success_board.rect) # 过关成功板 + self.screen.blit(next_level.image, next_level.rect) + self.screen.blit(replay.image, replay.rect) + while self.success_board.speed != [0, 0]: + self.draw() + self.screen.blit(self.success_board.image, self.success_board.rect) + self.success_board.move() + pygame.display.flip() + if sound_sign == 0: + SoundPlay(SoundPlay.board_sound) + sound_sign = 1 + self.displayStars(score) # 画星星 + # 画银币 + self.load_text(str(self.score*2), (Board.starts_position[0][0]+75, Board.starts_position[0][0]+46), 20, (0, 0, 0)) + + def displayStars(self, score): + """画星星""" + star1 = Board(Board.stars, Board.starts_position[0]) + star2 = Board(Board.stars, Board.starts_position[1]) + star3 = Board(Board.stars, Board.starts_position[2]) + if 0 <= score < self.min: + self.load_text(str(1), (Board.starts_position[1][0]+48, Board.starts_position[1][1]+35), 20, (0, 0, 0)) + self.screen.blit(star1.image, star1.rect) + elif self.min <= score <= self.max: + self.load_text(str(2), (Board.starts_position[1][0] + 48, Board.starts_position[1][1] + 35), 20, (0, 0, 0)) + self.screen.blit(star1.image, star1.rect) + self.screen.blit(star2.image, star2.rect) + elif score > self.max: + self.load_text(str(5), (Board.starts_position[1][0] + 48, Board.starts_position[1][1] + 35), 20, (0, 0, 0)) + self.screen.blit(star1.image, star1.rect) + self.screen.blit(star2.image, star2.rect) + self.screen.blit(star3.image, star3.rect) + # print("m.energy_num", self.energy_num) + pygame.display.flip() + + def set_level_mode(self, level): + """每关布局和规定步数""" + self.level = level + if self.reset_mode: # 如果需要重新布局 + self.num_sign = True + if level == 1: + self.__init__(7, 7) + self.animal[7][9] = self.animal[7][10] = self.animal[7][11] = self.animal[8][10] = self.animal[11][7] = \ + self.animal[11][13] = self.animal[12][7] = self.animal[12][8] = self.animal[12][12] = self.animal[12][13] = \ + self.animal[13][7] = self.animal[13][8] = self.animal[13][9] = self.animal[13][11] = self.animal[13][12] = \ + self.animal[13][13] = -1 + self.init_step = 17 # 规定17步 + elif level == 2: + self.__init__(4, 8) + self.init_step = 16 # 规定16步 + elif level == 3: + self.__init__(7, 7) + self.init_step = 18 # 规定18步 + elif level == 4: + self.__init__(9, 7) + row, col = self.row, self.col + self.animal[row][col] = self.animal[row][col+7] = self.animal[row][col+8] = self.animal[row+1][col+8] = \ + self.animal[row+5][col] = self.animal[row+6][col] = self.animal[row+6][col+1] = self.animal[row+6][col+8] = -1 + self.init_step = 20 + elif level == 5: + self.__init__(8, 9) + row, col = self.row, self.col + self.animal[row][col+7] = self.animal[row+2][col] = self.animal[row+5][col] = self.animal[row+3][col+7] = \ + self.animal[row+6][col+7] = self.animal[row+8][col] = -1 + self.init_step = 20 + elif level == 6: + self.__init__(9, 9) + row, col = self.row, self.col + self.animal[row][col] = self.animal[row][col+8] = self.animal[row+2][col+4] = self.animal[row+3][col+2] = \ + self.animal[row+3][col+6] = self.animal[row+8][col] = self.animal[row+8][col+8] = -1 + for i in range(row+4, row+6): + for j in range(col+3, col+6): + self.animal[i][j] = -1 + self.init_step = 28 + elif level == 7: + self.__init__(9, 9) + row, col = self.row, self.col + for i in range(row, row+9): + self.animal[i][col+4] = -1 + for j in range(col, col+4): + self.animal[row+3][j] = -1 + for j in range(col+5, col+9): + self.animal[row+5][j] = -1 + self.init_step = 25 + elif level == 8: + self.__init__(7, 8) + row, col = self.row, self.col + for i in range(row+2, row+5): + for j in range(col+1, col+6): + self.ice_list[i][j] = 1 + self.init_step = 21 + elif level == 9: + self.__init__(9, 9) + row, col = self.row, self.col + self.animal[row][col+4] = self.animal[row+4][col] = self.animal[row+4][col+8] = self.animal[row+8][col+4] = -1 + for i in range(row+1, row+8): + for j in range(col+1, col+8): + self.ice_list[i][j] = 1 + self.init_step = 35 + else: + self.__init__(9, 9) + row, col = self.row, self.col + for i in range(row, row+2): + for j in range(col, col+9): + self.animal[i][j] = -1 + self.animal[row][col+4] = random.randint(0, 5) + self.animal[row+1][col+2] = random.randint(0, 5) + self.animal[row+1][col+4] = random.randint(0, 5) + self.animal[row+1][col+6] = random.randint(0, 5) + self.animal[row+2][col+1] = self.animal[row+3][col+1] = self.animal[row+2][col+3] = self.animal[row+3][col+3] =\ + self.animal[row+2][col+5] = self.animal[row+3][col+5] = self.animal[row+2][col+7] = \ + self.animal[row+3][col+7] = self.animal[row+8][col] = self.animal[row+8][col+8] = -1 + for i in range(row+4, row+8): + for j in range(col, col+9): + self.ice_list[i][j] = 1 + self.ice_list[row+2][col+4] = self.ice_list[row+3][col+2] = self.ice_list[row+3][col+4] = \ + self.ice_list[row+3][col+6] = 1 + self.init_step = 40 + self.type = 0 + self.energy_num -= 5 + self.success_board = Board(Board.success_board, [200, 0]) # 过关成功板 + self.fail_board = Board(Board.fail_board, [200, 0]) # 任务失败板 + self.step = self.init_step + self.score = 0 + self.animal_num = [0, 0, 0, 0, 0, 0] + self.ice_num = 0 + self.reset_mode = False + + + + def num_add(self): + if self.num_sign: + self.money += self.score * 2 + if self.score < self.min: + self.energy_num += 1 + elif self.score < self.max: + self.energy_num += 2 + else: + self.energy_num += 5 + self.num_sign = False + + def judge_level(self): + """每关任务判断过关""" + if self.step <= 0: + self.type = -1 # 失败 + if self.level == 1: + if self.animal_num[4] >= 10: # 第一关任务消除2个青蛙 + self.type = 1 # 过关 + self.num_add() + elif self.level == 2: + if self.animal_num[1] >= 21: # 第二关任务21个熊 + self.type = 1 # 过关 + self.num_add() + elif self.level == 3: + if self.animal_num[4] >= 16 and self.animal_num[5] >= 16: # 第二关任务21个熊 + self.type = 1 # 过关 + self.num_add() + elif self.level == 4: + if self.animal_num[5] >= 18 and self.animal_num[2] >= 18: # 第二关任务21个熊 + self.type = 1 # 过关 + self.num_add() + + elif self.level == 5: + if self.animal_num[2] >= 28 and self.animal_num[0] >= 28: # 第二关任务21个熊 + self.type = 1 # 过关 + self.num_add() + + elif self.level == 6: + if self.animal_num[4] >= 70: # 第二关任务21个熊 + self.type = 1 # 过关 + self.num_add() + + elif self.level == 7: + if self.animal_num[2] >= 36 and self.animal_num[1] >= 36 and self.animal_num[0] >= 36: # 第二关任务21个熊 + self.type = 1 # 过关 + self.num_add() + + elif self.level == 8: + if self.ice_num >= 15: # 第二关任务21个熊 + self.type = 1 # 过关 + self.num_add() + + elif self.level == 9: + if self.ice_num >= 49: # 第二关任务21个熊 + self.type = 1 # 过关 + self.num_add() + + else: + if self.ice_num >= 39: # 第二关任务21个熊 + self.type = 1 # 过关 + self.num_add() + + self.judgeNext(self.type, self.score) + +