弟子规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都发挥着至关重要的作用…

python运行是哪个键_python – 如何使用回车键调用按钮命令

在tkinter中,当按钮具有焦点时,您可以按空格键执行与该按钮关联的命令.我正在尝试按Enter键做同样的事情.我确定我过去做过这个,但我找不到代码,而我现在正在做的事情是行不通的.我在Mac上使用 python 3.6.1. 这是我尝试过的 self.startButton.bind(, self.startButton.invoke)…

WEBSHELL权限提升 菜菜

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshow动网上传漏洞&#xff0c;相信大家拿下不少肉鸡吧&#xff0c;但…

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的路径添加到配置文件&…

sql的case when用法

select t.C_OPERATE_TIME MODIFY_TIME,t.c_code EMPLOYEE_CODE,t.c_name EMPLOYEE_NAME,CASE t.c_employee_statusWHEN 在职 THEN1WHEN 实习生 THEN1ELSE0END BL_FLAG,t.c_labor_date CREATE_TIME,CASE t.c_ctf_typeWHEN 身份证 THEN01WHEN 护照 THEN08ELSE99END USERCARDTYPE,…

ALLyeSNO 优化版浩方 第二版 Ver 2007 06 15 清除广告 自动挤房间

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshowallyesno 优化版浩方 第二版 Ver:2007.06.15 正式发布ALLyeSNO优…

faker和劫的图片_faker亲手画的劫被曝光,看到他的画,众人心里久久不能平息!...

原标题&#xff1a;faker亲手画的劫被曝光&#xff0c;看到他的画&#xff0c;众人心里久久不能平息&#xff01;说起faker&#xff0c;相信大家对这个人并不陌生&#xff0c;特别是经常看英雄联盟LPL比赛的人&#xff0c;一定会想起他的很多经典镜头&#xff0c;让人记忆犹新。…

源码分析Thread

多次start &#xff1f;&#xff1f; IlleageStateException转载于:https://www.cnblogs.com/yszzu/p/9337531.html

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;需要对信号进行心…

抖音创作规范_抖音短视频运营小规则

抖音短视频规则一、抖音的定义1、抖音是个去中心化的平台&#xff0c;根本没有什么权重&#xff0c;主要是看你账号的活跃度&#xff0c;互动关系&#xff0c;和行为习惯标签&#xff0c;抖音后台技术有去重机制&#xff0c;机器会自动判断你的视频重复率。重复率达到一定的比例…

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

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

P1242 新汉诺塔

题目描述 设有n个大小不等的中空圆盘&#xff0c;按从小到大的顺序从1到n编号。将这n个圆盘任意的迭套在三根立柱上&#xff0c;立柱的编号分别为A、B、C&#xff0c;这个状态称为初始状态。 现在要求找到一种步数最少的移动方案&#xff0c;使得从初始状态转变为目标状态。 移…

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;学校副校长罗红金、教务科科长冯华以及机电专业组教师代表参加了…

此地钱多人傻速来

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshow原文&#xff1a;http://www.wulujia.com/“此地钱多人傻速来”这…

TCP三次握手(待细研究)

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