前言:
本期我们将制作一个拼图小游戏 。让我们愉快地开始吧~~~
先来看看效果是这样子的:
开发工具
**Python版本:**3.6.4
私信小编01即可获取大量python学习资源
相关模块:
pygame模块;
以及一些Python自带的模块
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可 。
原理介绍游戏简介:
将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状 。游戏目标为通过移动非空白块将随机摆放获得的图像恢复成原图像的模样,且规定移动操作仅存在于非空白块移动到空白块 。
例如下图所示:
逐步实现:Step1:游戏初始界面
既然是游戏,总得有个初始界面吧?
OK,我们先写一个游戏初始界面:
'''显示游戏开始界面'''
def ShowStartInterface(screen, width, height):
screen.fill(cfg.BACKGROUNDCOLOR)
tfont = pygame.font.Font(cfg.FONTPATH, width//4)
cfont = pygame.font.Font(cfg.FONTPATH, width//20)
title = tfont.render('拼图游戏', True, cfg.RED)
content1 = cfont.render('按H或M或L键开始游戏', True, cfg.BLUE)
content2 = cfont.render('H为5*5模式, M为4*4模式, L为3*3模式', True, cfg.BLUE)
trect = title.get_rect()
trect.midtop = (width/2, height/10)
crect1 = content1.get_rect()
crect1.midtop = (width/2, height/2.2)
crect2 = content2.get_rect()
crect2.midtop = (width/2, height/1.8)
screen.blit(title, trect)
screen.blit(content1, crect1)
screen.blit(content2, crect2)
while True:
for event in pygame.event.get():
if (event.type == pygame.QUIT) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == ord('l'): return 3
elif event.key == ord('m'): return 4
elif event.key == ord('h'): return 5
pygame.display.update()
复制代码
根据玩家自身水平,可以选择不同难度的拼图游戏 。
Step2:定义移动操作
定义移动操作的目的是为了移动拼图(好像是废话T_T),具体实现起来十分简单:
'''将空白Cell左边的Cell右移到空白Cell位置'''
def moveR(board, blank_cell_idx, num_cols):
if blank_cell_idx % num_cols == 0: return blank_cell_idx
board[blank_cell_idx-1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-1]
return blank_cell_idx – 1
'''将空白Cell右边的Cell左移到空白Cell位置'''
def moveL(board, blank_cell_idx, num_cols):
if (blank_cell_idx+1) % num_cols == 0: return blank_cell_idx
board[blank_cell_idx+1], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+1]
return blank_cell_idx + 1
'''将空白Cell上边的Cell下移到空白Cell位置'''
def moveD(board, blank_cell_idx, num_cols):
if blank_cell_idx < num_cols: return blank_cell_idx
board[blank_cell_idx-num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx-num_cols]
return blank_cell_idx – num_cols
'''将空白Cell下边的Cell上移到空白Cell位置'''
def moveU(board, blank_cell_idx, num_rows, num_cols):
if blank_cell_idx >= (num_rows-1) * num_cols: return blank_cell_idx
board[blank_cell_idx+num_cols], board[blank_cell_idx] = board[blank_cell_idx], board[blank_cell_idx+num_cols]
推荐阅读
- 野生动物与自然保护区管理专业就业方向与就业前景怎么样
- 自然保护区建设与管理专业就业方向与就业前景怎么样
- 元气骑士怎么换人物,元气骑士怎么更换人物
- 元气骑士修改教程 怎么修改元气骑士文件
- 元气骑士皮肤全解锁 元气骑士皮肤怎么解锁
- 元气骑士武器怎么合成,元气骑士武器怎么合成?
- 元气骑士怎么修改文件 元气骑士文件修改教程
- 元气骑士怎么兑换礼包 元气骑士怎么兑换礼包码?
- 元气骑士找回云存档 元气骑士存档丢了该怎么找回
- 万国觉醒怎么解除未成年,万国觉醒已经绑定了未成年怎么改