C語言游戲教學(xué)教育
摘要:傳統(tǒng)的計(jì)算機(jī)程序設(shè)計(jì)教學(xué)方式往往缺乏互動(dòng)性和主動(dòng)性,存在著枯燥乏味、無趣;AI-CODE游戲教育平臺(tái)是一套全新的教育平臺(tái),以寓教于樂的游戲教育方式,打破了傳統(tǒng)的教育模式,讓大家在非壓迫的競技術(shù)中不知不覺地提高自己的計(jì)算機(jī)程序設(shè)計(jì)水平和算法設(shè)計(jì)水平,最后以具體的例子展示C語言的快樂學(xué)習(xí)之旅。
關(guān)鍵字:“C語言”;C;AI-CODE;游戲教學(xué);程序設(shè)計(jì)
前言
傳統(tǒng)的計(jì)算機(jī)程序設(shè)計(jì)教學(xué)方式大部分都是以教師講授為主,而學(xué)生被動(dòng)地接受知識(shí)。這種教育模式往往存在著枯燥乏味、無趣,而且很大程度上存著單向性(也就是常說的填鴨式教學(xué)),教授者和被教授者之間缺乏互動(dòng)性,使學(xué)生普遍產(chǎn)生學(xué)習(xí)只為了應(yīng)付考試等厭學(xué)的情緒,不能積極地發(fā)展和挖掘?qū)W生的智力,甚至?xí)髿W(xué)生的求真求新的天性,他們的創(chuàng)造力逐漸在枯燥無味的程序設(shè)計(jì)教學(xué)中消磨殆盡。
如何能讓學(xué)生能體會(huì)到學(xué)生程序設(shè)計(jì)的樂趣,并逐漸地像迷上“網(wǎng)絡(luò)游戲”那樣“迷上”程序設(shè)計(jì)的學(xué)習(xí)呢?
“游戲教學(xué)”是旨在用一種寓教于樂的高效學(xué)習(xí)方法,利用人們“愛玩”的天性,讓學(xué)習(xí)者在“玩”中學(xué)習(xí),從而充分調(diào)動(dòng)學(xué)習(xí)者的學(xué)習(xí)興趣,使學(xué)習(xí)的效率和主動(dòng)性得到極大的提高。正如蘇格拉底的名言:教育不是灌輸,而是點(diǎn)燃火焰!
一、AI-CODE游戲系統(tǒng)簡介
AI-CODE游戲教育平臺(tái)是一套全新的教育平臺(tái),以寓教于樂的游戲教育方式,打破了傳統(tǒng)的教育模式??么蠹以詵茄蠱鵲木杭賈脅恢瘓醯靨岣咦約旱募撲慊絳蟶杓撲膠拖喙氐氖、五d懟⑼紜⑷斯ぶ悄艿妊Э浦兜撓τ盟健I-CODE為程序和算法設(shè)計(jì)的學(xué)習(xí)和實(shí)踐提供了全方位的環(huán)境,由于其游戲主題的有趣性、直觀性,使學(xué)生在學(xué)習(xí)的同時(shí)感到了快樂和成就感,而在娛樂的同時(shí)發(fā)現(xiàn)自己以前的知識(shí)不夠用,所以為了得到更多的快樂和成就感,便又投入于學(xué)習(xí)中,讓學(xué)生在玩,學(xué)習(xí),玩,學(xué)習(xí)的循環(huán)的過程中不斷提高自己的程序設(shè)計(jì)和策略算法設(shè)計(jì)的水平,整個(gè)過程是一個(gè)自主的學(xué)習(xí)過程,是一種逐漸“迷上”的過程,而非被強(qiáng)迫的。AI-CODE學(xué)習(xí)三者的關(guān)系如下圖:
AI-RCJ是AI-CODE中一套虛擬足球機(jī)器人的制作和競技仿真的教育平臺(tái),并實(shí)現(xiàn)了C、C++、Java、C#等多種編程語言同臺(tái)競技。為了讓自己的足球在競技中具有良好的攻防性和機(jī)動(dòng)性,必須給虛擬足球機(jī)器人賦予一定的智能,智能化程度的高低取決于使用者數(shù)學(xué)、物理、計(jì)算機(jī)等相關(guān)學(xué)科知識(shí)的靈活運(yùn)用程度。AI-RCJ界面如下圖:
二、快樂的學(xué)習(xí)之旅
下面在“AI-RCJ”教育平臺(tái)上,以幾個(gè)簡單的例子展示C語言的快樂學(xué)習(xí)之旅,在這些快樂的有“成就感”的競技中逐漸掌握C程序設(shè)計(jì)語言一些關(guān)鍵語法,體會(huì)到“游戲教學(xué)”的樂趣。
(一)我的第一個(gè)會(huì)動(dòng)的機(jī)器人
在AI-RCJ教育平臺(tái)中我們只須書寫幾句簡單的代碼,就立刻可以看到一個(gè)會(huì)動(dòng)的“足球機(jī)器人”,會(huì)讓我們馬上感到有些小小的“成就感”,并吸引我們繼續(xù)的深入。
#includeairobot/c/SimpleRobot.h
/**
*機(jī)器人執(zhí)行函數(shù)
*/
voidrun()
{
/*在這里添加控制機(jī)器人的代碼*/
doMoveTo(30,30);/*移動(dòng)到坐標(biāo)點(diǎn)(30,30)*/
}
這段代碼代表了一個(gè)“函數(shù)”,這個(gè)函數(shù)的名字叫做run。函數(shù)是c語言程序的一個(gè)主要組成部分,每個(gè)函數(shù)都有自己的名字,并且可以完成相應(yīng)的功能。run函數(shù)只由單個(gè)語句組成,doMoveTo(30,30)完成控制機(jī)器人移動(dòng)到(30,30)這個(gè)坐標(biāo)點(diǎn)。
(二)讓機(jī)器人會(huì)撞球
要讓機(jī)器人撞擊足球就要知道足球的坐標(biāo)。在程序中調(diào)用getBallX和getBallY可以獲取足球的坐標(biāo)。
voidrun(void)
{
doubleballX,ballY;/*定義兩個(gè)變量*/
ballX=getBallX();/*獲得足球的x坐標(biāo)*/
ballY=getBallY();/*獲得足球的y坐標(biāo)*/
doMoveTo(ballX,ballY);/*向足球撞擊*/
}
在run函數(shù)里面,第一條語句定義了兩個(gè)“變量”,變量是c語言中的一個(gè)基本元素,可以用它們來存放不同的數(shù)值,程序設(shè)計(jì)中變量的作用和代數(shù)中的未知數(shù)的作用類似。在使用一個(gè)變量之前,必須先定義它,“doubleballX,ballY;”這條語句完成了變量的定義。這兩個(gè)變量的名字是ballX和ballY,以后可以通過這兩個(gè)名字來使用變量,就像使用函數(shù)的名字來調(diào)用一個(gè)函數(shù)一樣。變量是有“類型”的,變量的類型規(guī)定了變量可以存放什么樣的數(shù)據(jù),ballX和ballY這兩個(gè)變量的類型是double,表示他們可以存放浮點(diǎn)數(shù),也就是我們通常所說的小數(shù)。轉(zhuǎn)載于范文中國網(wǎng)。
語句ballX=getBallX()使用了變量ballX,這是一個(gè)“賦值語句”,等號(hào)“=”將賦值
語句分成了左右兩部分,等號(hào)的左邊一般是一個(gè)變量,等號(hào)表示賦值操作,就是把右邊的數(shù)值存放到左邊的變量當(dāng)中,在這里等號(hào)并不是要表示兩邊的內(nèi)容相等。在這條賦值語句中,等號(hào)右邊的部分是一個(gè)函數(shù)調(diào)用,被調(diào)用的函數(shù)叫g(shù)etBallX,這個(gè)函數(shù)是一個(gè)有“返回值”的函數(shù),這表示調(diào)用這個(gè)函數(shù)后,我們可以得到一個(gè)數(shù)值,這個(gè)數(shù)值代表了函數(shù)執(zhí)行的結(jié)果。getBallX函數(shù)的返回值是足球的ballX坐標(biāo)。賦值語句“ballX=getBallX();”把getBallX函數(shù)的返回值保存到了變量ballX里,執(zhí)行這個(gè)語句的時(shí)候,實(shí)際上發(fā)生了兩件事,首先是調(diào)用getBallX函數(shù),并取得函數(shù)的返回值,然后就是將這個(gè)返回值保存到變量ballX里。語句ballY=getBallY()是類似的,這條語句把對(duì)手的ballY坐標(biāo)保存到的變量y里。
現(xiàn)在知道了足球當(dāng)前的坐標(biāo),語句“doMoveTo(ballX,ballY);”完成了向足球所在位置撞擊的工作。在這里我們將變量ballX,ballY作為參數(shù)傳遞給doMoveTo函數(shù),因?yàn)樽兞縝allX,ballY里存放了足球所在位置的坐標(biāo),通過用這兩個(gè)變量作為參數(shù)調(diào)用doMoveTo函數(shù),也就是將足球所在位置作為撞擊的目標(biāo)點(diǎn),實(shí)現(xiàn)向足球所在位置撞擊。
但我們看到機(jī)器人在剛開始時(shí)撞擊了一下足球,之后便停止不動(dòng)。
如何能讓機(jī)器人能不斷地撞球呢?我們用一種新的語句:循環(huán)語句,實(shí)現(xiàn)一個(gè)不斷撞擊足球的機(jī)器人。
voidrun(void)
{
doubleballX,ballY;/*定義兩個(gè)變量*/
while(1){
ballX=getBallX();/*獲得足球的x坐標(biāo)*/
ballY=getBallY();/*獲得足球的x坐標(biāo)*/
doMoveTo(ballX,ballY);
}
}
就這樣讓我們體會(huì)到循環(huán)語句的“威力”!(三)讓機(jī)器人聰明起來——避免“烏龍”球
好了,我們的機(jī)器人已經(jīng)能動(dòng)起來啦,但如何讓我們的機(jī)器人變“聰明”起來呢?能實(shí)現(xiàn)一個(gè)可以根據(jù)自己的進(jìn)攻方向和足球的運(yùn)動(dòng)方向來盡量避免踢“烏龍”球的機(jī)器人。
我們會(huì)不知不覺地想辦法去不斷學(xué)習(xí),讓我們機(jī)器人越來起“聰明”!
voidrun(void)
{
intshoot;/*定義控制變量*/
doubleballHeading;/*定義變量,存儲(chǔ)球的運(yùn)動(dòng)方向*/
doubleheading;/*定義變量,存儲(chǔ)機(jī)器人的進(jìn)攻方向*/
doubleballX,ballY;/*定義變量,存儲(chǔ)球的ballX,ballY坐標(biāo)*/
doublegoalMin,goalMax;
doublecourtWidth,courtHeight;
doublegoalSize;/*定義變量,存儲(chǔ)球門的大。▽挾龋*/
/*定義變量,存儲(chǔ)球的運(yùn)動(dòng)直線方程ballY=k*ballX+b中的b和k*/
doubleb,k;
heading=getAttack();/*得到機(jī)器人的進(jìn)攻方向*/
courtWidth=getCourtWidth();/*得到場地的寬度*/
courtHeight=getCourtHeight();/*得到場地的高度*/
goalSize=getGoalSize();/*得到球門的大小*/
goalMin=courtHeight/2-goalSize/2;
goalMax=courtHeight/2+goalSize/2;
while(1){
/*求出足球的運(yùn)動(dòng)直線*/
ballX=getBallX();
ballY=getBallY();
ballHeading=getBallHeading();
k=tan(ballHeading);
b=ballY-k*ballX;
/*如果機(jī)器人是由左向右進(jìn)攻,而且當(dāng)前球的運(yùn)動(dòng)方向是由右向左運(yùn)動(dòng)*/
if(heading0ballHeadingPI/2ballHeadingPI*3/2){
if(goalMin50*k+bgoalMax50*k+b){
shoot=0;
}else{
shoot=1;
}
}
/*如果機(jī)器人是由右向左進(jìn)攻,而且當(dāng)前球的運(yùn)動(dòng)方向是由左向右運(yùn)動(dòng)*/
elseif(heading=0
(ballHeading=0ballHeadingPI/2
||ballHeading2*PIballHeading3*PI/2))
{
if(goalMink*courtWidth+b
k*courtWidth+bgoalMax){
shoot=0;
}else{
shoot=1;
}
}
/*其他情況*/
elseshoot=1;
if(shoot==1){
doMoveTo(ballX,ballY
}else{
doTurnTo(PI*3/2);
doMoveBack(300);
}
}
}
通過循環(huán)語句(while)和選擇語句(if)等知識(shí)的綜合應(yīng)用,讓我們的機(jī)器人變得越來越“聰明”啦。接著下來,我們又會(huì)想讓我們的機(jī)器人變成有策略的進(jìn)攻和防守,團(tuán)隊(duì)協(xié)作。。。。。。,最后讓整個(gè)“足球”比賽變得越來越有意思,學(xué)習(xí)變得越來越有趣。
四、結(jié)語
AI-CODE中的AI-RCJ讓學(xué)生在這“虛擬足球競技”的教育平臺(tái)上,讓自己的機(jī)器人動(dòng)起來,不斷地撞球,聰明起來,有策略的進(jìn)攻和防守。。。。。。等一系列有“成就感”的快樂游戲中,逐漸“迷上”程序和算法設(shè)計(jì)。為了更好地“玩”,不斷地學(xué)習(xí),不斷地提高自己的計(jì)算機(jī)程序設(shè)計(jì)水平和策略算法設(shè)計(jì)水平,真正體會(huì)到寓教于樂的樂趣!
參考文獻(xiàn)
[1]龔睿.AI-CODESYSTEMS在智能機(jī)器人教學(xué)中的應(yīng)用[J].2004.
[2]沙有威.程序設(shè)計(jì)教學(xué)的新載體——智能機(jī)器[J].2002.
[3]中鳴數(shù)碼科技有限公司.AI-CODE使用手冊[EB].
[4]杜飛雪,陳勝峰.C++語言學(xué)習(xí)利器[M].中國水利水電出版社,2007.
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 yyfangchan@163.com (舉報(bào)時(shí)請帶上具體的網(wǎng)址) 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除