Pygame游戏实战五:拼图游戏

介绍模块

本游戏使用的是由Pycharm中的pygame模块来实现的,也可以在python中运行。通过Pygame制作一个拼图游戏,将一个完整的图片进行随机切分,在将其进行还原成完整的图像,看看这个是你小时候玩的游戏吗?

最小开发框架

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

Pygame和sys模块

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

random模块

需要在屏幕上随机生成食物的位置,通过随机一个位置来表示食物的位置

from random import randint

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

相关功能  

【童年游戏】拼图游戏

随机生成游戏盘面

生成一个新的游戏界面,并随即移动图块 max_rand_time 次,得到随机的游戏界面

def newGameBoard():
    # 生成一个新的游戏盘面。首先创建一个长度为cell_nums的列表,其中每个元素都是其在列表中的位置。然后将最后一个元素(即右下角的空白块)的值设为-1
    board = []
    for i in range(cell_nums):
        board.append(i)
    black_cell = cell_nums - 1
    board[black_cell] = -1

    # 随机移动拼图块max_rand_time次,生成随机的游戏盘面
    for i in range(max_rand_time):
        direction = random.randint(0, 3)
        if direction == 0:
            black_cell = moveLeft(board, black_cell)
        elif direction == 1:
            black_cell = moveRight(board, black_cell)
        elif direction == 2:
            black_cell = moveUp(board, black_cell)
        elif direction == 3:
            black_cell = moveDown(board, black_cell)
    return board, black_cell

键盘事件

# 按下方向键或者字母键,则移动方块
        if event.type == KEYDOWN:
            if event.key == K_LEFT or event.key == ord('a'):
                black_cell = moveLeft(gameBoard, black_cell)
            if event.key == K_RIGHT or event.key == ord('d'):
                black_cell = moveRight(gameBoard, black_cell)
            if event.key == K_UP or event.key == ord('w'):
                black_cell = moveUp(gameBoard, black_cell)
            if event.key == K_DOWN or event.key == ord('s'):
                black_cell = moveDown(gameBoard, black_cell)

鼠标事件

        # 点击鼠标左键,则移动方块
        if event.type == MOUSEBUTTONDOWN and event.button == 1:
            x, y = pygame.mouse.get_pos()
            col = int(x / cellWidth)
            row = int(y / cellHeight)
            index = col + row * ROWS
            if index == black_cell - 1 or index == black_cell + 1 or index == black_cell - ROWS or index == black_cell + ROWS:
                gameBoard[black_cell], gameBoard[index] = gameBoard[index], gameBoard[black_cell]
                black_cell = index

拼图完成

    # 如果拼图已经完成,则将黑色方块移回右下角,并标记游戏结束
    if isFinished(gameBoard):
        gameBoard[black_cell] = cell_nums - 1
        finish = True

绘制网格线

# 绘制拼图的网格线
    for i in range(ROWS + 1):
        pygame.draw.line(windowSurface, BLACK, (i * cellWidth, 0), (i * cellWidth, gameRect.height))
    for i in range(ROWS + 1):
        pygame.draw.line(windowSurface, BLACK, (0, i * cellHeight), (gameRect.width, i * cellHeight))

图片界面

扩展可添加功能

1.图块增加

2.增加游戏事件

3.增加关卡

源码获取

mzc421/PyGame: 使用Pygame 来制作各种有趣的经典游戏 (github.com)

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

​​

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

猜你喜欢

转载自blog.csdn.net/qq_48764574/article/details/134615436