李柯景
摘 要 本文筆者通過多年的C語言課程的教學(xué)經(jīng)驗(yàn),提出了在C語言教學(xué)過程中引入EasyX圖形庫(kù)的必要性,介紹了通過繪制圖形和制作動(dòng)畫的案例進(jìn)行教學(xué)的方法,激發(fā)學(xué)生利用C語言進(jìn)行編程的興趣,提高學(xué)生的自主性和創(chuàng)新性。
關(guān)鍵詞 EasyX C語言 動(dòng)畫設(shè)計(jì)
1 引入EasyX的必要性
C語言程序設(shè)計(jì)課是理論與實(shí)踐相結(jié)合的課程,實(shí)踐性很強(qiáng),是高等院校的公共基礎(chǔ)課程之一。近幾年來,一般高校采用Visual C++ 6.0作為編輯環(huán)境進(jìn)行C語言課程的講解。盡管Visual C++ 6.0已經(jīng)遠(yuǎn)遠(yuǎn)比從前的tubor C 2.0無論從界面上還是實(shí)際操作上簡(jiǎn)便了很多,但C語言課程的一些經(jīng)典實(shí)例興趣性不強(qiáng),不容易激發(fā)學(xué)生的創(chuàng)新能力。如果能夠?qū)⒖菰锏腃語言學(xué)習(xí)和圖形界面以及電腦游戲結(jié)合到一起,從老師多次強(qiáng)調(diào)講解程序的編寫方法轉(zhuǎn)變?yōu)樽寣W(xué)生自己參與算法的設(shè)計(jì)和程序的編寫,調(diào)動(dòng)起學(xué)生的學(xué)習(xí)興趣,提高學(xué)生的實(shí)踐能力。EasyX讓圖形案例引入進(jìn)C語言的課堂成為可能性。
2 EasyX圖形庫(kù)
標(biāo)準(zhǔn)的C中包含“graphics.h”這個(gè)頭文件,具備強(qiáng)大的圖形功能,利用C語言可以進(jìn)行各種圖形的繪制。但是在Visual C++ 6.0并不包含這個(gè)頭文件。EasyX是針對(duì) C++ 的圖形庫(kù),可以幫助 C語言初學(xué)者快速上手圖形和游戲編程。在Visual C++ 6.0的基礎(chǔ)上安裝EasyX只需下載壓縮包,執(zhí)行 Setup.hta,并跟隨提示安裝即可。如果想手動(dòng)安裝,需要include 和 lib 文件夾下的文件分別拷貝到Visual C++ 6.0對(duì)應(yīng)的 include 和 lib 文件夾內(nèi)即可。這樣就將EasyX圖形庫(kù)引入到了Visual C++ 6.0中??梢岳肊asyX圖形庫(kù)畫出各種幾何圖形和移動(dòng)的圖形,也可以編寫類似我們所熟悉的俄羅斯方塊等小游戲,可以練習(xí)圖形學(xué)的各種算法,等等。
3 EasyX的應(yīng)用
3.1 繪制圖形案例的應(yīng)用
以往循環(huán)結(jié)構(gòu)的典型案例包括像累計(jì)求和求乘積、最大公約數(shù)與最小公倍數(shù)、斐波那契數(shù)列等等數(shù)學(xué)問題,對(duì)于非專業(yè)的學(xué)生來說這些內(nèi)容理解起來并不容易,也不容易產(chǎn)生興趣,因而編程就變成了死記硬背程序。筆者根據(jù)多年的教學(xué)經(jīng)驗(yàn)發(fā)現(xiàn),當(dāng)講解到利用多重循環(huán)結(jié)構(gòu)去輸出各種圖形組合時(shí),學(xué)生的興趣就比較大,因而圖形案例是吸引學(xué)生主動(dòng)學(xué)習(xí)的最佳途徑。如果能夠?qū)⒔Y(jié)果用彩色的圖案顯示出來,并且能夠讓學(xué)生對(duì)程序的簡(jiǎn)要更改后就得到不同的藝術(shù)效果,則學(xué)生的興趣和創(chuàng)新能力都會(huì)被提升起來,從而更好地提高教學(xué)效果。
比如利用EasyX圖形庫(kù)讓學(xué)生畫圓。
運(yùn)行結(jié)果如圖1所示。
利用這樣一個(gè)簡(jiǎn)單的程序就可以實(shí)現(xiàn)在VC固定窗口大小和位置畫出一個(gè)半徑為60的圓。掌握了畫出圓形的基本方法,提出問題讓學(xué)生思考:如何畫出不同半徑的同心圓呢?只需要增加一條循環(huán)語句for(i=0;i<=200;i+=15) 即可。運(yùn)行結(jié)果就會(huì)變?yōu)槿鐖D2所示。
其實(shí),利用EasyX圖形庫(kù)還可以更豐富的應(yīng)用吸引學(xué)生的興趣。例如:如何讓同心圓有層次的逐漸畫出?如何讓同心圓變色或改變位置?是否可以畫出其他圖形等等。學(xué)生可以利用圖形庫(kù)中的各種函數(shù)配合三種基本的程序結(jié)構(gòu)舉一反三,得到各種意想不到的效果,增加了學(xué)習(xí)積極性。
再比如讓學(xué)生利用循環(huán)結(jié)構(gòu)編寫輸出1至100的數(shù)字的例子。如果能夠利用Easyx圖形庫(kù)中的函數(shù)讓這100個(gè)數(shù)字如同打字機(jī)一樣逐個(gè)輸出,則更容易讓學(xué)生理解循環(huán)變量、循環(huán)次數(shù)的真正含義。這樣的表現(xiàn)方法,比調(diào)試程序更加簡(jiǎn)單直觀易于理解,而且還能夠激發(fā)學(xué)生的創(chuàng)造力,從而深刻理解循環(huán)的實(shí)質(zhì)和多重循環(huán)的含義,讓學(xué)生有興趣去主動(dòng)去探究循環(huán)更為廣泛的應(yīng)用。
3.2 動(dòng)畫設(shè)計(jì)案例的應(yīng)用
如果說簡(jiǎn)單的圖形繪制依然不夠吸引學(xué)生的興趣,那么圖像更加美觀的動(dòng)畫設(shè)計(jì)則是學(xué)生容易接受和有興趣的案例。所謂動(dòng)畫,其實(shí)是連續(xù)顯示一系列圖形而已。利用C程序去編寫一些游戲小程序,就離不開圖形的處理。比如,要實(shí)現(xiàn)雪花飛落,就需要天空作為背景,雪花作為新疊加的對(duì)象,讓雪花的圖像反復(fù)出現(xiàn)在背景圖的不同位置,從而實(shí)現(xiàn)雪花落下的動(dòng)畫效果。
具體實(shí)現(xiàn)步驟:
3.2.1素材準(zhǔn)備
1.jpg(背景圖,如圖3)、2.jpg(雪花圖,如圖4)、3.jpg(黑白位圖,如圖5)。其中3.jpg為2.jpg的掩碼圖,也就是黑白位圖。可以通過PHOTOSHOP或者C語言編程等方法獲得。
3.2.2算法準(zhǔn)備
將1.jpg(背景圖)、2.jpg(雪花圖)、3.jpg(黑白位圖)載入內(nèi)存,首先按照背景圖大小設(shè)置窗口大小,并顯示出背景圖,緊接著在初始位置讓3.jpg(黑白位圖)顯示出來并與背景圖進(jìn)行與運(yùn)算。從而預(yù)留出雪花的位置。最后在同一位置繪制2.jpg(雪花圖)。具體代碼:
#include
IMAGE bj, qj,ym;//聲明存儲(chǔ)三個(gè)圖片的變量。
void main()
{
loadimage(&bj;,"1.jpg");//將圖片1.jpg載入內(nèi)存
loadimage(&qj;,"2.jpg");
loadimage(&ym;,"3.jpg");
initgraph(bj.getwidth(), bj.getheight());//根據(jù)背景圖片的大小設(shè)置窗口大小。
putimage(0,0,&bj;);//把圖片1.jpg導(dǎo)入到窗口中。
putimage(0,0, &ym;, SRCAND);//繪制雪花圖片的黑白位圖并與背景圖片進(jìn)行與運(yùn)算。
putimage(0, 0, &qj;, SRCPAINT);//繪制雪花圖與新的背景圖進(jìn)行或運(yùn)算
Sleep(5000);
}
運(yùn)行結(jié)果如圖6所示。
通過這樣一個(gè)簡(jiǎn)單的圖像疊加的程序設(shè)計(jì),引發(fā)學(xué)生的思考:如何讓雪花移動(dòng)從而產(chǎn)生讓雪花飄落的效果?如何控制對(duì)象在背景圖上移動(dòng)的速度和方向?如何控制對(duì)象出現(xiàn)的時(shí)間和位置?如何讓多個(gè)雪花大小不等速度不等地隨意飄落等等。利用這些簡(jiǎn)單的動(dòng)畫設(shè)計(jì),讓學(xué)生理解了位運(yùn)算、循環(huán)、隨機(jī)數(shù)的產(chǎn)生等基礎(chǔ)的編程知識(shí),還可以讓學(xué)生充分發(fā)揮他們的想象力運(yùn)用自己所學(xué)知識(shí)進(jìn)行綜合的應(yīng)用,分組討論,開發(fā)類似于打字游戲這樣的小游戲,給學(xué)生的想象力和創(chuàng)造力以發(fā)揮的空間,激發(fā)學(xué)生課下對(duì)C語言程序設(shè)計(jì)知識(shí)的學(xué)習(xí)興趣,提高編程能力,從而達(dá)到更好的教學(xué)效果。
4 小結(jié)
高校非計(jì)算機(jī)專業(yè)學(xué)生的程序設(shè)計(jì)課程,重在培養(yǎng)學(xué)生的編程思維和能力。在C語言教學(xué)過程中引入EasyX,把枯燥的語法規(guī)則和算法記憶變?yōu)樗惴ǖ撵`活應(yīng)用和實(shí)踐,激發(fā)學(xué)生的主觀能動(dòng)性和創(chuàng)造性,把學(xué)習(xí)編程一件快樂和自主的事情,從而更好地提高教學(xué)效果,達(dá)到教學(xué)的根本目標(biāo)。
參考文獻(xiàn)
[1] 徐智杰.C語言平臺(tái)下動(dòng)畫技術(shù)實(shí)現(xiàn)方法淺析[J]信息技術(shù),2008(22):402-421.
[2] 殷志堅(jiān),段曉磊.基于EasyX的俄羅斯方塊游戲的設(shè)計(jì)和分析[J].科技傳播,2015(11):104-109.
[3] 王曉東.算法設(shè)計(jì)與分析(第三版)[M].北京:清華大學(xué)出版社,2014.
[4] 趙敏,龐蕊.基于EasyX 圖形庫(kù)的C語言課程改革研究與實(shí)踐[J].電腦知識(shí)與技術(shù),2015(11):228-230.
[5] 楊治明.C語言程序設(shè)計(jì)教程[M].人民郵電出版社,2012.