转载自品略图书馆 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做一个三阶拼图?相关推荐

  1. 【Python】如何用python做一个简单的输入输出交互界面?

    看到知乎上有人在问,如何使用Python做一个简单的输入输出交互界面? 交互界面就涉及到GUI编程. Python有很多GUI框架,功能大同小异. 其中比较出名的有「PyQT」.**wxPython. ...

  2. 如何用python做一个会聊天的女朋友_戏精程序员,用python开发了一个女朋友,天天秀恩爱...

    很多人都知道,程序员大部分都是单身狗,然而,无奈Python实在太强大,居然可以用来开发一个女朋友出来. 其实,这个女朋友类似很多视频中,那些假装自己有女朋友或男朋友的人一样,也是在假装哦,但是程序员 ...

  3. 如何用python做一个简单的输入输出交互界面?

    大家好,我是一行 想问下你写的程序怎么分享给别人使用? **直接发代码!**那不会代码的人岂不是得抓瞎 **那做成网站或者微信小程序!**时间成本太高了,更何况服务器又是一笔成本,后期可能还得不断维护 ...

  4. 如何用 Python 做一个简单的翻译工具?

    前言 平时经常在网上翻译一些单词,突发奇想,可不可以直接调某些免费翻译网站的接口呢?然后做一个图形界面的翻译小工具?下面开始实践 (文末送读者福利) 1.先找一下有哪些免费翻译的接口 百度了一下关键字 ...

  5. 如何用Python做一个游戏防沉迷程序

    如何用Python给游戏加防沉迷 又名:我杀我自己 重点参考 [实战案例]利用Python做出趣味版防沉迷小程序 Python3.7将代码打包成exe程序并添加图标,一分钟学会! 代码 #这是一个防沉 ...

  6. 如何用python做一个会聊天的女朋友_520来啦~教你用Python给自己造了一个女朋友!...

    520这一天,也是网络情人节.就在那天,如果没有女朋友的自己,如何假装自己是有朋友的!如何在朋友圈"秀恩爱. 女生版: image 很有感觉有木有~~ 男生版: image image 其实 ...

  7. 如何用python做一个时钟_Python使用turtle库制作一个时钟

    前言 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在 ...

  8. 【摸鱼系列】如何用Python做一个有趣的Loading彩蛋游戏~

    嗨害大家好鸭!我是小熊猫❤ 不知道大家有没有在摸鱼的时候玩过它~ 这是谷歌流量器中很有名的彩蛋: 当你网络出现问题时,就会出现一个"小恐龙游戏". 当然你如果想要直接进行游戏,可以 ...

  9. 如何用python做一个简单好用的计算器

    1 ui设计 使用qt designer ,按装anaconda后,在如下路径找到: conda3.05\Library\bin designer.exe文件,双击启动: 创建窗体,命名为XiaoDi ...

最新文章

  1. javascript使用Json总结
  2. java+自定义异常类+输入若干成绩 为负数时输出抛出异常_java+自定义异常类+输入若干成绩 为...
  3. Netflix Curator 使用 Zookeeper 编程
  4. HDU3474 Necklace
  5. 八数码问题II-双向bfs和map标记
  6. .Net学习笔记----2015-06-28(值类型和引用类型)
  7. linux时间树,linux小知识之查看系统时间
  8. WPF中查看PDF文件 - 基于开源的MoonPdfPanel (无需安装任何PDF阅读器)问题汇总
  9. Pandas——筛选数据(loc、iloc)
  10. 抽象类的继承/纯虚函数的实现
  11. Redis学习笔记(十)——过期时间、访问限制与缓存
  12. FGUI手势案例代码
  13. 火狐FireFox浏览器国际版官网下载地址
  14. 缺什么知识就补什么知识
  15. 移动硬盘损坏:文件或目录已损坏(修复实录)
  16. 寒假第一周 总结与反思
  17. 公共基础知识:月球知识
  18. Java ThreadLocalRandom 伪随机数生成器的源码深度解析与应用
  19. OpenCV-Python | 图像的基本操作 十
  20. USB Overdrive 注册码

热门文章

  1. ora-04030 进程内存不足解决方案
  2. 考研高等数学张宇30讲笔记——第三讲 函数极限与连续性
  3. fastadmin 后台开发实例技巧
  4. delphi 11 中 libaray path 的设置
  5. 微信小程序:打开设置(权限)页面
  6. java计算机毕业设计后勤管理系统(附源码、数据库)
  7. 使用js将网页导出为图片并下载
  8. C#用NPOI插件对Excel数据的生成各类Chart的绑定/生成
  9. java爬虫教程 百度云_java视频教程java爬虫实战项目httpclient hbase springmvc solr
  10. 报错“Connection failure occurred.Restarting subscription task after 5000 ms“解决