作者 | Ahab

来源 | Ahab杂货铺(ID:AhabBin)

今天是年假的最后一天,明天大家就要回到各自的工作岗位上去,公众号从今天开始恢复更新。不知道大家假期过得怎么样,帅张提到假期多关注一些家里的变化,自己也记录了点东西,准备今天整理下跟大家分享,可是过了这一个假期,自己状态全无,不知道大家会不会跟我一样有节后焦虑症,不能很快恢复之前的工作状态,最后还是写点简单有意思的技术文分享给大家,希望大家在轻松的状态下开始工作。

今天这篇文章比较有意思,用python做一个三阶拼图,自己写这个程序的出发点很简单,就是为了哄自己的小外甥玩,不过他好像不是特别感兴趣,那又怎样。话不多说,我们开始学习吧。

程序介绍

先上图让大家感受一下

程序的功能很简单,还是之前我们用到的pygame和随机数的知识,整个流程非常的清晰,但是我们需要注意:该游戏如果直接在地图的二维数组上进行随机打乱,是会很大几率出现无解的情况。所以,我是在拼好的基础上采用随机移动(按照游戏规则来移动)的思路进行地图打乱。

具体实现

随意的找一张照片跟代码文件放在同一文件文件夹下就可以。

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

将背景进行填充,绘制图片和设置参考图片。

写在最后

总之,新的一年,新的开始,一起努力吧。代码已经上传到Github。

链接:

https://github.com/AhabWang/AhabCode/blob/master/%E6%8B%BC%E5%9B%BE%E6%B8%B8%E6%88%8F.py

(本文为AI科技大本营转载文章,转载请微信联系原作者)

征稿

推荐阅读:

  • 手机芯片谁是AI之王?高通、联发科均超华为

  • “百练”成钢:NumPy 100练

  • 程序员如何用“撞针“拯救35亿地球人?

  • 搜狗的 AI 中场战事

  • 小心!你的脸正在成为色情片主角

  • 咋跟乡亲们解释,何谓“区块链”?

  • 分布式系统与消息投递

  • 27 道阿里巴巴 Java 面试题,你会几道?

点击“阅读原文”,打开CSDN APP 阅读更贴心!

如何用Python做三阶拼图?相关推荐

  1. python用中文怎么说-如何用Python做中文分词?

    打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...

  2. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...

  3. 用python做舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

  4. 用python做一个舆情分析系统_如何用Python做舆情时间序列可视化?

    如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧. 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价.从前,你苦恼的是顾客不爱写评价.最 ...

  5. python 英语分词_如何用Python做中文分词?

    打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...

  6. 如何用python做后端写网页-flask框架

    如何用python做后端写网页-flask框架 什么是Flask 安装flask模块 Hello World 更深一步:数据绑定 后端传入数据 从前端获取数据 数据库连接 screen 创建后台 查看 ...

  7. 词云python灿烈_如何用Python做中文词云?

    打算绘制中文词云图?那你得先学会如何做中文文本分词.跟着我们的教程,一步步用Python来动手实践吧. 需求 在<如何用Python做词云>一文中,我们介绍了英文文本的词云制作方法.大家玩 ...

  8. 如何用 Python 做自动化测试

    本文来自作者 Vant 在 GitChat 上分享 「如何用 Python 做自动化测试」 编辑 | 哈比 一.Selenium 环境部署 1. window 环境部署 1.1 当前环境 Win10 ...

  9. 如何用Python做词云?(基础篇视频教程)

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. (由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开.如有需要,请点击文末的"阅读原文"按钮 ...

最新文章

  1. ATS中的ComboHandler合并回源插件调研
  2. nginx 访问控制 防盗链
  3. 秒杀多线程第六篇 经典线程同步 事件Event
  4. 安装Scala时报UnsupportedClassVersionError
  5. django shortcut函数
  6. 报错,Exception: Required request body is missing: public org.springframework.ui.ModelMap cn.yihuazt.co
  7. BZOJ4360 : achievement
  8. SpringBoot之接收url参数
  9. OA选型案例:建筑行业选型华天OA系统
  10. 腾讯云学生服务器购买教程(图文)
  11. android模拟器开启vt,逍遥安卓模拟器怎样打开VT模式 VT虚拟化设置办法
  12. 老鸟必备 | 如何画出优秀的架构图
  13. 代数数、超越数、代数函数、超越函数
  14. Espresso:自定义Idling Resource
  15. 任意多边形的面积计算
  16. VCS IDEA没有Enable Version Control Intergration
  17. 别怪程序员——都是项目经理的错
  18. 草图大师SketchUp 2021 mac版 兼容macos11系统正式上线!
  19. 对张楚汉院士混凝土动力性能研究报告的笔记
  20. 解决DatePickerDialog和TimePickerDialog控件取消按钮问题

热门文章

  1. dedecms网站文章内容按自定义排序的方法
  2. PHP mongodb 的使用
  3. 3D Point Cloud Library install
  4. BFS:图的最短路径  Aizu - 0558 ​​​​​​​Cheese
  5. 8. 修改matlab GUI中fig和m文件名修改流程及注意事项
  6. 2018-3-1 算法学习部分
  7. day32-1 事件Event
  8. leetcode网学习笔记(1)
  9. Beta冲刺 (1/7)
  10. GM Tech 2 works with Hummer Yes or No