相关文件

想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
需要源码的小伙伴可以在公众号回复 拼图
Python源码、问题解答学习交流群:773162165

开发环境

Python版本:3.6.7
相关模块:
pygame
random
sys
cfg
os
以及一些python自带的模块。

环境搭建

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

效果展示

开始界面

选择M,是一个4x4的界面

完成拼图

代码实现

主函数

def main():# 初始化pygame.init()clock = pygame.time.Clock()# 加载图片game_img_used = pygame.image.load(GetImagePath(cfg.PICTURE_ROOT_DIR))game_img_used = pygame.transform.scale(game_img_used, cfg.SCREENSIZE)game_img_used_rect = game_img_used.get_rect()# 设置窗口screen = pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption('拼图游戏 公众号:Python日志 学习交流群:773162165')# 游戏开始界面size = ShowStartInterface(screen, game_img_used_rect.width, game_img_used_rect.height)assert isinstance(size, int)num_rows, num_cols = size, sizenum_cells = size * size# 计算Cell大小cell_width = game_img_used_rect.width // num_colscell_height = game_img_used_rect.height // num_rows# 避免初始化为原图while True:game_board, blank_cell_idx = CreateBoard(num_rows, num_cols, num_cells)if not isGameOver(game_board, size):break# 游戏主循环is_running = Truewhile is_running:# --事件捕获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 == pygame.K_LEFT or event.key == ord('a'):blank_cell_idx = moveL(game_board, blank_cell_idx, num_cols)elif event.key == pygame.K_RIGHT or event.key == ord('d'):blank_cell_idx = moveR(game_board, blank_cell_idx, num_cols)elif event.key == pygame.K_UP or event.key == ord('w'):blank_cell_idx = moveU(game_board, blank_cell_idx, num_rows, num_cols)elif event.key == pygame.K_DOWN or event.key == ord('s'):blank_cell_idx = moveD(game_board, blank_cell_idx, num_cols)# ----鼠标操作elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:x, y = pygame.mouse.get_pos()x_pos = x // cell_widthy_pos = y // cell_heightidx = x_pos + y_pos * num_colsif 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 - 1is_running = False# --更新屏幕screen.fill(cfg.BACKGROUNDCOLOR)for i in range(num_cells):if game_board[i] == -1:continuex_pos = i // num_colsy_pos = i % num_colsrect = pygame.Rect(y_pos*cell_width, x_pos*cell_height, cell_width, cell_height)img_area = pygame.Rect((game_board[i]%num_cols)*cell_width, (game_board[i]//num_cols)*cell_height, cell_width, cell_height)screen.blit(game_img_used, rect, img_area)for i in range(num_cols+1):pygame.draw.line(screen, cfg.BLACK, (i*cell_width, 0), (i*cell_width, game_img_used_rect.height))for i in range(num_rows+1):pygame.draw.line(screen, cfg.BLACK, (0, i*cell_height), (game_img_used_rect.width, i*cell_height))pygame.display.update()clock.tick(cfg.FPS)# 游戏结束界面ShowEndInterface(screen, game_img_used_rect.width, game_img_used_rect.height)

随机获取打乱的拼图

def CreateBoard(num_rows, num_cols, num_cells):board = []for i in range(num_cells): board.append(i)# 去掉右下角那块blank_cell_idx = num_cells - 1board[blank_cell_idx] = -1for i in range(cfg.NUMRANDOM):# 0: left, 1: right, 2: up, 3: downdirection = 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

游戏开始界面

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()

游戏结束界面

def ShowEndInterface(screen, width, height):screen.fill(cfg.BACKGROUNDCOLOR)font = pygame.font.Font(cfg.FONTPATH, width//15)title = font.render('恭喜! 你成功完成了拼图!', True, (233, 150, 122))rect = title.get_rect()rect.midtop = (width/2, height/2.5)screen.blit(title, rect)pygame.display.update()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()pygame.display.update()

公众号【Python日志】
需要源码的小伙伴可以在公众号回复 拼图

【Python游戏】Python基于pygame和random模块开发的一个拼图小游戏 | 附带源码相关推荐

  1. 【Python游戏】用Python实现一个测试你智商的小游戏——24点,过不了三关的都是细狗 | 附带源码

    前言 好咯,包子们下午好 今天小编主要是过来测试一下大家的智商,没别的意思,不是看不起大家,我感觉今天实现的小游戏,可能大家真的过不了三关! 哈哈哈,废话不多说吧 直接开始我们的游戏实现功能 相关文件 ...

  2. 【Python项目】520必备表白神器合集,程序员的浪漫 | 附带源码

    相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 公众号:Python日志 可以关注小编公众号,会不定时的发布一下Python小技巧,还有很多资源可以免费领取哟!! 源码领取:加Pyth ...

  3. v3s 全志_基于全志V3s的开源开发板,提供pcb和系统源码和资料

    Blueberry PI 开源地址: https://github.com/petit-miner/Blueberry-PI 蓝莓PI 我设计了这块PCB,因为这款SoC的功率非常低,功耗非常低,再加 ...

  4. 基于Android开发的在线考试系统(附带源码)

    管理员:管理员使用本系统涉到的功能主要有:首页.个人中心.学生管理.教师管理.考试公告管理.管理员管理.试题管理.试卷管理.系统管理.考试管理等功能. 教师:教师进入app可以对:首页.个人中心.学生 ...

  5. c语言控制台小游戏是什么意思,闲来没事撸了一个控制台小游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define MAXLEVEL 5 #define LEVELS 4 #defi ...

  6. 微信小程序开发拼图小游戏

    闲来无事,自己用微信小程序开发了一个拼图小游戏玩,大概效果就是这样的: 大概效果就是这样,感兴趣的小伙伴可以看一下,需要代码请留言自己的微信.

  7. python大作业数独_python做一个数独小游戏

    最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...

  8. 【java】JavaFX从零开始实现拼图小游戏

    最近java课老师布置了一个作业:制作一个拼图小游戏,关键老师自己说javaGUI编程没用,讲课的时候好像跳过了(没去上课不过我猜应该没讲吧),现在又叫我们做这些,实在是哭笑不得. 得了吧,老师的任务 ...

  9. 使用Grid布局制作拼图小游戏

    在学习grid布局时突发奇想利用这个布局的特性做一个拼图小游戏 先简单实现了一个demo,后期再优化,效果如下图: 先上一下主要的css样式 .container {display: inline-g ...

  10. 用Python写一个双人对战足球小游戏,堪比国足的技术【附带源码】

    开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理介绍 这是一个 ...

最新文章

  1. python 集合的使用
  2. PowerShell攻防进阶篇:nishang工具用法详解
  3. Hadoop权威指南阅读笔记
  4. 数据库操作之增删改查CRUD
  5. matlab win10 gpu加速,win10的Edge浏览器设置GPU硬件加速,大幅度提升浏览器性能
  6. 图形学之开篇概念及综述
  7. 4.[attribute!=value]属性选择器
  8. UAV 无人机检测实践分析
  9. python orm开发模型_Python ORM框架Peewee初探【二】创建或者生成模型
  10. pe系统测试软件,使用PE系统显示器测试工具检测电脑屏幕的方法
  11. Arangodb Basic CRUD
  12. oCPC实践录 | 成本优化策略之eCPC(1)
  13. 车牌识别matlab实现(蓝色车牌和新能源车牌)
  14. fatal: the remote end hung up unexpectedly问题解决办法
  15. 【TcaplusDB知识库】Tcaplus-JDBC开发入门指南
  16. 基于html+JS实现canvas简易画图工具
  17. 云影数码工作室-创业计划书
  18. springboot连接远程Redis
  19. 【大数据24小时】大数据溯源玫瑰花;流量漫游费将如期取消
  20. 图像仿射变换原理2:矩阵变换、线性变换和图像线性变换矩阵

热门文章

  1. 极路由3刷老毛子稳定使用锐捷教程
  2. DNS Server
  3. python HtmlTestRunner python2.x python3.x报告优化模板源码下载
  4. 假日活动的背后,酷开网络再造OTT营销的“价值高地”
  5. select2 使用详解
  6. Acer e5-571g 完美黑苹果10.13
  7. Linux编译并更新内核(替换Linux内核)
  8. LintCode 交叉字符串
  9. c语言自行车租赁系统,winform 自行车租赁系统(含数据库)
  10. 用命令提示符使用MySQL