消消乐编程题python,python自动玩消消乐

  消消乐编程题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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: