Pygame游戏实战八:消除方块

2023-12-16 17:59:48

介绍模块

本游戏使用的是由Pycharm中的pygame模块来实现的,也可以在python中运行。通过Pygame制作一个类似与消消乐的游戏,通过交换方块颜色,来进行消除。

最小开发框架

详情请看此文章:
Pygame游戏模块介绍二:最小开发框架代码_pygame最小开发框架_牧子川的博客-CSDN博客

Pygame和sys模块

import?pygame?#?制作游戏时要使用的模块
import sys # python的标准库,对内部各功能模块进行初始化创建,系统模块

random模块

需要在屏幕上随机生成位置

from random import randint

详情请看此文章:Pygame游戏模块介绍一:random模块简介_random 范围_牧子川的博客-CSDN博客

相关功能??

【童年游戏】消除方块

初始化方块

创建游戏中需要进行消除的方块

# 初始化相邻方块的颜色
for row in range(ROWS):
    for col in range(COLS):
        possible_colors = [RED, GREEN, BLUE]
        if col > 0:
            possible_colors.remove(board[row][col - 1])
        if row > 0:
            try:
                possible_colors.remove(board[row - 1][col])
            except:
                pass
        # 在这里使用 random.choice 而不是 random.sample
        board[row][col] = random.choice(possible_colors)

查找相邻颜色的方块

当进行交换方块时,进行判断是否有颜色相同的方块

def check_neighbors(row, col, color, visited, direction=None):
    if row < 0 or row >= ROWS or col < 0 or col >= COLS or visited[row][col] or board[row][col] != color:
        return

    visited[row][col] = True
    to_clear.append((row, col))

    if direction != 'up':
        check_neighbors(row + 1, col, color, visited, direction='down')
    if direction != 'down':
        check_neighbors(row - 1, col, color, visited, direction='up')
    if direction != 'left':
        check_neighbors(row, col + 1, color, visited, direction='right')
    if direction != 'right':
        check_neighbors(row, col - 1, color, visited, direction='left')

方块消除

判断行或列中相同颜色的方块是否超过3个,如果是则进行消除

                if len(to_clear) >= 3:
                    # 清除相同颜色的方块
                    for row, col in to_clear:
                        board[row][col] = WHITE

                    # 补全方块
                    for col in range(COLS):
                        non_white_blocks = [board[row][col] for row in range(ROWS) if board[row][col] != WHITE]
                        non_white_blocks += [WHITE] * (ROWS - len(non_white_blocks))
                        for row in range(ROWS):
                            board[row][col] = non_white_blocks[row]

                else:
                    # 如果没有超过3个一样的颜色,则还原交换前的位置
                    board[selected_block[0]][selected_block[1]], board[clicked_row][clicked_col] = \
                        board[clicked_row][clicked_col], board[selected_block[0]][selected_block[1]]

                # 交换后清空选择
                selected_block = None

图片界面

?

?

扩展可添加功能

1.对游戏中消除的方式进行改进

2.增加更加复杂的关卡

3.增加时间限制

4.增加音效

5.增加能够连续出现的方块

源码获取

PyGame/消除方块 at main · mzc421/PyGame (github.com)

?欢迎关注我的公众号:@AI算法与电子竞赛 ? ?

????

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

文章来源:https://blog.csdn.net/qq_48764574/article/details/134864474
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。