当前课程知识点:Python 交互式程序设计导论 >  第6周 >  本周项目:“华容道”游戏 >  编码步骤

返回《Python 交互式程序设计导论》慕课在线视频课程列表

编码步骤资料文件与下载

编码步骤

编码步骤

  我们已经为该小项目提供了一个基本模板,我们建议 “华容道”游戏的开发策略为:
  1、首先定义表示游戏棋子的Figure类,该类有6个私有属性:
  self.image                         # 棋子图像
  self.src_center                    # 源图像中心坐标
  self.src_size                      # 源图像大小
  self.des_center                    # 画布显示图像中心坐标
  self.des_size                      # 画布显示图像大小
  self.name = name                   # 棋子名称,如“曹操”
  self.move_direction                # 移动方向
  self.move_direction的有效值为None、' left ' 、' right '、 ' up '以及 ' down ',分别表示棋子静止、向左移动、向右移动、向上移动及向下移动。
  该类的get_des_center (self)方法、get_des_size (self)、get_name (self) 及方法set_move_direction (self)均非常直观。
  draw(self, canvas)将调用draw_image 并以前5个私有属性在画布绘制棋子。
  update(self) 方法将根据self.move_direction的取值用全局变量speed 更新self.des_center。
  而collide(self, other)则根据self.move_direction的取值计算是否和另一个静止的棋子发生碰撞,如果发生碰撞或到达棋盘边界则返回True,否则返回False。
  2、编写绘制全部棋子的draw_figures(figures, canvas)函数,用for循环遍历figures并调用每个棋子的draw方法完成对所有棋子的绘制。
  3、编写绘制游戏结束信息的draw_game_over_msg(canvas, msg)函数,调用draw_text函数绘制msg。
  4、编写屏幕刷新事件处理函数(主后绘制函数)draw(canvas),如果全局变量game_over为True则调用draw_game_over_msg绘制游戏结束信息,否则先调用draw_figures完成对所有棋子的绘制,然后判断current_figure是否有效,如果有效,则调用check_collide()检查移动的棋子是否和其它棋子发生碰撞(后面你将实现该函数)和current_figure.update()。
  5、编写start_game(),为游戏开始或重新开始初始化全局变量,该函数也是鼠标点击“重新开始游戏”按钮的事件处理函数。至此运行游戏应当在画布正确绘制最著名的“横刀立马”布阵。但玩家拖动鼠标时棋子没有任何反应。
  6、在mouse_click(pos)函数中添加功能来确定鼠标点击了哪个棋子,关键是遍历所有棋子,将每个棋子的4各角的坐标和鼠标的坐标比较来确定点中的棋子。如果点中了某个棋子,将其赋值给全局变量,同时对全局变量current_figure、original_point赋予合适的值。如果鼠标点击的区域没有棋子,current_figure的值应当为None。可以将棋子的名称输出带控制台以便观察该函数是否正常工作。
  7、编写mouse_drag(pos)函数,对鼠标拖动事件进行处理,先比较鼠标落下的位置original_point和拖动后的位置pos,判断四个方向上哪个移动距离最多,将current_figure的move_direction属性设置为该方向,同时将全局变量figure_moving的值设置为True。注意这些操作只有鼠标点中了某个棋子并拖动时才有效,如果鼠标点击和拖动的区域没有棋子则无效。到此为止,鼠标拖动棋子将发生作用,但棋子不会停下来。
  8、编写check_collide()函数,检查移动i与其它静止棋子及边界的碰撞,用for循环遍历figures并调用每个棋子的collide方法检测与移动的棋子是否发生碰撞,但遍历要避免移动棋子自己之间检测碰撞。
  9、设法在合适的函数中添加更新控制面板“移动次数”标签的代码。
  10、当曹操被移动到最下方中部出口位置时,设法在合适的函数中代码让其一直下移直到从画布中消失为止。

下一节:评分标准

返回《Python 交互式程序设计导论》慕课在线视频列表

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

编码步骤笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。