介绍模块
本游戏使用的是由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算法与电子竞赛
硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!