1、 “游戏教学”是旨在用一种寓教于乐的高效学习方法,利用人们“爱玩”的天性,让学习者在“玩”中学习,从而充分调动学习者的学习兴趣,使学习的效率和主动性得到极大的提高。正如苏格拉底的名言:教育不是灌输,而是点燃火焰!一、AI-CODE游戏系统简介 AI-CODE游戏教育平台是一套全新的教育平台,以寓教于乐的游戏教育方式,打破了传统的教育模式,让大家在非压迫的竞技中不知不觉地提高自己的计算机程序设计水平和相关的数学、物理、网络、人工智能等学科知识的应用水平。AI-CODE为程序和算法设计的学习和实践提供了全方位的环境,由于其游戏主题的有趣性、直观性,使学生在学习的同时感到了快乐和成就感,而在娱乐的同
2、时发现自己以前的知识不够用,所以为了得到更多的快乐和成就感,便又投入于学习中,让学生在玩,学习,玩,学习的循环的过程中不断提高自己的程序设计和策略算法设计的水平,整个过程是一个自主的学习过程,是一种逐渐“迷上”的过程,而非被强迫的。AI-CODE学习三者的关系如下图:AI-RCJ是AI-CODE中一套虚拟足球机器人的制作和竞技仿真的教育平台,并实现了C、C+、Java、C#等多种编程语言同台竞技。为了让自己的足球在竞技中具有良好的攻防性和机动性,必须给虚拟足球机器人赋予一定的智能,智能化程度的高低取决于使用者数学、物理、计算机等相关学科知识的灵活运用程度。AI-RCJ界面如下图:二、快乐的学习
3、之旅 下面在“AI-RCJ”教育平台上,以几个简单的例子展示C语言的快乐学习之旅,在这些快乐的有“成就感”的竞技中逐渐掌握C程序设计语言一些关键语法,体会到“游戏教学”的乐趣。 (一)我的第一个会动的机器人 在AI-RCJ教育平台中我们只须书写几句简单的代码,就立刻可以看到一个会动的“足球机器人”,会让我们马上感到有些小小的“成就感”,并吸引我们继续地深入。#include /* *机器人执行函数 */ void run() /*在这里添加控制机器人的代码*/ doMoveTo(30, 30);/* 移动到坐标点(30,30) */ 这段代码代表了一个“函数”,这个函数的名字叫做 run。函数
4、是 c 语言程序的一个主要组成部分,每个函数都有自己的名字,并且可以完成相应的功能。run函数只由单个语句组成,doMoveTo(30, 30)完成控制机器人移动到(30, 30)这个坐标点。 (二)让机器人会撞球 要让机器人撞击足球就要知道足球的坐标。在程序中调用 getBallX 和 getBallY 可以获取足球的坐标。void run(void) double ballX,ballY;/* 定义两个变量 */ ballX = getBallX();/* 获得足球的x坐标 */ ballY = getBallY(); /* 获得足球的y 坐标 */ doMoveTo(ballX,ball
5、Y);/*向足球撞击*/ 在 run 函数里面,第一条语句定义了两个“变量”,变量是 c 语言中的一个基本元素,可以用它们来存放不同的数值,程序设计中变量的作用和代数中的未知数的作用类似。在使用一个变量之前,必须先定义它,“double ballX, ballY;”这条语句完成了变量的定义。这两个变量的名字是 ballX 和 ballY,以后可以通过这两个名字来使用变量,就像使用函数的名字来调用一个函数一样。变量是有“类型”的,变量的类型规定了变量可以存放什么样的数据,ballX 和 ballY 这两个变量的类型是 double,表示他们可以存放浮点数,也就是我们通常所说的小数。语句 ball
6、X = getBallX()使用了变量 ballX,这是一个“赋值语句”,等号“=”将赋值语句分成了左右两部分,等号的左边一般是一个变量,等号表示赋值操作,就是把右边的数值存放到左边的变量当中,在这里等号并不是要表示两边的内容相等。 在这条赋值语句中,等号右边的部分是一个函数调用,被调用的函数叫 getBallX,这个函数是一个有“返回值”的函数,这表示调用这个函数后,我们可以得到一个数值,这个数值代表了函数执行的结果。getBallX函数的返回值是足球的 ballX坐标。赋值语句“ballX = getBallX();”把 getBallX函数的返回值保存到了变量 ballX 里,执行这个语
7、句的时候,实际上发生了两件事,首先是调用 getBallX 函数,并取得函数的返回值,然后就是将这个返回值保存到变量 ballX里。语句 ballY = getBallY()是类似的,这条语句把对手的 ballY坐标保存到的变量 y里。现在知道了足球当前的坐标,语句“doMoveTo(ballX, ballY);”完成了向足球所在位置撞击的工作。在这里我们将变量 ballX, ballY作为参数传递给 doMoveTo 函数,因为变量 ballX, ballY 里存放了足球所在位置的坐标,通过用这两个变量作为参数调用doMoveTo 函数,也就是将足球所在位置作为撞击的目标点,实现向足球所在位
8、置撞击。但我们看到机器人在刚开始时撞击了一下足球,之后便停止不动。如何能让机器人能不断地撞球呢?我们用一种新的语句:循环语句,实现一个不断撞击足球的机器人。double ballX, ballY; /* 定义两个变量 */ while(1) ballX = getBallX();doMoveTo(ballX,ballY);就这样让我们体会到循环语句的“威力”! (三)让机器人聪明起来避免“乌龙”球 好了,我们的机器人已经能动起来啦,但如何让我们的机器人变“聪明”起来呢?能实现一个可以根据自己的进攻方向和足球的运动方向来尽量避免踢“乌龙”球的机器人。我们会不知不觉地想办法去不断学习,让我们机器人
9、越来起“聪明”! void run(void) int shoot;/*定义控制变量*/ double ballHeading;/*定义变量,存储球的运动方向*/ double heading;/*定义变量,存储机器人的进攻方向*/ /*定义变量,存储球的ballX,ballY坐标*/ double goalMin,goalMax; double courtWidth,courtHeight;double goalSize; /*定义变量,存储球门的大小(宽度)*/ /*定义变量,存储球的运动直线方程ballY=k*ballX+b中的b和k*/ double b,k;heading =getA
10、ttack();/*得到机器人的进攻方向*/ courtWidth=getCourtWidth();/*得到场地的宽度*/ courtHeight=getCourtHeight();/*得到场地的高度*/ goalSize=getGoalSize();/*得到球门的大小*/ goalMin=courtHeight/2-goalSize/2;goalMax=courtHeight/2+goalSize/2; while(1) /*求出足球的运动直线*/ ballHeading = getBallHeading();k = tan(ballHeading);b = ballY - k*ballX;
11、/*如果机器人是由左向右进攻,而且当前球的运动方向是由右向左运动*/ if(heading0 & ballHeadingPI/2 & ballHeadingPI*3/2) if( goalMin50*k + b) shoot = 0; else shoot = 1; /*如果机器人是由右向左进攻,而且当前球的运动方向是由左向右运动*/ else if(heading=0 &PI/2 | ballHeading3*PI/2) if(goalMink*courtWidth + b k*courtWidth + bgoalMax) shoot = 0; shoot = 1;/*其他情况 */ els
12、e shoot = 1;if(shoot=1) doMoveTo(ballX,ballY else doTurnTo(PI*3/2); doMoveBack(300);通过循环语句(while)和选择语句(if)等知识的综合应用,让我们的机器人变得越来越“聪明”啦。接着下来,我们又会想让我们的机器人变成有策略的进攻和防守,团队协作,最后让整个“足球”比赛变得越来越有意思,学习变得越来越有趣。三、结语 AI-CODE中的AI-RCJ让学生在这“虚拟足球竞技”的教育平台上,让自己的机器人动起来,不断地撞球,聪明起来,有策略的进攻和防守等一系列有“成就感”的快乐游戏中,逐渐“迷上”程序和算法设计。为了更好地“玩”,不断地学习,不断地提高自己的计算机程序设计水平和策略算法设计水平,真正体会到寓教于乐的乐趣!参考文献 1龚睿AI-CODE SYSTEMS在智能机器人教学中的应用J2004 2沙有威程序设计教学的新载体智能机器J2002 3中鸣数码科技有限公司AI-CODE使用手册EB 4杜飞雪,陈胜峰C+语言学习利器M中国水利水电出版社,2007
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1