Python制作游戏原来这么简单 如何自制游戏

前言: 本期我们将制作一个拼图小游戏 。让我们愉快地开始吧~~~
先来看看效果是这样子的:

Python制作游戏原来这么简单 如何自制游戏

文章插图


开发工具 **Python版本:**3.6.4
私信小编01即可获取大量python学习资源
相关模块: pygame模块;
以及一些Python自带的模块
环境搭建 安装Python并添加到环境变量 , pip安装需要的相关模块即可 。
原理介绍 游戏简介: 将图像分为m×n个矩形块 , 并将图像右下角的矩形块替换为空白块后 , 将这些矩形块随机摆放成原图像的形状 。游戏目标为通过移动非空白块将随机摆放获得的图像恢复成原图像的模样 , 且规定移动操作仅存在于非空白块移动到空白块 。
例如下图所示:
Python制作游戏原来这么简单 如何自制游戏

文章插图


逐步实现: 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小编还为您精选了以下内容,希望对您有所帮助: