好的,以下是一个基本的消消乐游戏的示例代码,使用了 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 库来实现游戏界面和鼠标操作,具体的实现过程可以参考代码中的注释说明。在代码中,随机生成了一组方块,并在用户点击方块时实现了消除相邻相同颜色方块的功能,同时还实现了得分统计和方块移动等功能。你可以根据自己的需要进行修改和扩展,实现更加丰富的游戏玩法。

Python 消消乐游戏:图形化界面和鼠标操作示例代码

原文地址: https://www.cveoy.top/t/topic/oSmq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录