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

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

程序说明资料文件与下载

程序说明

  本项目我们将尝试用Python语言设计开发一个计算机程序来以游戏的形式让玩家熟悉《三字经》。程序的文件名称为ThreeCharacterPrimer.py。程序将使用到以下Python语言的功能特性:

  (1)、Python保留词:

  import、import...as、True、False、None、def、return、global、if/elif/else、and、or、class、for/in等。

  (2)、导入的模块:

  import simpleguitk as simplegui

  import random

  import copy

  (3)、使用到的内置函数及模块中的函数:

  print()、open()、close()、readlines()、split()、join()、random.randrange()

  random.shuffle()、simplegui.create_frame()、simplegui.create_timer()、add_button()

  add_label()、set_keydown_handler()、set_draw_handler()、get_canvas_textwidth()、

  draw_text()、set_text()、draw_polygon()、copy.deepcopy()等。

  (4)、使用到的数据结构:

  集合(set)、列表(list)等

  (5)、其它知识点和概念:

  类和对象、事件驱动、全局变量、数学运算表达式、逻辑条件表达式、字符串运算表达式、自定义函数、代码格式、注释等Python语言的一些特性。

  通过该项目你可以获得以下能力:

  基于simpleguitk模块的小游戏程序框架通常由全局变量的定义、辅助函数的定义、辅助类的定义、事件处理函数的定义、程序窗口的创建和初始化、事件处理函数的注册、游戏的启动等7部分组成。

  本游戏程序的第一部分代码如下图:

has_rising_box = True                # 是否有文字块正在上升

canvas_height = 600                   # 画布高度,单位为像素

canvas_width = 480                    # <布宽度,单位为像素

box_height = 30                       # 文字块高度,单位为像素

box_width = 120                       # 文字块宽度,单位为像素,包含3个汉字

rising_speed = -1                     # 上升速度,单位为像素

horizontal_move_distance = box_width  # 按左右箭头键时,水平移动的距离,单位为像素

game_over = False                     # 游戏是否结束

rising_box = None                     # 正在运动的文字块

stopped_box = set([])                 # 停止移动的文字块集合

prime_sentence_list = []              # 三字经全文列表,每句为一个列表元素

current_section_list = []             # 当前处理的段落文字列表,每句为一个列表元素,4句为一个段落

last_four_box = []                    # 最近的4个文字块对象列表

score = 0                             # 游戏得分

挑战《三字经》程序的全局变量定义部分

  你可以直接使用这些变量,如果你认为不使用其中的某些变量同样可以实现游戏的功能,你可以删除多余的变量,当然,你也可以添加自己认为必须的其它变量。

  由于画布的宽度为480个像素,而文字块的宽度为120个像素,因此一行正好可以容纳4个文字块,也就是《三字经》的一个段落。

  我们定义画布的高度为600个像素,而文字块的高度为30个像素,因此画布可以容纳20行文字块,但是为了给玩家留出调整文字次序和方块位置的时间,我们最多允许文字块堆积到10行。

  本游戏程序的第二部分为辅助函数的定义,我们将游戏程序中的各种辅助功能抽象为7个函数,每个函数的名称、参数及函数的主要功能描述如下图:

def read_from_file(filename):                 # 完成将磁盘文件中的三字经读入到列表中

def text_shuffle(text):                       # 随机打乱文字的次序

def draw_all_stopped_box(stopped_box,canvas): # 绘制所有静止文字块

def check_collision(group, moving_box):       # 判断上升的文字块和所有静止文字块是否接触

def stop_box(group, moving_box):              # 对发生接触或到达顶部的上升文字块进行处理并更新游戏得分

def generate_current_section_list():          # 生成一个段落四句诗歌列表

def draw_game_over_msg(canvas, msg):          # 绘制游戏结束信息

4 挑战《三字经》程序的辅助函数定义部分

  你的任务之一就是完善以上7个函数的定义,你当然可以创建新的辅助函数,也可以合并以上函数,但必须考虑清楚你这样做的理由。

  本游戏程序的第三部分为辅助类的定义,在该游戏中,我们只定义了1个类,类的名称为Box,用来表示《三字经》的文字块,Box类拥有一些属性和方法。

# Box

class Box:

    def __init__(self, pos, width, height, sentence, correct_sentence, order):

        self.pos = [pos[0],pos[1]]                # 文字块的位置,其实为矩形块左上角的坐标

        self.width = width                        # 文字块的宽度,以像素为单位

        self.height = height                      # 文字块的高度度,以像素为单位

        self.sentence = sentence                  # 实际显示的文字,次序随机,按空格键可以改变次序

        self.correct_sentence = correct_sentence  # 次序正确的文字

        self.rising = True                        # True表示该文字块为运动的文字块,False表示静止的快

        self.processed = False                    # 发生接触或到达顶部是否已经处理并更新游戏得分

        self.order = order                        # 文字块在一行中的正确位置,用0123表示

        self.proper_order = True                  # 实际位置是否处在正确位置

5 挑战《三字经》程序的辅助类定义部分

  你的任务之一就是完善Box类的定义,你当然可以创建新的属性和方法,也可以删除你认为多余的属性和方法,但必须考虑清楚你这样做的理由。

  本游戏程序的第四部分为事件处理函数的定义,在该游戏中,我们定义了4个事件处理函数,分别用来处理时钟事件、屏幕刷新事件、键盘事件和鼠标事件,每个函数的名称、参数及函数的主要功能描述如下图:

# 时钟事件处理函数,生产一个上升的方块

def box_spawner():

# 屏幕刷新事件处理函数

def draw(canvas):

# 键盘事件处理函数,处理键盘按下事件的函数

def keydown(key):

# 为游戏开始或重新开始初始化全局变量,也是鼠标点击按钮的事件处理函数

def start_game():

6 挑战《三字经》程序的事件处理函数定义部分

  你的任务之一就是完善以上4个函数的定义,你当然可以创建新的事件处理函数,也可以合并以上函数,但必须考虑清楚你这样做的理由。

  本游戏程序的第五部分为创建窗口初始化画布的代码,如下图:

# 初始化画布

frame = simplegui.create_frame("挑战《三字经》", canvas_width, canvas_height)

label = frame.add_label("游戏得分 = 0")

7 挑战《三字经》程序的窗口创建和初始化部分

  请熟记这两行代码的的语法格式,可以尝试对其进行修改以观察每个参数的含义和作用。

  本游戏程序的第六部分完成对事件处理函数的注册,代码如下图:

# 注册事件处理函数

# 按键处理,每次按键会调用keydown函数

frame.set_keydown_handler(keydown)                         

# 显示处理,每秒调用draw函数60

frame.set_draw_handler(draw)                               

# 每秒调用box_spawner函数1

timer = simplegui.create_timer(1000.0, box_spawner)       

# 鼠标每次点击“重新开始游戏”按钮,调用start_game函数1

button = frame.add_button('重新开始游戏', start_game, 100)

8 挑战《三字经》程序的事件处理函数注册部分

  请熟记这四行代码的的语法格式,可以尝试对其进行修改以观察每个参数的含义和作用。

  本游戏程序的第七部分,也是最后一部分,完成全局变量初始化、启动定时器、显示窗口从而让游戏开始运行,代码如下an>

# 启动游戏

start_game()       # 为游戏开始或重新开始初始化全局变量

timer.start()      # 启动定时器

frame.start()      # 显示窗口

9 挑战《三字经》程序的游戏启动部分

  请熟记这四行代码的的语法格式,可以尝试对其进行修改以观察每个参数的含义和作用。

下一节:编程步骤

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

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

程序说明笔记与讨论

也许你还感兴趣的课程:

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