You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1369 lines
69 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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] # 四连消特效小动物所在位置 rowcol
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 转 xy坐标"""
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):
"""xy坐标转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 # 一次点击交换后消除的得分值
#
# # 根据得分差值播放不同声音画不同图片goodgreatamazingexcellentunbelievable
# 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 # 一次点击交换后消除的得分值
# 根据得分差值播放不同声音画不同图片goodgreatamazingexcellentunbelievable
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)