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

6d03589c09cae1cf4ae8fee8ac0d5ae1.png
知乎视频​www.zhihu.com

图书简介可以看这里:

童晶:《Python游戏趣味编程》新书上架了​zhuanlan.zhihu.com
495db9709e45c72a1e0818daca43acfb.png

消灭星星是一款非常容易上瘾的消除类游戏,只需点击一个方块,如果和其连接的有两个或两个以上颜色相同的方块即可消除,游戏得分即为消除的方块数,如图11-1所示。首先利用二维数组存储所有小方块的信息并显示;然后实现鼠标点击小方块、连通方块序号的获取;接着实现方块消除及位置更新、得分的计算与显示。

本章案例最终代码一共98行,代码参看:配套资源第11章11-8.py,视频效果参看:配套资源第11章消灭星星.mp4。

知乎视频​www.zhihu.com
import pgzrun  # 导入游戏库
import random  # 导入随机库
import copy  # 导入复制库TILE_SIZE = 50  # 小方块的大小,50*50
WIDTH = 10*TILE_SIZE  # 设置窗口的宽度 500
HEIGHT = 11*TILE_SIZE  # 设置窗口的高度 500
score = 0 # 得分stars = []  # 二维数组,开始为空列表,用于储存小方块编号
for i in range(10):  # 对行遍历row = []  # 存储一行的数据,开始为空列表for j in range(10):  # 对列遍历x = random.randint(1, 5) # 取1-5之间的随机数row.append(x)  # 把数据添加到行列表row中stars.append(row)  # 再把行列表row添加到二维数组stars中Tiles = []  # 二维数组,开始为空列表,存放所有小方块图片信息
def updateTiles():  # 根据stars更新Tiles二维数组for i in range(10):for j in range(10):tile = Actor('star'+str(stars[i][j]))  # 对应小方块图片初始化tile.left = j * TILE_SIZE  # 小方块图片最左边的x坐标tile.top = i * TILE_SIZE  # 小方块图片最顶部的y坐标Tiles.append(tile)  # 将当前小方块加入到列表中
updateTiles()  # 根据stars更新Tiles二维数组def draw():   # 绘制模块,每帧重复执行screen.clear()  # 每帧清除屏幕,便于重新绘制for tile in Tiles:tile.draw()  # 绘制所有小方块screen.draw.text("消除方块:"+str(score), (180, 510), fontsize=25,fontname='s', color='red')def on_mouse_down(pos, button): # 当鼠标按键时执行global scoreiClicked = int(pos[1]/TILE_SIZE)  # 点击方块在二维数组中的行序号jClicked = int(pos[0]/TILE_SIZE) # 点击方块在二维数组中的列序号connectedSet = {(iClicked, jClicked)}  # 创建集合,存储选中方块及其连通的点序号for k in range(20):  # 重复找多次,就可以把所有连通区域都找到了tempSet = copy.deepcopy(connectedSet) # 复制一份临时集合for each in tempSet: # 对集合中所有小方块处理i = each[0]  # 小方块对应的行序号j = each[1]  # 小方块对应的列序号#  找到上下左右四个方块,把颜色一致的添加到集合中,注意防止超过边界colorId = stars[i][j]if i > 0 and stars[i-1][j] == colorId:connectedSet.add((i-1, j))if i < 9 and stars[i+1][j] == colorId:connectedSet.add((i+1, j))if j > 0 and stars[i][j-1] == colorId:connectedSet.add((i, j-1))if j < 9 and stars[i][j+1] == colorId:connectedSet.add((i, j+1))tempSet.clear() # 临时集合清空if len(connectedSet) >= 2:  # 连通方块个数最少两个,才消除        for each in connectedSet:  # 集合中的所有方块遍历if stars[each[0]][each[1]] != 0:stars[each[0]][each[1]] = 0  # 标记为0,对应黑色小方块图片score = score + 1  # 得分等于消去的方块数目# 从下往上遍历,下面一个是0的话,上面的小色块就往下落。最顶上的空出来,变成黑色for j in range(10):templist = []  # 存储第j列的所有元素的列表for i in range(10):templist.append(stars[i][j])count = 0  # 记录列表中值为0的元素个数# 去除列表中的0元素while 0 in templist:templist.remove(0)count += 1# 把对应0元素移动到列表起始位置for i in range(count):templist.insert(0, 0)# 再赋值给原始的二维数组for i in range(10):stars[i][j] = templist[i]# 如果某一列都消除了,则右边列的方块向左移zeroColId = -1for j in range(10):templist = []  # 存储第j列的所有元素的列表for i in range(10):templist.append(stars[i][j])if sum(templist) == 0:zeroColId = j  # 这一列都为0了breakif zeroColId != -1:  # 表示这一列元素都为0了for j in range(zeroColId, 9, 1):  # 所有右边的列向左移动for i in range(10):stars[i][j] = stars[i][j+1]for i in range(10):  # 最右边的一列都是0stars[i][9] = 0updateTiles()  # 根据stars更新Tiles二维数组pgzrun.go()  # 开始执行游戏

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

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

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

联想Filez​box.lenovo.com
87593f09f6c0bdeae2c39d68280cadbe.png

b1147ca819b8c1d207d791531a7309c1.png

这一章主要实现了消灭星星游戏,学习了二维数组、元组、集合、while循环语句等知识点。读者可以尝试在本章代码基础上继续改进:

1、实现游戏结束的判断(也就是剩下的方块何时不能继续消除);

2、实现某一步操作的撤销功能(类似于下棋游戏中的悔棋功能)。

读者也可以参考本章的开发思路,尝试设计并分步骤实现五子棋、泡泡堂、消消乐等小游戏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python判断英文字母_python判断字符串中是否含有英文 | 个人学习笔记记录

第一种方法&#xff1a; #-*- coding:utf-8 -*- import re def check(str): my_re re.compile(r[A-Za-z],re.S) res re.findall(my_re,str) if len(res): print u含有英文字符 else: print u不含有英文字符 if __name__ __main__: str 你好123hello check(str) str1 你好1…

idea ssm项目移包报错问题

写完代码之后发现包结构太乱了 想要规划一下 结果报错 这里面的包路径都可以点进去&#xff0c;还是报找不到com.lf.company.entity.Business 后来发现是 在移动前和移动后都存在这个mapper。xml 解决方案&#xff1a; 在这里把多余的删掉转载于:https://www.cnblogs.com/NCL…

matlab 写excel 慢_吐槽一下MATLAB的workspace

用MATLAB编程&#xff0c;或者Simulink建模仿真&#xff0c;有一个特别强大、特别人性化的功能&#xff0c;可以在workspace中直接查看定义的参数和运行的结果 无论是仿真的调试&#xff0c;结果的分析&#xff0c;或是中途的Debug&#xff0c;workspace都发挥着至关重要的作用…

MATLAB 图形着色

1.matlab中的颜色查找表函数&#xff1a; &#xff08;1&#xff09;autumn&#xff1a;从红色向橘黄色、黄色平稳过渡&#xff1b; &#xff08;2&#xff09;bone:为含有较高的蓝色组分的gray颜色查找表&#xff1b; &#xff08;3&#xff09;colorcube&#xff1a;包含RGB颜…

大学python笔记_Python 上手笔记

要是想在键盘上体验一下, 安装Python也很简单: 基本的编译环境应该已经包括了Python&#xff0c;但Mac系统最好在上面这个网站下载安装。在Linux系统中可以使用apt-get等工具来安装更新。另外假如系统内有多个Python版本&#xff0c;可能需要将Python的路径添加到配置文件&…

D - F e n d 簡 單 教 學 DOSBOX Easy Shell 【玩DOS游戏的必备软件】

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshowD - F e n d 簡 單 教 學■寫 在 前 面自去年無意間接觸到DOSBox…

arma模型谱估计matlab_基于机器学习的心律失常分类(四)——心电信号特征提取[MATLAB]...

目前比较常用的特征提取是提取心电信号的各波形间期长度、波峰高度等&#xff0c;本文是使用ARMA模型对心电信号进行处理&#xff0c;使用其系数来作为特征。一、心拍划分大多伴有异常波形的心律失常信号&#xff0c;通常都会具体表现在单个心拍中&#xff0c;需要对信号进行心…

目睹DNS怪现状 本地对DNS的设定故障分析

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshowDNS&#xff08;Domain Name System&#xff09;在tcp/ip网络中&…

python文件输入符_python文件IO与file操作

1 标准输入输出IO - (1) 打印到屏幕 print() print(self, *args, sep’ ‘, end’n’, fileNone): 把传递的表达式 转换成一个 字符串表达式 known special case of print """ print(value, ..., sep , endn, filesys.stdout, flushFalse) Prints the values to…

和县机电工程学校工业机器人_【校企合作】学校举行工业机器人教学系统捐赠仪式...

点击上方蓝字关注我们12月22日下午&#xff0c;我校与广东诚飞智能科技有限公司在公共实训中心会议室举行了“工业机器人教学系统”捐赠仪式。广东诚飞智能科技有限公司总经理杨成芳、区域经理杨少杰&#xff0c;学校副校长罗红金、教务科科长冯华以及机电专业组教师代表参加了…

TCP三次握手(待细研究)

xu言&#xff1a; 看到一张不错清晰的Tcp三次握手图&#xff0c;收藏 Initiator 发起人 Receiver 接收者 LISTENING 状态xx服务启动后首先处于侦听&#xff08;LISTENING&#xff09;状态。 ESTABLISHED 状态ESTABLISHED的意思是建立连接。表示两台机器正在通信。 CLOSE_WAIT…

ubuntu20.04下安装vmshare tools_Go语言的安装与配置-vscode

vscode是比较好用的&#xff0c;虽然goland自带插件但是收费&#xff0c;所以配置vscode虽然麻烦但是也值得。Step1.下载安装vscode和golangDownload Visual Studio Code - Mac, Linux, Windows​code.visualstudio.comThe Go Programming Language​golang.google.cnnext step…

小说中人称转换作用_长篇儿童小说《合欢》:一树红绒落马缨

浙江少年儿童出版社出版肖复兴的第二部长篇儿童小说《合欢》&#xff0c;因对儿童独立人格的自觉尊重与强调&#xff0c;以及对人物复杂内心世界的深度开掘与勘探&#xff0c;回应了“儿童的被发现”这一重要课题。《合欢》不仅是作者对“远逝的童年”的一次深情回眸&#xff0…

asp按时间自动递增编号_约束力最强的手铐——美国ASP钢性手铐

美国ASP公司生产的钢性手铐&#xff0c;是目前为止世界上约束力最大的手铐。这种手铐的最初设计&#xff0c;是借鉴了中国古代的刑具——枷。钢性的手铐链接&#xff0c;非常好的约束罪犯的双手&#xff0c;使其没有任何活动的空间。而且最大的好处就是&#xff0c;执法人员只要…

脚本启动慢_Linux 常用运维脚本,建议收藏

同步本机时间ntpdate 210.72.145.44清除系统缓存&#xff0c;空出更多内存free && sync && echo 3 > /proc/sys/vm/drop_caches && free杀掉僵尸进程kill $(ps -A -ostat,ppid | awk /[zZ]/ && !a[$2] {print $2})显示全部arp解析tcpdump a…

eclipse maven项目 class类部署不到tomcat下_Servlet tomcat部署

网上搜到的很多利用eclipse结合tomcat开发servlet的教程都要修改server.xml感觉这种方式太粗暴了&#xff0c;server.xml最好是与应用无关的&#xff0c;这里比较推荐export war的方式进行部署先记录一下环境配置过程我的系统是ubuntu 14.04&#xff1b;下载eclipse for javaee…

tensorflow 指定cpu 但是还会运行 gpu_PyTorch VS TensorFlow 谁最强?这是标星 15000+ Transformers 库的运行结果...

点击上方“AI有道”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达作者 | Lysandre Debut译者 | 陆离出品 | AI科技大本营(ID: rgznai100)【导语】自然语言处理预训练模型库 Transformers 实现了几种用于 NLP 任务的最先进的 Transformer 架构&#xff0c;如…

after不显示_web前端入门到实战:css实现单行、多行文本超出显示省略号

前言&#xff1a;项目中我们经常遇到这种需求&#xff0c;需要对单行、多行文本超出显示为省略号。这篇文章主要总结了小编解决此问题的方法&#xff0c;有不足之处欢迎大家指正。单行文本省略.ellipsis-line {border: 1px solid #f70505;padding: 8px;width: 400px;overflow: …

linux下查看内存使用情况

基本内存术语解读 1> free -m 同样是做为缓存&#xff0c;buffers和cache又有啥区别呢&#xff1f; 于是又查了些资料&#xff0c;发现buffers实际应该是叫“缓冲”&#xff0c;其英文解释是&#xff1a;A buffer is something that has yet to be "written" to d…

redistemplate使用_如何使用 SpringBoot + Redis 优雅的解决接口幂等性问题

# 前言在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求&#xff0c;我们来解释一下幂等的概念&#xff1a;任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义&#xff0c;最终的含义就是 对数据库的影响只能是一次性的&#xff0c;不能重复处理。如何…