您的位置 首页 > 娱乐休闲

Python制作游戏原来这么简单,手把手教你制作拼图类益智游戏

前言:

本期我们将制作一个拼图小游戏。让我们愉快地开始吧~~~

先来看看效果是这样子的:

开发工具

**Python版本:**3.6.4

私信小编01即可获取大量python学习资源

相关模块:

pygame模块;

以及一些Python自带的模块

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理介绍

游戏简介:

将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状。游戏目标为通过移动非空白块将随机摆放获得的图像恢复成原图像的模样,且规定移动操作仅存在于非空白块移动到空白块。

例如下图所示:

逐步实现:

Step1:游戏初始界面

既然是游戏,总得有个初始界面吧?

OK,我们先写一个游戏初始界面:

'''显示游戏开始界面''' def ShowStartInterface(screen, width, height): ) tfont = , width//4) cfont = , width//20) title = ('拼图游戏', True, c) content1 = c('按H或M或L键开始游戏', True, c) content2 = c('H为5*5模式, M为4*4模式, L为3*3模式', True, c) trect = () = (width/2, height/10) crect1 = con() crec = (width/2, heig) crect2 = con() crec = (width/2, heig) (title, trect) (content1, crect1) (content2, crect2) while True: for event in (): if == ) or == and event.key == ): () () elif event.type == : if event.key == ord('l'): return 3 elif event.key == ord('m'): return 4 elif event.key == ord('h'): return 5 () 复制代码

根据玩家自身水平,可以选择不同难度的拼图游戏。

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 复制代码

Step3:游戏主界面

OK,有了前面的铺垫,我们可以开始实现我们的游戏主界面了。

首先,我们需要打乱拼图, 但是随机打乱很可能导致拼图无解,因此我们通过随机移动拼图来实现打乱拼图的效果 ,这也是我们先定义拼图的移动操作的主要原因:

'''获得打乱的拼图''' def CreateBoard(num_rows, num_cols, num_cells): board = [] for i in range(num_cells): board.append(i) # 去掉右下角那块 blank_cell_idx = num_cells - 1 board[blank_cell_idx] = -1 for i in range): # 0: left, 1: right, 2: up, 3: down direction = random.randint(0, 3) if direction == 0: blank_cell_idx = moveL(board, blank_cell_idx, num_cols) elif direction == 1: blank_cell_idx = moveR(board, blank_cell_idx, num_cols) elif direction == 2: blank_cell_idx = moveU(board, blank_cell_idx, num_rows, num_cols) elif direction == 3: blank_cell_idx = moveD(board, blank_cell_idx, num_cols) return board, blank_cell_idx 复制代码

游戏主界面初始化:

最后实现主界面的显示刷新以及事件响应等功能:

while True: game_board, blank_cell_idx = CreateBoard(num_rows, num_cols, num_cells) if not isGameOver(game_board, size): break # 游戏主循环 is_running = True while is_running: # --事件捕获 for event in (): # ----退出游戏 if == ) or == and event.key == ): () () # ----键盘操作 elif event.type == : if event.key == or event.key == ord('a'): blank_cell_idx = moveL(game_board, blank_cell_idx, num_cols) elif event.key == or event.key == ord('d'): blank_cell_idx = moveR(game_board, blank_cell_idx, num_cols) elif event.key == or event.key == ord('w'): blank_cell_idx = moveU(game_board, blank_cell_idx, num_rows, num_cols) elif event.key == or event.key == ord('s'): blank_cell_idx = moveD(game_board, blank_cell_idx, num_cols) # ----鼠标操作 elif event.type == and event.button == 1: x, y = () x_pos = x // cell_width y_pos = y // cell_height idx = x_pos + y_pos * num_cols if idx == blank_cell_idx-1: blank_cell_idx = moveR(game_board, blank_cell_idx, num_cols) elif idx == blank_cell_idx+1: blank_cell_idx = moveL(game_board, blank_cell_idx, num_cols) elif idx == blank_cell_idx+num_cols: blank_cell_idx = moveU(game_board, blank_cell_idx, num_rows, num_cols) elif idx == blank_cell_idx-num_cols: blank_cell_idx = moveD(game_board, blank_cell_idx, num_cols) # --判断游戏是否结束 if isGameOver(game_board, size): game_board[blank_cell_idx] = num_cells - 1 is_running = False # --更新屏幕 ) for i in range(num_cells): if game_board[i] == -1: continue x_pos = i // num_cols y_pos = i % num_cols rect = (y_pos*cell_width, x_pos*cell_height, cell_width, cell_height) img_area = ((game_board[i]%num_cols)*cell_width, (game_board[i]//num_cols)*cell_height, cell_width, cell_height) (game_img_used, rect, img_area) for i in range(num_cols+1): (screen, c, (i*cell_width, 0), (i*cell_width, game_img_u)) for i in range(num_rows+1): (screen, c, (0, i*cell_height), , i*cell_height)) () clock.tick) 复制代码

Step4:游戏结束界面

当玩家完成拼图后,需要显示游戏结束界面,和游戏初始界面类似,实现起来都比较简单:

'''显示游戏结束界面''' def ShowEndInterface(screen, width, height): ) font = , width//15) title = ('恭喜! 你成功完成了拼图!', True, (233, 150, 122)) rect = () rect.midtop = (width/2, heig) (title, rect) () while True: for event in (): if == ) or == and event.key == ): () () () 复制代码

文章到这里就结束了,感谢你的观看

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何用ppt制作游戏,如何用PPT制作游戏视频,如何ppt制作,如何用ppt模板制作自己的ppt”边界阅读