李飞+王亚杰+尹航+孙玉霞
摘要:针对计算思维“落地”的实际需要,结合计算机程序设计课程教学培养目标的要求,提出基于幻影围棋的案例式教学模式,并以C语言程序设计课程为例,阐述案例的设计方法。
关键词:幻影围棋;计算思维“落地”;C语言程序设计
0引言
随着社会信息化的不断发展,其他学科与计算机学科的融合越来越密切,对大学生计算机应用能力的要求也越来越高,用计算机解决问题的能力逐渐成为衡量大学生素质的标准之一。在我国,理工院校均开设计算机程序设计(C、VB、C#等)的必修课,它是继大学计算机基础之后的另一门计算机主干基础课。通过本课程的学习,使学生正确理解并基本掌握面向过程(或者面向对象)程序设计方法,培养学生的程序设计和上机调试能力以及用计算机处理实际问题的思维方式和能力,为后续专业课程实践和今后的工作提供相关知识。
近年来,以计算思维为核心的计算机基础课程教学改革在各个高校广泛开展,首先要做的具体工作就是解决计算思维能力培养的“落地”问题,即要将计算思维能力培养落实到具体课程内容与教学过程中去。启发式教学和案例式教学就是计算思维“落地”的具体方法。
计算机博弈(Computer Game)也称为机器博弈,是指根据各种棋类游戏规则,让计算机模拟人的思维给出招法,与人或者另一台计算机进行对弈。计算机博弈项目既有趣味性,又有策略性和对抗性,深受广大青年学者的喜爱,并成为人工智能领域一项重要的研究课题。笔者研究幻影围棋项目多年,在文献[4]的启发下,将程序中的部分基础内容作为C语言程序设计的教学案例和实验内容,制作C语言课程设计题目,让学生在游戏中体会学习的乐趣,调动了学生的学习兴趣,取得了良好的学习效果。
1幻影围棋概述
幻影围棋(Phantom go)是一项欧洲的棋类游戏,因为下棋规则是基于围棋,采用9×9的围棋棋盘,但是又在围棋基础上加入了信息不完全的限制,即下棋双方均无法获得对方落子的位置,有中间裁判可以看到双方落子位置,进而给予双方操作是否合法或者是否提子的指令来进行比赛,故称为幻影围棋。它是国际计算机奥林匹克大赛的竞赛项目,也是我国大学生计算机博弈大赛的竞赛项目,是一种集战略、战术和机会为一体的棋类游戏项目。如图1所示,左边是黑方棋盘,中间是白方棋盘,右边是裁判棋盘。裁判的棋盘相当于一个9×9的围棋棋盘,黑方棋盘中的白子是通过裁判的返回信息判断出的部分棋子落子位置,信息是不完全的。这种不完全的信息,既增加了对弈的难度,同时也增加了趣味性和机会性。
2课堂教学实例设计
案例教学法是计算思维“落地”的最直接方法,一个好的案例在教学中会起到事半功倍的效果。笔者在指导幻影围棋博弈项目的过程中,总结了一些适合C语言教学的例子,将C语言的知识与游戏程序有效融合,取得了较好的学习效果,部分实例见表1。
由于篇幅有限,下面只列出两个实例的部分代码。
实例1:幻影围棋的界面设计
在C语言程序设计课程教学中,程序输出运行结果都是DOS命令行式的,表示一个围棋棋盘在初学者眼里似乎是不可能的。该实例利用输出各种线条组合来表示一个棋盘,使学生对C语言程序另眼相看。由于方便显示,我们用表格表示棋盘,每一个单元格表示实际棋盘上的交叉点。部分代码如下:
实例2:初始化棋盘数据结构
在该实例中,利用了结构体类型定义变量表示落子的位置,用二重循环结构控制二维数组的赋值。
3上机实验题目设计
上机实验是C语言程序设计课程的重要教学环节,学生通过上机练习才能更好地掌握和理解C语言各个知识点,锻炼并提高他们的程序设计和程序调试能力。设计实验内容一定要有针对性和综合性,而幻影围棋程序综合运用C语言很多知识点,不仅满足上述要求,而且还增加了趣味性,使实验效果更好。
例如:实验1:统计棋盘上白子的数目和黑子的数目,部分代码如下:
该实验中将循环结构、选择结构、二维数组3个知识点有机地融合,又实现了计数功能,解决了棋类游戏最基本的统计功能。由于篇幅有限,下面仅列出实验题目。
实验2:实现提子(吃子)的过程,并更新棋盘;
实验3:随机产生落子位置,并判断是否该位置已有子。
4课程设计题目设计
课程设计是C语言程序设计的后续课程,目的是巩固学生对C语言知识的综合运用能力,增强学生用计算机解决问题的能力,即计算思维能力。该课程总共一周的时间,要求学生完成一个综合性的程序设计题目。笔者基于幻影围棋设计了一个课设题目,该题目有若干个功能,由一组同学(1~4人)完成,其中一人负责分工、总体程序框架建立及其他功能整合,最后综合成一个简单的幻影围棋竞赛程序,能够实现人机对弈的过程。
课设题目:一个简单的幻影围棋系统
主要功能包括:①绘制棋盘:根据幻影围棋规则绘制9×9的棋盘,并定义变量来保存棋局;②开局初始化:打印棋盘并将一些变量设为初始状态;③先手选择:选择自己为先手还是对方先手(现代围棋下法黑子为先);④招法生成:即生成一个落子点,可以是随机方法(最简单),也可以用定式方法(固定走法);⑤接收裁判信息并响应:每次落子之前,都要询问裁判该位置是否合法,并且根据裁判返回信息做出落子、提子、猜子等策略选择;⑥提子:根据裁判的提子信息,将部分己方的棋子或者对方的棋子提出,并更新棋盘。
以上各功能的设计,不仅综合了C语言很多知识点,又集趣味性和创新性于一体,而且将完整的工程概念引入课程设计中,提高了学生C语言编程能力、创新实践能力和团队协作能力。
5结语
很多学生感觉C语言程序设计这门课程内容比较枯燥乏味,没有学习兴趣。笔者将幻影围棋作为教学实例和上机实验内容以及课程设计题目,由简单到复杂,循序渐进,调动了学生学习积极性的同时也增强了他们勇于探索和创新的能力。很多学生对博弈项目产生了浓厚的兴趣,并且自愿加入幻影围棋开发团队进行深入研究,并以此为基础申报大学生创新项目。笔者所带领的幻影围棋团队参加了2015年全国大学生计算机博弈大赛,取得了幻影围棋项目冠军的好成绩。笔者总结的用幻影围棋程序案例实践计算思维的具体方法也适用其他博弈项目,希望该方法能对计算机程序设计课程教学提供一种参考和帮助。