Python 消消乐游戏:图形化界面和鼠标操作示例代码
好的,以下是一个基本的消消乐游戏的示例代码,使用了 Python 语言以及 Pygame 库来实现图形化界面和鼠标操作:
import pygame
import random
# 定义游戏界面大小常量
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
# 定义方块宽度和高度常量
BLOCK_SIZE = 50
# 定义颜色常量
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# 初始化 Pygame
pygame.init()
# 创建游戏界面
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('消消乐游戏')
# 加载方块图片
block_images = [
pygame.image.load('block_red.png').convert_alpha(),
pygame.image.load('block_green.png').convert_alpha(),
pygame.image.load('block_blue.png').convert_alpha(),
pygame.image.load('block_yellow.png').convert_alpha(),
]
# 随机生成一组方块
def generate_blocks():
blocks = []
for row_index in range(8):
row = []
for col_index in range(8):
block_type = random.randint(0, len(block_images) - 1)
block_image = block_images[block_type]
block_rect = block_image.get_rect()
block_rect.x = col_index * BLOCK_SIZE
block_rect.y = row_index * BLOCK_SIZE
row.append({
'type': block_type,
'image': block_image,
'rect': block_rect,
'selected': False,
})
blocks.append(row)
return blocks
# 绘制方块
def draw_blocks(blocks):
for row in blocks:
for block in row:
screen.blit(block['image'], block['rect'])
# 获取点击位置所在的方块
def get_block_by_pos(blocks, pos):
for row in blocks:
for block in row:
if block['rect'].collidepoint(pos):
return block
return None
# 获取相邻的方块
def get_adjacent_blocks(blocks, block):
adjacent_blocks = []
row_index = block['rect'].y // BLOCK_SIZE
col_index = block['rect'].x // BLOCK_SIZE
if row_index > 0:
adjacent_blocks.append(blocks[row_index - 1][col_index])
if row_index < 7:
adjacent_blocks.append(blocks[row_index + 1][col_index])
if col_index > 0:
adjacent_blocks.append(blocks[row_index][col_index - 1])
if col_index < 7:
adjacent_blocks.append(blocks[row_index][col_index + 1])
return adjacent_blocks
# 消除相邻的相同颜色方块
def remove_adjacent_blocks(blocks, block):
block_type = block['type']
block['selected'] = True
for adjacent_block in get_adjacent_blocks(blocks, block):
if (not adjacent_block['selected']) and (adjacent_block['type'] == block_type):
remove_adjacent_blocks(blocks, adjacent_block)
# 移除已经被标记为选中的方块
def remove_selected_blocks(blocks):
for row in blocks:
for block in row:
if block['selected']:
row.remove(block)
while None in row:
row.remove(None)
# 移动方块
def move_blocks(blocks):
for col_index in range(8):
empty_row_index = None
for row_index in range(8):
if blocks[row_index][col_index] is None:
empty_row_index = row_index
elif empty_row_index is not None:
blocks[empty_row_index][col_index] = blocks[row_index][col_index]
blocks[row_index][col_index] = None
empty_row_index += 1
if empty_row_index >= 8:
break
if empty_row_index is not None:
for row_index in range(empty_row_index, 8):
block_type = random.randint(0, len(block_images) - 1)
block_image = block_images[block_type]
block_rect = block_image.get_rect()
block_rect.x = col_index * BLOCK_SIZE
block_rect.y = row_index * BLOCK_SIZE
blocks[row_index][col_index] = {
'type': block_type,
'image': block_image,
'rect': block_rect,
'selected': False,
}
# 绘制得分
def draw_score(score):
font = pygame.font.Font(None, 36)
text = font.render('得分: %d' % score, True, WHITE)
screen.blit(text, (10, 10))
# 主循环
def main():
# 生成方块
blocks = generate_blocks()
# 初始化得分
score = 0
# 游戏循环
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
return
elif event.type == pygame.MOUSEBUTTONDOWN:
# 点击鼠标按钮
block = get_block_by_pos(blocks, event.pos)
if block is not None:
remove_adjacent_blocks(blocks, block)
remove_selected_blocks(blocks)
move_blocks(blocks)
score += 10
# 绘制游戏界面
screen.fill(BLACK)
draw_blocks(blocks)
draw_score(score)
pygame.display.update()
# 启动游戏
if __name__ == '__main__':
main()
这个示例代码使用了 Pygame 库来实现游戏界面和鼠标操作,具体的实现过程可以参考代码中的注释说明。在代码中,随机生成了一组方块,并在用户点击方块时实现了消除相邻相同颜色方块的功能,同时还实现了得分统计和方块移动等功能。你可以根据自己的需要进行修改和扩展,实现更加丰富的游戏玩法。
原文地址: https://www.cveoy.top/t/topic/oSmq 著作权归作者所有。请勿转载和采集!