这是推星星游戏的最后一期了

希望每个学习了的同学都能制作出你自己的推星星游戏

记得巩固好知识噢~

Drawing the Map绘制地图

535. def drawMap(mapObj, gameStateObj, goals):

536. #将地图绘制为表层对象,包括角色和星星

537. #这个函数无需调用pygame.display.update()

538. #也不用再角落绘制关卡,步数文本。

539.

540. # 将是用来绘制方块在上面的单独的表层对象

541. # 所以将很容易在DISPLAYSURF表层对象中定位整张地图

542. # 首先,需要就地图的宽和长

543. mapSurfWidth = len(mapObj) * TILEWIDTH

544. mapSurfHeight = (len(mapObj[0]) - 1) * (TILEHEIGHT - TILEFLOORHEIGHT) + TILEHEIGHT

545. mapSurf = pygame.Surface((mapSurfWidth, mapSurfHeight))

546. mapSurf.fill(BGCOLOR) # 无填充色开始

drawMap()函数会将整张地图反馈至表层对象。

而地图的大小将从mapObj中计算得出。而在表层对象上绘制的所有东西将在545行创建。一开始,整个表层对象以背景色来绘制。

548. # 将方块精灵绘制在表层上

549. for x in range(len(mapObj)):

550. for y in range(len(mapObj[x])):

551. spaceRect = pygame.Rect((x * TILEWIDTH, y * (TILEHEIGHT - TILEFLOORHEIGHT), TILEWIDTH, TILEHEIGHT))

549和550的嵌套for循环将检索地图上所有XY坐标并绘制合适的方块图片在当前坐标上

552. if mapObj[x][y] in TILEMAPPING:

553. baseTile = TILEMAPPING[mapObj[x][y]]

554. elif mapObj[x][y] in OUTSIDEDECOMAPPING:

555. baseTile = TILEMAPPING[' ']

556.

557. # 首先绘制地基和墙

558. mapSurf.blit(baseTile, spaceRect)

559.

baseTile变量将设置为表层方块图片对象中将要绘制在当前XY坐标的方块坐标。如果单字符串储存在OUTSIDEDECOMAPPING字典里,那么TILEMAPPING就用得上了。

560. if mapObj[x][y] in OUTSIDEDECOMAPPING:

561. # D 在这个方块上绘制装饰

562. mapSurf.blit(OUTSIDEDECOMAPPING[mapObj[x][y]], spaceRect)

除此之外,如果方块列在OUTSIDEDECOMAPPING字典中,相对应的装饰图片将绘制在当前方块的顶部。

563. elif (x, y) in gameStateObj['stars']:

564. if (x, y) in goals:

565. # 星标方块和星星在同一方块上,首先绘制星标方块

566. mapSurf.blit(IMAGESDICT['covered goal'], spaceRect)

567. # T绘制星星

568. mapSurf.blit(IMAGESDICT['star'], spaceRect)

如果在地图上的某个XY坐标上应该有个星星,那么在568行上,这个星星就会在这个坐标上绘制。在完成绘制之前,代码将首先检查是否有星标方块在同一位置,如果有那么先绘制星标方块。

569. elif (x, y) in goals:

570. # 绘制星标方块

571. mapSurf.blit(IMAGESDICT['uncovered goal'], spaceRect)

如果地图上这个XY坐标有个星标方块,且没有被玩家或者星星覆盖,那么就将星标方块绘制在顶部。

573. # 最后绘制玩家角色

574. if (x, y) == gameStateObj['player']:

575. # currentimage是独特的玩家形象

576. #

577. #

578. mapSurf.blit(PLAYERIMAGES[currentImage], spaceRect)

579.

580. return mapSurf

最后,drawMap()函数将检查玩家是否在这个XY坐标上,如果是那么玩家的图片形象就在方块上绘制。而始于549和550行的580行是在嵌套循环之外,所以当表层对象返回时,整个地图将绘制完毕。

检查关卡是否完成

583. def isLevelFinished(levelObj, gameStateObj):

584. """反馈True如果所有星标方块被星星覆盖"""

585. for goal in levelObj['goals']:

586. if goal not in gameStateObj['stars']:

587. # 找到没有被星星覆盖的星标方块

588. return False

589. return True

isLevelFinished()函数建在所有星标方块被星星覆盖时反馈True。一些关卡将有超过星标方块的星星,所以检查星标方块是否被覆盖比检查星星是否比星标方块多更重要。

585行的for循环检查了所有在levelObj[‘GOALS’]里的星标方块坐标,和gameStateObj[‘stars’]里星星的坐标。当代码第一次找到一个没有星星覆盖的星标方块,函数将反馈False。如果每个都被星星覆盖,那么isLevelFinished()反馈True。

592. def terminate():

593. pygame.quit()

594. sys.exit()

terminate函数作用一如既往

597. if __name__ == '__main__':

598. main()

在定义了所有函数后,602行将调用main()函数并开始游戏。

恭喜你!完成游戏!

恭喜你又向游戏大师迈进了一步!

**注:文中代码的行数如中断,则默认该行为空

python星星万花筒_少儿编程分享:码趣君教你用Python编写推星星游戏(完)相关推荐

  1. 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...

  2. 怎么用python做战斗机_少儿编程分享:手把手教你用Python编写战斗机游戏(四)

    游戏分享:手把手教你用Python编写 战斗机游戏(四) 2018.1.25 飞机大战就到这里啦 你的飞机大战做出来了吗 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑.接下来,我们要把单 ...

  3. python俄罗斯方块代码34行_少儿编程分享:码趣君教你用Python编写俄罗斯方块(四)...

    接下来要进入操作部分了 坚持才能获得最后的成就感噢 用移动变量处理用户输入 216. elif (event.key == K_LEFT or event.key == K_a): 217. movi ...

  4. python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)

    原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...

  5. python图形设计编程_少儿编程分享:手把手教你用Python制作艺术图片

    原标题:少儿编程分享:手把手教你用Python制作艺术图片 在前面的几篇文章中,我们分享了一些用PyGame制作小游戏的教程.我们今天的分享使用的仍然是PyGame,只不过这次不是写游戏啦-我们要用P ...

  6. 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)

    原标题:少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二) 检测和判断 无论我们制作的简单或者复杂的游戏 这都是最关键的两个部分 事件处理循环 61. while True: # 游戏主循环 62 ...

  7. python兔子编程_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫自己的四个堡垒.这个游戏是和你们一样的同龄人制作的噢~为此我们也会更 ...

  8. python俄罗斯方块编程思路_少儿编程分享:手把手教你用Python编写俄罗斯方块(十)...

    www.codingmarch.com 游戏分享:手把手教你用 Python 编写 俄罗斯方块(十) 2017.12.28 这是俄罗斯方块的最后一章了 经历了这么多游戏 编写了这么多代码 你的心中是否 ...

  9. python怎么编辑程序_少儿编程:Python系列24——字符串的替换和检索

    #少儿编程# 因为会汉语拼音了,小po最近迷上打字,他经常会为我们家制作一张购物清单(其实就是他想吃的东西),如图1,然后把这张购物清单作为字符串赋值到一个变量里. 图1 这次他刚做完,就发觉奶豆和奶 ...

最新文章

  1. ant PageHeaderWrapper 返回上一页
  2. 第四代测序(纳米孔测序)有望全面代替边合成边测序吗?
  3. 杰奇linux伪静态,常用的13个.htaccess重写URL的伪静态规则
  4. CoreMail/pku的邮箱如何禁止某个后缀的所有邮箱
  5. 我人傻了,火狐坏了,重启系统删了重下都搞不好那种,点开只有弹窗(已解决)
  6. ajax 输入不为空,ajax POST响应为空
  7. 圈圈教你学USB第一章
  8. 二级c语言 文件题,二级C语言题库文件.doc
  9. swustoj水王C语言,swust西南科技大学OJ数据结构80题答案
  10. 511遇见易语言教程外形框和模仿进度条闪烁效果
  11. python socket编程详细教程_最基础的Python的socket编程入门教程
  12. bootstrap表格自动换行
  13. java 自由落体for语句_JAVA 自由落体和平抛无能运动
  14. h264和aac 封装成flv
  15. Antv X6 动态连线
  16. html软键盘挤压布局,软键盘挤压布局问题
  17. A Survey of Shape Feature Extraction Techniques中文翻译
  18. mate 10android o主题,华为Mate 10 Pro体验:这才是全面屏手机该有的样子
  19. nginx详细文档 – 安装配置,深入源码,模块编写,编译器参数,系统函数
  20. 小程序学习与实践(一)

热门文章

  1. Guava之RateLimiter限流
  2. 是科学还是魔法?Informer on MindSpore——时间序列预测技术实践
  3. jpa分组分页查询 返回总数错误解决
  4. 计算机散热程序,电脑的散热方法
  5. 最根本的穴位-会阴穴
  6. 计算机辅助设计绘图佛,计算机辅助设计绘图员-标准及考试大纲.doc
  7. 光脚丫思考Vue3与实战:第04章 模板语法 第04节 指令的缩写
  8. 一日一技:用Python做游戏有多简单
  9. 课程体系包括哪些要素_课程体系包括哪些要素
  10. 论文写作分析报告CSDN