10 拼图游戏

图书简介可以看这里:

童晶:《Python游戏趣味编程》新书上架了

本章我们将编写一个拼图游戏,鼠标先后点击两个小拼图块,交换其坐标,直到全部达到正确位置,效果如图10-1所示。首先利用列表存储所有小拼图块的位置并显示;然后实现两个小拼图块的位置交换、实现鼠标点击的判断;接着实现游戏胜利判断、增加提示信息;最后实现游戏计时与最佳记录的存档。

本章案例最终代码一共98行,代码参看:配套资源\第10章\10-9-5.py,视频效果参看:配套资源\第10章\拼图游戏.mp4。

import pgzrun  # 导入游戏库
import random  # 导入随机库
import datetime # 导入日期和时间库txtFile = open('rank.txt', 'r')  # 打开最佳时间记录存档文件
line = txtFile.readline()  # 读取一行字符串
oldTime = int(line)  # 将记录的秒数转换为整型存储
txtFile.close()  # 关闭文件
start = datetime.datetime.now()  # 程序运行开始计时
newTime = 0  # 这次游戏花了多长时间TILE_SIZE = 100  # 小拼图块的大小,100*100
WIDTH = 3*TILE_SIZE  # 设置窗口的宽度 300
HEIGHT = 3*TILE_SIZE +60  # 设置窗口的高度 300+60clickTime = 0  # 记录鼠标点击了多少次
clickId1 = clickId2 = -1  # 两次点击的小拼图块的序号
allRight = False  # 是否小拼图的位置全对了# 导入9张图片文件,存在列表当中
tiles = [Actor('3×3_01'), Actor('3×3_02'), Actor('3×3_03'),Actor('3×3_04'), Actor('3×3_05'), Actor('3×3_06'),Actor('3×3_07'), Actor('3×3_08'), Actor('3×3_09')]grid = []  # 列表,用来存放最终所有拼图信息
for i in range(3):  # 对行循环for j in range(3):  # 对列循环tile = tiles[i*3+j]  # 对应拼图方块图片tile.left = j * TILE_SIZE  # 拼图方块图片最左边的x坐标tile.top = i * TILE_SIZE  # 拼图方块图片最顶部的y坐标grid.append(tile)  # 将当前拼图加入到列表中def swapPosition(i, j):  # 该函数实现两个小拼图块位置的交换# i,j为要交换的两个小拼图块的序号,利用tempPos中间变量,实现两个小拼图块位置的交换tempPos = grid[i].posgrid[i].pos = grid[j].posgrid[j].pos = tempPos# 重复随机交换多次小拼图的位置
for k in range(10):i = random.randint(0, 8)  # 第一个小拼图块的序号j = random.randint(0, 8)  # 第二个小拼图块的序号swapPosition(i, j)  # 调用函数交换两个小拼图块的位置def draw():  # 绘制模块,每帧重复执行screen.clear()  # 每帧清除屏幕,便于重新绘制for tile in grid:tile.draw()  # 绘制小拼图块    screen.draw.text("最佳记录:"+str(oldTime)+'秒', (60, 300), fontsize=25,fontname='s', color='red')screen.draw.text("游戏运行:"+str(newTime)+'秒', (60, 330), fontsize=25,fontname='s', color='red')if allRight:  # 输出游戏胜利信息screen.draw.text("游戏胜利!", (40, HEIGHT/2-50),fontsize=50, fontname='s', color='blue')else:  # 如果没有成功,可以画几条提示线for i in range(3):  # 画两条横线、两条竖线screen.draw.line((0, i*TILE_SIZE), (WIDTH, i*TILE_SIZE), 'white')screen.draw.line((i*TILE_SIZE, 0), (i*TILE_SIZE, 3*TILE_SIZE), 'white')if clickId1 != -1:  # 为选中的第一个小拼图块画一个红色框screen.draw.rect(Rect((grid[clickId1].left, grid[clickId1].top), (TILE_SIZE, TILE_SIZE)), 'red')def update():  # 更新模块,每帧重复操作global newTimeif not allRight:end = datetime.datetime.now()newTime = (end - start).seconds  # 程序运行了多少秒def on_mouse_down(pos, button):  # 当鼠标按键时执行global clickTime, clickId1, clickId2, allRightfor k in range(9):  # 对所有grid中的小拼图块遍历if grid[k].collidepoint(pos):  # 如果小拼图与鼠标位置碰撞break    # 跳出当前循环if clickTime % 2 == 0:  # 点击偶数次clickId1 = k  # 第一个要交换的小拼图块序号clickTime += 1  # 点击次数加1elif clickTime % 2 == 1:  # 点击奇数次clickId2 = k  # 第二个要交换的小拼图块序号clickTime += 1  # 点击次数加1swapPosition(clickId1, clickId2)  # 交换两个小拼图块位置allRight = True  # 假设全拼对了for i in range(3):for j in range(3):tile = grid[i*3+j]# 遍历,只要有一个小拼图的位置不对,就没有全拼对if tile.left != j * TILE_SIZE or tile.top != i * TILE_SIZE:allRight = False  # 拼错了break  # 如果上面的if语句都不执行,则表示全拼对了if allRight:if newTime < oldTime: # 看看是否更新最短时间记录txtFile = open('rank.txt', 'w')txtFile.write(str(newTime))txtFile.close()pgzrun.go()  # 开始执行游戏

分步骤代码、图片素材、讲解视频可以从异步社区下载:

https://www.epubit.com/bookDetails?id=UB72096d97d6149

分步骤代码也可以直接从这里下载:

联想Filez

这一章主要实现了拼图游戏,了解了列表存储多个小拼图块、定义拼图块交换函数、鼠标点击小拼图块的判断等功能,学习了倒计时、文件读写等知识点。读者可以参考本章的开发思路,尝试设计并分步骤实现图片找茬、华容道等小游戏。第13章我们将学习Pillow图像处理库,实现图片的自动分割,即可自动生成拼图游戏的图片素材。

《Python游戏趣味编程》 第10章 拼图游戏相关推荐

  1. 《Python游戏趣味编程》标准IDE运行游戏代码的配置方法

    首先,用Pip安装pygame.pygame zero两个库: pip install pygame pip install pygame zero 第2章在编程猫海龟编辑器下的代码如下: impor ...

  2. python游戏程序-Python游戏趣味编程

    书名:Python游戏趣味编程 定价:69.0 ISBN:9787115538246 作者:童晶 版次:第1版 出版时间:2020-07 内容提要: 本书把趣味游戏开发应用于Python编程教学,通过 ...

  3. python趣味编程100例-Python游戏趣味编程

    书名:Python游戏趣味编程 定价:69.0 ISBN:9787115538246 作者:童晶 版次:第1版 出版时间:2020-07 内容提要: 本书把趣味游戏开发应用于Python编程教学,通过 ...

  4. python趣味编程100_《Python游戏趣味编程》 第8章 勇闯地下一百层

    知乎视频​www.zhihu.com 图书简介可以看这里:童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将编写一个勇闯地下一百层的游戏,键盘控 ...

  5. 弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 消灭星星是一款非常容易上瘾的消除类游戏,只需 ...

  6. python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将利用Python绘制美丽的圆圈画, ...

  7. 《Python游戏趣味编程》第12章 坚持一百秒

    12 坚持一百秒 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个坚持一百秒的游戏,玩家通过鼠标控制飞机躲避飞舞的小球,效果如图12-1所示.首先学习 ...

  8. 《Python游戏趣味编程》 第9章 贪吃蛇

    9 贪吃蛇 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个贪吃蛇的游戏,效果如图9-1所示.键盘控制小蛇上下左右移动,吃到食物后长度加一:蛇头碰到自 ...

  9. 《Python游戏趣味编程》 第7章 飞机大战

    7 飞机大战 Python游戏开发 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个飞机大战的游戏,鼠标控制飞机移动.按下鼠标发射子弹,效果如图7-1 ...

最新文章

  1. 字符串操作、文件操作,英文词频统计预处理
  2. 给出一个单链表,不知道节点N的值,只遍历一次就可以求出中间节点,写出算法...
  3. Etsy如何及为什么迁移到API优先的架构
  4. STL中的map集合扩展字段比较方便
  5. day30 并发编程
  6. html表单php连接mysql数据库_使用HTML表单和PHP更新MySQL
  7. 程序员如何在百忙中更有效地利用时间,如何不走岔路,不白忙(忙得要有效率,要有收获)...
  8. 反转?MIT女博士遭质疑:代码贡献太少,黑洞照片功臣另有其人
  9. 「leetcode」406.根据身高重建队列【贪心算法】详细图解
  10. 12. URI , URN, URL 区别
  11. linux 添加链接与删除链接(ln命令的用法)
  12. 分享一个Bing的翻译功能
  13. Hackintool 3.4.7中文版 (黑苹果必备工具箱神器)
  14. python编写鸡兔同笼程序_鸡兔同笼问题的python实现
  15. css 一直图片适配所有手机背景图
  16. [XMAN2018排位赛]AutoKey
  17. 谈谈 CGI、FastCGI、PHP-CGI、PHP-fpm
  18. python输出以元音字母开头的单词_开头是元音字母的英语单词有哪些?
  19. c语言流水调度作业,最简C语言流水灯程序,给初学者看下,高手请绕行。
  20. Wormhole漏洞分析

热门文章

  1. STL数组处理常用函数
  2. Spring使用IOC容器创建对象及ClassPathXmlApplicationContext与FileSystemXmlApplicationContext接口详解
  3. cuda 10.1和 cudnn 7.6.5
  4. 【分享】如何管理焦虑情绪
  5. 【软件测试从入门到放弃】入门阶段:迈入软件测试大门
  6. flex 常用正则验证举例
  7. ubuntu遇到的 the system is runing low-graphics mode 问题
  8. Bzoj 3196 Tyvj 1730 二逼平衡树
  9. Centos 7.3 搭建php7,mysql5.7,nginx1.10.1,redis
  10. python之路_django分页及session介绍