如何用Python做一个三阶拼图?
转载自品略图书馆 http://www.pinlue.com/article/2020/08/0911/3411120197743.html
用python做一个三阶拼图
程序介绍
先上图让大家感受一下
程序的功能很简单,还是之前我们用到的pygame和随机数的知识,整个流程非常的清晰,但是我们需要注意:该游戏如果直接在地图的二维数组上进行随机打乱,是会很大几率出现无解的情况。所以,我是在拼好的基础上采用随机移动(按照游戏规则来移动)的思路进行地图打乱。
具体实现
随意的找一张照片跟代码文件放在同一文件文件夹下就可以。
import randomimport pygame# 初始化pygame.init()# 窗口标题pygame.display.set_caption("Ahab杂货铺拼图游戏")# 窗口大小s = pygame.display.set_mode((1200, 600))
然后进行游戏初始化,设置标题和游戏界面的大小。
# 绘图地图imgMap = [ [0, 1, 2], [3, 4, 5], [6, 7, 8]]# 判断胜利的地图winMap = [ [0, 1, 2], [3, 4, 5], [6, 7, 8]]
绘制初始地图并且设置胜利地图,这里使用数组的方式进行处理。
# 游戏的单击事件def click(x, y, map): if y - 1 >= 0 and map[y - 1][x] == 8: map[y][x], map[y - 1][x] = map[y - 1][x], map[y][x] elif y + 1 <= 2 and map[y + 1][x] == 8: map[y][x], map[y + 1][x] = map[y + 1][x], map[y][x] elif x - 1 >= 0 and map[y][x - 1] == 8: map[y][x], map[y][x - 1] = map[y][x - 1], map[y][x] elif x + 1 <= 2 and map[y][x + 1] == 8: map[y][x], map[y][x + 1] = map[y][x + 1], map[y][x]
这里需要设置游戏的点击事件,简单的说就是鼠标点击图片进行移动的逻辑,主要的逻辑代码就是做了if判断,比较容易理解。
# 打乱地图def randMap(map): for i in range(1000): x = random.randint(0, 2) y = random.randint(0, 2) click(x, y, map)
使用随机数的方式将地图进行打乱。
# 加载图片img = pygame.image.load("2.jpg")# 随机地图randMap(imgMap)# 游戏主循环while True: # 延时32毫秒,相当于FPS=30 pygame.time.delay(32) for event in pygame.event.get(): # 窗口的关闭事件 if event.type == pygame.QUIT: exit() elif event.type == pygame.MOUSEBUTTONDOWN: if pygame.mouse.get_pressed() == (1, 0, 0): mx, my = pygame.mouse.get_pos() if mx < 498 and my < 498: x = int(mx / 166) y = int(my / 166) click(x, y, imgMap) if imgMap == winMap: print("成功!")
加载我们的照片,并且将地图进行随机打乱。设置游戏的主循环,获取鼠标的坐标,判断鼠标是否在操作范围内,计算鼠标点击的图块,判断操作是否成功。
# 背景色填充成绿色 s.fill((0, 255, 0)) # 绘图 for y in range(3): for x in range(3): i = imgMap[y][x] if i == 8: # 8号图块不用绘制 continue dx = (i % 3) * 166 # 计算绘图偏移量 dy = (int(i / 3)) * 166 s.blit(img, (x * 166, y * 166), (dx, dy, 166, 166)) # 画参考图片 s.blit(img, (500, 0)) # 刷新界面 pygame.display.flip()
将背景进行填充,绘制图片和设置参考图片。
<END>
如何用Python做一个三阶拼图?相关推荐
- 【Python】如何用python做一个简单的输入输出交互界面?
看到知乎上有人在问,如何使用Python做一个简单的输入输出交互界面? 交互界面就涉及到GUI编程. Python有很多GUI框架,功能大同小异. 其中比较出名的有「PyQT」.**wxPython. ...
- 如何用python做一个会聊天的女朋友_戏精程序员,用python开发了一个女朋友,天天秀恩爱...
很多人都知道,程序员大部分都是单身狗,然而,无奈Python实在太强大,居然可以用来开发一个女朋友出来. 其实,这个女朋友类似很多视频中,那些假装自己有女朋友或男朋友的人一样,也是在假装哦,但是程序员 ...
- 如何用python做一个简单的输入输出交互界面?
大家好,我是一行 想问下你写的程序怎么分享给别人使用? **直接发代码!**那不会代码的人岂不是得抓瞎 **那做成网站或者微信小程序!**时间成本太高了,更何况服务器又是一笔成本,后期可能还得不断维护 ...
- 如何用 Python 做一个简单的翻译工具?
前言 平时经常在网上翻译一些单词,突发奇想,可不可以直接调某些免费翻译网站的接口呢?然后做一个图形界面的翻译小工具?下面开始实践 (文末送读者福利) 1.先找一下有哪些免费翻译的接口 百度了一下关键字 ...
- 如何用Python做一个游戏防沉迷程序
如何用Python给游戏加防沉迷 又名:我杀我自己 重点参考 [实战案例]利用Python做出趣味版防沉迷小程序 Python3.7将代码打包成exe程序并添加图标,一分钟学会! 代码 #这是一个防沉 ...
- 如何用python做一个会聊天的女朋友_520来啦~教你用Python给自己造了一个女朋友!...
520这一天,也是网络情人节.就在那天,如果没有女朋友的自己,如何假装自己是有朋友的!如何在朋友圈"秀恩爱. 女生版: image 很有感觉有木有~~ 男生版: image image 其实 ...
- 如何用python做一个时钟_Python使用turtle库制作一个时钟
前言 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在 ...
- 【摸鱼系列】如何用Python做一个有趣的Loading彩蛋游戏~
嗨害大家好鸭!我是小熊猫❤ 不知道大家有没有在摸鱼的时候玩过它~ 这是谷歌流量器中很有名的彩蛋: 当你网络出现问题时,就会出现一个"小恐龙游戏". 当然你如果想要直接进行游戏,可以 ...
- 如何用python做一个简单好用的计算器
1 ui设计 使用qt designer ,按装anaconda后,在如下路径找到: conda3.05\Library\bin designer.exe文件,双击启动: 创建窗体,命名为XiaoDi ...
最新文章
- javascript使用Json总结
- java+自定义异常类+输入若干成绩 为负数时输出抛出异常_java+自定义异常类+输入若干成绩 为...
- Netflix Curator 使用 Zookeeper 编程
- HDU3474 Necklace
- 八数码问题II-双向bfs和map标记
- .Net学习笔记----2015-06-28(值类型和引用类型)
- linux时间树,linux小知识之查看系统时间
- WPF中查看PDF文件 - 基于开源的MoonPdfPanel (无需安装任何PDF阅读器)问题汇总
- Pandas——筛选数据(loc、iloc)
- 抽象类的继承/纯虚函数的实现
- Redis学习笔记(十)——过期时间、访问限制与缓存
- FGUI手势案例代码
- 火狐FireFox浏览器国际版官网下载地址
- 缺什么知识就补什么知识
- 移动硬盘损坏:文件或目录已损坏(修复实录)
- 寒假第一周 总结与反思
- 公共基础知识:月球知识
- Java ThreadLocalRandom 伪随机数生成器的源码深度解析与应用
- OpenCV-Python | 图像的基本操作 十
- USB Overdrive 注册码
热门文章
- ora-04030 进程内存不足解决方案
- 考研高等数学张宇30讲笔记——第三讲 函数极限与连续性
- fastadmin 后台开发实例技巧
- delphi 11 中 libaray path 的设置
- 微信小程序:打开设置(权限)页面
- java计算机毕业设计后勤管理系统(附源码、数据库)
- 使用js将网页导出为图片并下载
- C#用NPOI插件对Excel数据的生成各类Chart的绑定/生成
- java爬虫教程 百度云_java视频教程java爬虫实战项目httpclient hbase springmvc solr
- 报错“Connection failure occurred.Restarting subscription task after 5000 ms“解决