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