当前课程知识点:Python 交互式程序设计导论 >  第7周 >  本周项目:决战三字经 >  编程步骤

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

编程步骤资料文件与下载

编程步骤

第一步,首先编写read_from_file(filename)函数,参数filename为《三字经》文本文件的URLUniform Resource Locator,统一资源定位符,是对互联网资源的位置和访问方法的一种简洁表示),我们已经为你准备了该文件,下载:三字经。你应当观察一下该文件的内容和格式,请使用urllib.request.urlopen()方法打开该文件,逐行处理(readlines()可以逐行读入文件,假设读入的内容保存在变量line中,可以用str(line.decode("utf8")).split()将一行分解为句子列表),每三个汉字为一个元素存入列表,处理完所有行之后,关闭文件,函数应当返回一个列表,可以用以下调用测试该函数是否满足要求:

print(read_from_file ('http://vquiz.xjau.edu.cn/ProjectResource/other/szj.txt ')[0])

输出应当为:人之初

print(read_from_file (' http://vquiz.xjau.edu.cn/ProjectResource/other/szj.txt ')[491])

输出应当为:宜勉力

text_list = read_from_file (' http://vquiz.xjau.edu.cn/ProjectResource/other/szj.txt')

for text in text_list:

    print(text)

输出应当为492句诗文,11

第二步,编写text_shuffle(text)函数,该函数以字符串text为参数,功能为返回以次序随机的新字符串,当然新字符串中的字符或汉字必须与text参数相同,可以用以下调用测试该函数是否满足要求:

print(text_shuffle ('人之初'))

输出可能为:人之初、人初之、之初人、之人初、初之人、初人之

第三步,编写generate_current_section_list()函数,每次调用该函数时将从prime_sentence_list列表中取出4句诗词文本并把它们添加到一个新的列表中,同时将这4句诗词文本从prime_sentence_list列表中删除。为了实现一段诗歌中的4句诗词随机从画布底部飞出,我们要用random.shuffle函数对新产生的列表进行混洗处理,请在每句诗词前面加上表示其正确位置的数字代码(0123),函数应当返回一个包含4个元素的列表。请用以下调用测试该函数是否满足要求:

prime_sentence_list = read_from_file(' http://vquiz.xjau.edu.cn/ProjectResource/other/szj.txt ')

print(generate_current_section_list())

print(generate_current_section_list())

print(generate_current_section_list())

输出可能为:

['2性相近', '3习相远', '1性本善', '0人之初']

['3贵以专', '2教之道', '1性乃迁', '0苟不教']

['2子不学', '1择邻处', '0昔孟母', '3断机杼']

请注意0123代表一句诗文在一段中的正确位置。每调用一次该函数,诗文下移一段,一段中四句的位置随机变化。

第四步,完善Box类,该类是三字一句文字块的抽象,我们已经提供了该类的属性(私有变量)及其访问方法(gettersetter),你的任务为:

1、完善shuffle_sentence (self)方法,该方法实现文字的混洗功能,可以调用text_shuffle

2、完善collide(self,moving_object)方法,该方法实现检查该文字块是否和上升的文字块发生碰撞。如果发生碰撞返回True,否则返回False

3、完善draw(self, canvas) 方法,该方法实现在画布中绘制(显示)文字块的功能,canvas.draw_polygon方法可以会矩形,canvas.draw_text方法可以绘制文本。请注意用不同颜色组合来提示玩家块内文字次序是否正确,也要用颜色区别块间次序是否正确。

4、完善update(self) 方法,利用rising_speed变量对正在上升的文字块显示的位置(self.pos[1])进行更新。

请用以下调用测试Box类是否满足要求:

test_box = Box([120,100], box_width, box_height, '人之初', '之人初', 0)

print(test_box.get_pos())

print(test_box.get_sentence())

print(test_box.get_correct_sentence())

print(test_box.get_order())

print(test_box.get_processed())

test_box.shuffle_sentence()

print(test_box.get_sentence())

输出应当为:

[120, 100]

人之初

之人初

0

False

之初人

第五步,编写draw_all_stopped_box(stopped_box,canvas)函数,stopped_box参数为保存所有已经停止的文字块的集合,请用for循环遍历每个元素,调用它的draw方法完成绘制功能。

第六步,编写check_collision(group, moving_box)函数,group代表所有已经停止的文字块,而moving_box代表正在上升的文字块,请用for循环遍历group集合每个元素, 调用它的collide方法检测是否和moving_box发生碰撞,只要有一个元素和moving_box发生碰撞就返回True,否则返回False

第七步,完善stop_box(group, moving_box)函数,该函数是游戏逻辑实现的重要函数。

如果moving_box到达顶部或与其它停止的文字块发生碰撞,首先将moving_boxrising属性设置为False,将has_rising_box全局变量设置为False

检查文字顺序,如果正确,游戏得分增加5分。

将该文字块添加到代表静止块的stopped_box集合中。

如果是四句中的最后一句,检查一行四句的位置,如果正确,游戏得分增加20分,并且从stopped_box删除最后4个文字块完成一行的消解。

如果该块停止使得停止的行数超过10行,设置game_overTrue

第八步,编写draw_game_over_msg(canvas, msg)函数,游戏结束时会调用该函数,在画布的正中间用红色48号字体显示msg代表的信息。

第九步,编写box_spawner()函数,调用该函数会创建一个上升的文字块,请注意事件处理函数注册部分我们有timer = simplegui.create_timer(1000.0, box_spawner)语句,这表明游戏程序每1秒会调用box_spawner()函数1次。

任何时候游戏界面中最多只有一个上升的文字块,因此首先要判断全局变量has_rising_box值,如果为True,表明游戏中有一个正在上升的文字块,因此该函数无需再做什么,否则:

current_section_list空,调用generate_current_section_list()为其赋值,从current_section_list弹出一个,计算随机位置,调用Box类的构造方法创建一个新的文字块并赋值到全局变量rising_box,最后别忘了正确设置has_rising_box的值。

第十步,编写draw(canvas) 函数,该函数负责屏幕刷新,如果game_overTrue,请用draw_game_over_msg函数显示游戏结束画面,否则:

依次调用rising_boxdraw方法和update方法实现对上升文字块绘制和位置更新。

然后调用draw_all_stopped_box绘制所有的静止文字块。

最后调用stop_box对发生接触或到达顶部的上升文字块进行处理并更新游戏得分。

第十一步,编写keydown(key)函数,当玩家按下左箭头键时,rising_box的位置左移一个文字块距离,当玩家按下右箭头键时,rising_box的位置右移一个文字块距离,当玩家按下空格键时,rising_box的文字次序随机变换一次。

第十二步,完善start_game()函数,为游戏开始或重新开始初始化全局变量。

一切都搞定后,提交项目之前请注释掉你添加的所有测试代码,保存并运行确认后再提交你的代码。

下一节:评分标准

返回《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周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

编程步骤笔记与讨论

也许你还感兴趣的课程:

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