消消乐编程题python,python自动玩消消乐
本文主要是给大家带来一款还原度很高的自制娱乐~还等什么,拥有一款属于自己的“娱乐”游戏?赶紧学起来。
00-1010前言一、准备1.1图片素材1.2音频素材二、代码2.1导入模块2.2游戏音乐设置2.3制作树类2.4制作鼠标点击效果2.5制作出现元素2.6数组2.7制作人物画板三、效果展示(仅部分)3.1初始页面3.2第一级画面3.3失败画面3.4第十级画面需要6金币才能穿过云端,有的
目录
大家好!这就是魔王~
一天晚上,一颗神奇的豌豆种子从天而降,它刚好落在梦森林的村长家附近。
种子落地后,吸收池塘里的水,迅速生长,一夜之间成为参天的藤蔓.
第二天早上,当村民们醒来时,他们看到巨大的藤蔓感到震惊,并聚集在一起谈论它们。
有人说,他仿佛看见村长的房子在一根高耸入云的藤蔓上,房子似乎还在上升。有人呼吁它爬上去救救村长。玩家需要解决谜题,成功编写代码,清除游戏,拯救村长~
需要6个金币才能穿过云层到达更高的境界。有时候金币真的很重要。
今天这位博主就带大家做一个还原度很高的快乐娱乐~还等什么,亲手拥有一款属于自己的“娱乐”游戏?赶紧学起来吧~
前言
一、准备
1.1 图片素材
1.2 音频素材
二、代码
导入pygame
随机导入
从pygame.locals导入*
2.1 导入模块
类声音播放:
game _ bgm= sound/gamescenebbgm . ogg
world _ bgm= sound/worldscenebgm . ogg
消除=(声音/消除1.ogg ,声音/消除2.ogg ,声音/消除3.ogg ,声音/消除4.ogg ,\
声音/消除5.ogg) #消除声音
score_level=(sound/good.ogg , sound/great.ogg , sound/amazing.ogg ,\
声音/难以置信. ogg) #得分声
Click= sound/Click . bubble . ogg #单击选择声音。
Board_sound=sound/board.ogg #木板落下的声音
click _ button= sound/click _ common _ button . ogg # click按钮声音
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)
2.3 制作树类
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
2.4 制作鼠标点击效果
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
2.5 制作出现元素
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)
2.6 数组
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)):
2.7 制作人物画板
"""画任务板子"""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)
三、效果展示(仅部分)
3.1 初始页面
3.2 第一关画面
3.3 失败画面
3.4 第十关画面
以上就是基于Python实现开心消消乐小游戏的示例代码的详细内容,更多关于Python开心消消乐的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。