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