11 消灭星星

图书简介可以看这里:

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

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

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

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

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

联想Filez

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

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

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

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

《Python游戏趣味编程》 第11章 消灭星星相关推荐

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

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

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

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

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

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

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

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

  5. 《Python游戏趣味编程》 第10章 拼图游戏

    10 拼图游戏 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个拼图游戏,鼠标先后点击两个小拼图块,交换其坐标,直到全部达到正确位置,效果如图10-1 ...

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

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

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

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

  8. 《Python游戏趣味编程》 第6章 见缝插针

    6 见缝插针 Python游戏开发 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个见缝插针的游戏.按下空格键后发射一根针到圆盘上,所有发射的针跟着圆 ...

  9. 《Python游戏趣味编程》 第4章 疯狂的小圆圈

    4 疯狂的小圆圈 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将实现一个好玩的程序,鼠标点击后,会在点击处出现一些同心圆圈,并在窗口中四处反弹,效果如图4- ...

最新文章

  1. Daily Scrum 11.16
  2. C# 生成编号的方法
  3. 动态页面加载速度太慢
  4. 在运行时更新代码(已Spring解密)
  5. 数据 3 分钟 | 阿里云数据库 2020 技术年报发布、TiDB 开启 Hacking Camp、达梦云数据库免费体验...
  6. 如何保护进程 不被结束_花草种植技术如何保护花草树木不受伤害
  7. 什么是NoSQL及NoSQL四大分类
  8. 详解springBoot集成activiti7,工作流实战案例(三)
  9. Excel-VBA 快速上手(三、数组和字典)
  10. android 取消root,彻底告别安卓刷机时代!360超级ROOT正式宣布下线:取消ROOT权限
  11. 触发器:建立时间和保持时间
  12. 【翻译论文】Understanding Reuse, Performance, and Hardware Cost of DNN......
  13. 软件史上的10大bug
  14. 淘宝详情接口(稳定版本)
  15. spacemacs email layer
  16. python派森知多少_派森吧 - pythonpub.com | 享受python带来的便利以及快乐
  17. 斯帅:没料到詹姆斯会耗光时间再投
  18. wpdec函数_MATLAB小波函数总结
  19. Oracle提高命中率及优化
  20. 分布式系统的冰与火与技术栈

热门文章

  1. 【Django】执行python manage.py makemigrations报错的解决方案
  2. Mysql分页查询问题记录
  3. 安卓开发--textView的字体样式设置(设置宋体,微软雅黑等)
  4. 数字集成电路_4.MOS管寄生电容
  5. 恭喜!南京集成电路大学:今天正式成立!时龙兴任校长!
  6. 自然语言处理之中文语料收集
  7. notes for lxf(一)
  8. 多个图片合并生成1个图片或1个pdf
  9. 关于冗余和容错的一些总结(Redundancy and fault tolerance)
  10. USB之SE0、SE1