前言: 本期我们将制作一个拼图小游戏 。让我们愉快地开始吧~~~
先来看看效果是这样子的:
文章插图
开发工具 **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 3elif event.key == ord('m'): return 4elif event.key == ord('h'): return 5pygame.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] return blank_cell_idx + num_cols复制代码
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 5款免费制造电子名片的工具 制作名片用什么软件好
- 春饼面怎么和才能软软的 春饼的制作方法
- 腊八蒜可以用乐扣盒子制作吗
- 教你把照片制作mv视频 怎么制作mv视频加带字
- 游戏简洁有寓意的名字,有深意好听的游戏名字
- 萝卜蹲名字
- 小黑猫是什么意思
- 微星游戏本深度评测 微星游戏本怎么样
- 拯救者R7000开箱评测 拯救者游戏本怎么样
- 双飞燕J95游戏鼠标开箱测评 双飞燕鼠标怎么样