结合FunCode游戏编程平台的计算思维培养模式研究
——以Java语言教学实践为例

2018-08-22 10:26晏,姚琳,张敏,李
计算机教育 2018年8期
关键词:精灵编程案例

宋 晏,姚 琳,张 敏,李 莉

(北京科技大学 计算机与通信工程学院,北京100081)

0 引 言

计算思维于2006年由美国卡内基·梅隆大学的周以真教授系统地提出,一经问世就引领了世界范围内计算机科学界尤其是计算机教育界的发展方向。她认为:计算思维是运用计算机科学的基本概念进行问题求解、系统设计以及人类行为理解等一系列思维活动[1]。计算思维将计算机作为一种不可或缺的工具,将各行各业的数据、业务通过计算机平台予以表述、处理。

计算思维的本质是抽象和自动化,计算思维能力的构建在程序设计类课程的学习中可以得到很好的诠释。从分析现实世界中的问题开始,在计算机世界中为其建模(抽象),最终用计算机语言予以实现(自动化),一系列活动都充分地展示了计算思维过程。

从计算思维的概念被提出到现在,如何系统地培养计算思维能力仍处于探索阶段,还没有一个系统性的特定教学设计和教学模式,但毋庸置疑的是,程序设计类课程的教学主线应按照抽象思维和逻辑思维的培养目标搭建,教学设计轻语法、重思维。

计算思维中的“抽象”解决的是连通现实世界和计算机世界的问题,即将现实世界中的信息用计算机世界的符号描述,也就是将形象思维中的事物映像为计算机世界的概念。

近年来,一些学者提出了“轻游戏”的教学理念,用寓教于乐的方式将教育的外在和游戏的内涵融为一体,通过互动的方式更好地参与、理解一些经典问题的解决过程。“轻游戏”利用学习者的成长环境和思维习惯的特点,通过游戏提高学习的趣味性,将形象上升为抽象,将经典问题中的信息映像到计算机世界[2]。

如果游戏过程可以激发学习兴趣并辅助抽象化思维的建立过程,那么身临其境地参与游戏的设计将是一件富有乐趣、挑战性和成就感的事情。设计游戏可以更好地实践计算思维中的抽象过程,并递进式地通过游戏的各个环节建立对自动化的理解,形成学习知识的心理,积极主动地学习知识和内化知识,更充分地挖掘程序设计课程中的算法思维。

1 结合游戏编程平台的教学难点问题及对策

FunCode是一款基于可视化界面设计、编写游戏程序的C、C++和Java语言综合实验教学平台。学生可以在可视化的环境中轻松设计游戏界面,添加各种被称为“精灵”的游戏元素,在Visual C++、Eclipse等集成开发环境中编写代码。

FunCode平台作为小型游戏引擎,对游戏所涉及的各处理流程的细节都进行了封装,它将用户与游戏交互的鼠标事件、键盘事件以及精灵与精灵碰撞事件、精灵与边界碰撞事件都抽象为回调函数,事件发生时自动调用,事件处理过程只需要在这6个事件函数中编写。基于平台的游戏开发更为简洁。

任何事物都具有两面性,结合游戏编程平台进行教学组织时必须扬长避短,发挥游戏及平台的优势,避免产生负面效应。

1.1 明确游戏编程在教学过程中的作用

结合游戏编程平台的教学,利用学习者熟悉的场景和游戏过程,帮其掌握对现实世界进行抽象和算法设计的方法。游戏本身不是目标,而是在设计游戏的过程中完成对计算思维能力的训练,提高程序实践能力,潜移默化地引导学习者内化计算思维方法。

游戏利用图形用户界面生动形象地展现事物和事物的运动,通过点击鼠标、键盘按键控制事物的运动完成交互,但是教学不能忽视传统的控制台文本交互,并应努力将二者相结合。

在结合游戏编程平台的教学设计中,可以把游戏作为载体和教学手段,让游戏在其所属的学习阶段起到思维训练的引领和整合作用,如将其安排在某个知识的起点或终点,在起点更直观地建立体验,由表象理解到本质,激发学习兴趣;在终点用一种大部头的方式对所学进行综合实践,将计算思维转换为看得见的形象成果,如图1所示的3步走方式。

1.2 合理化设计游戏案例教学接口

游戏案例服务于教学,案例选择既要考虑游戏与知识的相关度,又要难度适中,真正起到带动学习的效果。在FunCode平台下进行游戏编程的基本步骤包括:①在可视化的图形环境下建立游戏场景及精灵对象;②在游戏主函数中利用状态变量控制游戏的流程;③在初始化函数中对游戏进行初始化;④在游戏函数中按游戏规则编写代码;⑤在各种事件函数中进行鼠标、键盘或碰撞等事件处理。

显然,构建完整游戏所需的环节很多,复杂游戏中每个环节的代码量也会很大。为了防止游戏编程平台对当前教学内容造成干扰,增加教学难度,游戏案例在设计时采用统一的接口(play()函数)方式,每个案例都搭建好游戏框架,只将服务于当前教学、借力游戏的部分留给学习者在该接口中完成设计。

在为多分支结构设计的游戏案例“蔬菜园”中,用户用鼠标点击菜园中的植物,负责将植物的名称显示出来的功能在函数void play(int i)中完成,i表示被点中蔬菜的序号。

在为一维数组设计的游戏案例“猴子选大王”中,选大王的过程在函数void play(int array[], int n)中完成,array[]数组用来存放n只猴子的状态,可以通过该案例学习使用一维数组元素为事物做标记的用法。

游戏案例统一设计play()函数作为教学接口(它的参数部分随案例的需要作相应调整),从而规避游戏平台架构本身的复杂度,使案例有的放矢地服务于当前的教学内容。

1.3 调整函数教学

纵观各类编程语言书籍的结构安排,自定义函数通常位于选择、循环、数组之后,用来实现“模块化”的设计思想,并在面向对象的程序设计中体现实体的行为。

图1 游戏案例的分布和作用

结合游戏平台的编程必然离不开函数的调用和定义。一方面是游戏程序的架构由若干函数组成,平台提供了诸多API函数供使用;另一方面教学将main()函数的定义转移为教学接口play()函数的定义,因此教学设计中的函数部分需要调整。

与main( )函数不同,play( )函数中的参数问题在学习伊始就不能回避,需要在使用游戏平台进行教学的起点位置即扩充自定义函数的概念,但不必深入到思维的层次,尚不需要建立模块化的设计思想,而只作为模块化思维的使用者。当进入“函数”这个知识的正式学习阶段时,再进行模块化的抽象思维训练,再涉及参数的值传递、地址传递、重载、重写等复杂概念。学习过程如图2所示。

图2 结合游戏编程平台的函数教学过程

图3 自动化思维训练的Java教学设计

2 结合游戏编程平台的Java语言教学实践方案

根据IEEE发布的2017年编程语言排行榜数据,Java语言是企业招聘中最受欢迎的语言,在用户群体上仅位于Python和C语言之后。Java语言以其完全面向对象、简单、健壮、安全、可移植性好等特性一直备受欢迎,非常适合以计算思维培养为目标的教学。

图3所示为教学设计包含FunCode游戏平台计算思维培养的案例(表示),以及控制台模式下的具有游戏基因或实际应用场景的一些题目[3](表示)。★至★★★的案例在教学过程中难度适中,★★★★的可以作为扩展性学习使用。

教学设计秉承趣味性加实用性的风格,将问题求解提升到计算思维的高度,探索将传统教学与游戏编程相结合的计算思维培养模式。以自动化思维训练的教学设计为例,设计如下。

计算思维中的自动化是对于机器而言的,即机器可以机械、一步步地按照指令执行计算步骤。实现机械自动化运行的前提条件是在问题抽象的过程中,进行精确和严格的符号标记和建模,并明确各个抽象层次间的联系;而实现机械的自动化控制过程则体现在利用计算机语言进行算法的设计上。因此,自动化思维训练的主体是顺序、选择、循环3种控制结构的逻辑组建。

以上FunCode平台游戏中,“用开关控制灯泡”案例非常简单,根据变量的两个取值,令灯泡呈现“亮”或者“灭”的状态,直接展示控制的效果。“用按键控制小鱼游动”案例是典型ifelse 的if结构或switch结构的应用,用小鱼的不同游动方向呈现选择结构的意义和效果。“查看蔬菜园”案例是典型的switch结构的应用。“打靶计分”是连续区间离散化处理的switch应用。“逆置扑克牌”的游戏展示了使用for循环实现遍历的思想。“超级玛丽顶蘑菇的计分”游戏是使用for循环进行累加计算的效果展示。这些小游戏都赋予了抽象的顺序、选择、循环结构以形象的表现。

循环嵌套的两个游戏略为复杂,它们体现的是多维空间中的遍历思想。“穿越火线”游戏中设计了一个棋盘地图,精灵从(0, 0)处方格出发,点击精灵相邻的某个方格,精灵跳入,遍历该方格的周边是否存在怪物,如果存在则精灵被怪物吃掉。教学设计中用play()函数检测鼠标点击精灵周边某个方格时的响应。“打地鼠”游戏在树林里设有4×4个坑,每个坑有一只地鼠,每次会有一只地鼠随机地从某个坑里冒出头来,用户用木槌敲打它们,每击中一只地鼠,屏幕顶部会显示击中的数量。教学设计中用play()函数遍历4×4个坑,判断木槌是否击中地鼠。

3 结 语

以思维训练为主线,结合FunCode游戏开发平台,将游戏融入传统教学过程的Java语言教学模式、教学设计,从赋予编程应用场景出发,对游戏进行合理化的设计,按照为教学所需的原则抽取一部分游戏环节服务于教学,用游戏的趣味性驱动学习的热情,并自然而然地将形象思维内化为抽象思维,按照抽象、自动化的路径达到了计算思维的培养目标。新模式与传统模式的更好结合将在未来的教学中进一步改进、完善。

猜你喜欢
精灵编程案例
冬精灵
编程,是一种态度
案例4 奔跑吧,少年!
TWO VILLAS IN ONE CEDIA 2020案例大赛获奖案例
Bespoke Art Deco Media Room CEDIA 2020案例大赛获奖案例
元征X-431实测:奔驰发动机编程
海底精灵国
编程小能手
欢舞的精灵们
纺织机上诞生的编程