陳文青
(紹興職業(yè)技術(shù)學(xué)院 信息工程學(xué)院,浙江 紹興312000)
游戲算法融合情景模擬在高職C語言教學(xué)中的應(yīng)用
陳文青
(紹興職業(yè)技術(shù)學(xué)院 信息工程學(xué)院,浙江 紹興312000)
對高職教師與學(xué)生來說,C語言是一門讓他們普遍覺得枯燥無味、難教難學(xué)的課程.若采用常規(guī)的教學(xué)內(nèi)容與教學(xué)方式,學(xué)生往往難以理解與應(yīng)用,許多學(xué)生喪失學(xué)習(xí)該課程的興趣與信心.研究主要從激發(fā)學(xué)生學(xué)習(xí)該課程的內(nèi)在動機角度進行探索,采用難度適中的游戲算法融合情景模擬的方式進行教學(xué),讓學(xué)生因有趣而愿主動探究、因難度不大而有學(xué)好的信心,激發(fā)學(xué)生學(xué)習(xí)的內(nèi)在動機,從而達到良好的教學(xué)效果.
C語言;高職;游戲算法;情景模擬
隨著教學(xué)條件的改善,當(dāng)前高職C語言程序設(shè)計教學(xué)一般采用多媒體加機房的授課方式,形成了以考試為中心來組織教學(xué)的現(xiàn)象,教學(xué)內(nèi)容以考試內(nèi)容是否涉及為取舍標(biāo)準(zhǔn).多媒體課堂上選用一般的語法算法案例進行講解,然后在機房讓學(xué)生練習(xí)書上實踐題目或者是常規(guī)的實踐題目,若是課程考核與等級考試結(jié)合,則練習(xí)題目主要采用等級考試試題庫題目或相似題目.一段時間后,大多數(shù)學(xué)生開始感覺學(xué)習(xí)C語言枯燥無味,加上上機屢屢受挫,久而久之,學(xué)生便覺得學(xué)習(xí)C語言又難又無趣,喪失學(xué)習(xí)C語言的興趣,甚至放棄該課程的學(xué)習(xí).本研究主要從如何激發(fā)學(xué)生學(xué)習(xí)該課程的內(nèi)在動機角度進行探索,采用游戲算法融合情景模擬的方式進行教學(xué),激發(fā)與維持學(xué)生學(xué)習(xí)C語言的興趣,讓學(xué)生因為興趣而自覺主動地去學(xué)習(xí)、去探究,真正實現(xiàn)課程的教學(xué)目標(biāo).
C語言的難教難學(xué)與枯燥乏味是授課教師與學(xué)生的普遍感受,目前國內(nèi)有的高校已經(jīng)意識到從趣味性角度去改善枯燥乏味的問題,如把動畫作為案例融入教學(xué)中,通過對一個動畫程序的運行與解釋,加深學(xué)生對算法的理解與應(yīng)用;有的僅是在第一次課或開始階段的課堂上展示一些用C語言開發(fā)的游戲或程序,由于難度之類的原因,之后的教學(xué)時間不再涉及,按一般常規(guī)進行教學(xué);由于趣味性游戲案例匱乏,教師并未創(chuàng)新加工新的趣味游戲,僅是“漢諾塔”“百元買百雞”“兔子繁殖問題”等幾個非常有限甚至有些乏味的案例,未能很好地激發(fā)與保持學(xué)生的興趣[1].由于高職院校與本科院校的學(xué)生接受能力存在一定的差異,對于算法難度較高的游戲,學(xué)生難以理解,更談不上編寫,復(fù)雜度較高的游戲算法并不能真正應(yīng)用到高職C語言程序設(shè)計教學(xué)中[2].
在C語言程序設(shè)計教學(xué)過程中,常用的有項目教學(xué)法、案例教學(xué)法、提問式、啟發(fā)式等教學(xué)方式[3],但在這些方法的教學(xué)過程中,較少或忽視了對算法或一些較難理解的概念的情景模擬.情景模擬體驗教學(xué)指的是教師通過創(chuàng)設(shè)教學(xué)情境,引發(fā)學(xué)生的體驗性學(xué)習(xí),二者互為依托,構(gòu)成一個完整的有生命的課堂發(fā)展系統(tǒng),從而形成有情感的、創(chuàng)新的、具有人文價值趨向的課堂教學(xué)[4].由于C語言程序設(shè)計課程本身具有的特性,對于常規(guī)的教學(xué)內(nèi)容與教學(xué)方式,學(xué)生理解與消化授課內(nèi)容比較困難,特別是高職院校,大多數(shù)學(xué)生的基礎(chǔ)知識薄弱,學(xué)習(xí)動力及自信心不強,自我管理以及自我約束力較差,由于不能理解與應(yīng)用,對課程感到枯燥乏味,許多學(xué)生喪失學(xué)習(xí)信心與興趣.
對這樣一門普遍讓教師與學(xué)生覺得枯燥無味、難教難學(xué)的課程,如何進行教與學(xué)是值得探討的問題.從學(xué)生學(xué)習(xí)動機角度來說,學(xué)生學(xué)習(xí)的動機有外在動機和內(nèi)在動機,外在動機也稱外源性動機,指由外在的獎懲或害怕考試不及格等活動之外的原因激起的動機;內(nèi)在動機也稱內(nèi)源性動機,是源于興趣、好奇心、求成的需要或自信心等個人特征的動機[5].如何讓該課程學(xué)習(xí)變得有趣?如何激發(fā)學(xué)生的好奇心、求知欲?如何讓學(xué)生自覺主動地去學(xué)習(xí),課內(nèi)課外都愿意花費時間與精力去研究它,而不僅僅是應(yīng)付考試?如何讓該課程變得不難學(xué),不難掌握,不讓學(xué)生因為難學(xué)而選擇放棄?
要讓學(xué)生了解本課程的用途,如展示用C語言編寫的實用控制程序,讓學(xué)生知道看得見的實際用途;愛玩是人的天性,那么就把游戲作為切入點,把游戲案例融入教學(xué)中,讓學(xué)生覺得編程也可以像游戲一樣好玩,主動去探究[6];針對因難學(xué)而想放棄該課程學(xué)習(xí)的問題,可想法使之變得簡單易理解,選擇或設(shè)計難度在學(xué)生能掌控范圍內(nèi)的游戲,并對游戲算法及一些難理解的概念進行情景模擬,降低學(xué)習(xí)難度.當(dāng)學(xué)生覺得學(xué)習(xí)C語言有用而想去掌控、有趣而想去探究、難度不大而有學(xué)好的信心時,就能夠調(diào)動激發(fā)學(xué)生學(xué)習(xí)C語言的內(nèi)在動機.
簡單趣味游戲算法貫穿整個教學(xué)過程,激發(fā)學(xué)生主動探究精神.在教學(xué)中如果直接講解語法、算法,大多枯燥無味,學(xué)生很難聽下去,教學(xué)效果往往不理想.玩是人的天性,若能把這些枯燥的語法、算法變得像游戲一樣有趣,難度與復(fù)雜度又在大多學(xué)生能理解與掌控的范圍內(nèi),學(xué)習(xí)就如玩游戲,何樂而不為呢?教師對算法和一些難理解的概念進行情景模擬,使學(xué)生參與其中,提高學(xué)生的學(xué)習(xí)主動性,加深學(xué)生對知識點的理解.
由于篇幅有限,不能一一展示教學(xué)中的游戲案例,本文選取的三個游戲案例,主要對應(yīng)C語言中的if語句、do-while語句、while語句、continue語句、break語句等知識點,教師可根據(jù)不同授課內(nèi)容,對游戲案例靈活改動與擴展挖掘、設(shè)計更多實用的趣味游戲案例.
游戲案例一:單次抽獎游戲
輸入一個1-100之間的整數(shù),若輸入的整數(shù)恰好等于電腦隨機產(chǎn)生的整數(shù),則可以抽到大獎,獎品自行設(shè)置.
對應(yīng)知識點:雙分支if語句使用.
創(chuàng)設(shè)情境:上課時,教師可先和學(xué)生們說明游戲規(guī)則,讓學(xué)生說出一個指定范圍的數(shù)字,若該數(shù)字與電腦產(chǎn)生的數(shù)字一致,則中獎.和學(xué)生們玩抽獎游戲,獎品可以是平時成績幸運分,也可是甜甜的棒棒糖,總之,調(diào)動學(xué)生的興致,開心參與即可.
案例分析:學(xué)生清楚游戲過程后,可和學(xué)生一起進行案例分析,如何實現(xiàn)抽獎過程.可定義2個整型變量存放輸入的整數(shù)與電腦產(chǎn)生的隨機數(shù),然后比較這兩個整數(shù)是否相等,若相等則中獎,否則給出不中獎提示信息,由于比較的結(jié)果只有2種,因此采用雙分支結(jié)構(gòu).
程序清單:
#include lt;stdio.hgt;
#include lt;stdlib.hgt;
#include lt;time.hgt;
main()
int rand num,key;
srand( time(NULL) );
rand num = rand()%100+1 ;//隨機產(chǎn)生第一個1~100間的數(shù)
if (key== rand num)
else
}
程序運行結(jié)果如圖1所示:
圖 1
案例小結(jié):在完成該項試驗任務(wù)時,教師可告訴學(xué)生編碼的時候,中獎或未中獎的獎品.學(xué)生可自行設(shè)置,學(xué)生的獎品設(shè)置充滿個性與趣味性,課堂氣氛輕松、活躍.在完成該項試驗任務(wù)后,可對該案例進行擴展,對學(xué)生提出問題,比較的結(jié)果可產(chǎn)生各種等級的獎項設(shè)置情況,案例稍加修改就可變成if語句多分支結(jié)構(gòu).
游戲案例二:多次抽獎游戲
輸入一個1-100之間的整數(shù),電腦將隨機產(chǎn)生兩個1-100間的數(shù),若輸入的整數(shù)恰好在電腦隨機產(chǎn)生隨機數(shù)之間,則抽到大獎,若想繼續(xù)抽獎,則輸入“Y”或“y”字符,若想結(jié)束抽獎游戲,則輸入非“Y”或“y”字符,結(jié)束抽獎游戲.獎品可自行設(shè)置.
對應(yīng)知識點:do-while循環(huán).
創(chuàng)設(shè)情境:總結(jié)單次抽獎缺陷,抽一次獎程序就結(jié)束,想再玩的話需要重新運行程序,能否讓玩家自己決定是否退出游戲,比如若想繼續(xù)玩就輸入“Y”,不想繼續(xù)玩了就輸入“N”或是其他字符.
案例分析:由于不限制抽獎次數(shù),因此該案例采用do-while循環(huán)語句更合適,在案例一基礎(chǔ)上,一次抽獎判斷結(jié)束后,給出提示信息,是否需要繼續(xù)抽獎(Y/y),由于接下來需要接收輸入的一個字符信息進行判斷,因此需要把提示信息后的回車符及輸入判斷字符后的回車符清空,以便進行下一輪的抽獎.
程序清單:
#include lt;stdio.hgt;
#include lt;stdlib.hgt;
#include lt;time.hgt;
main()
int randnum1, randnum2,key;
char try Again;
srand( time(NULL) );
do
{
randnum1 = rand()%100+1 ;//隨機產(chǎn)生第一個1~100間的數(shù)
randnum2 = rand()%100+1;
if (key lt;=randnum2 amp;amp; key gt;= randnum1 || key gt;= randnum2 amp;amp; key lt;= randnum1)
else
get char();
get char(); //清空輸入緩沖
}
程序運行結(jié)果如圖2所示:
圖 2
案例小結(jié):本實驗是不限定玩的次數(shù),也可讓學(xué)生改成限定抽獎次數(shù)的情況,對應(yīng)指定循環(huán)次數(shù)的for語句、while語句情況.
游戲案例三:必勝的乙方
有21枚硬幣,甲乙兩人輪流取硬幣,每人每次可拿1~4枚硬幣,不能多拿也不能不拿,誰取到最后一枚硬幣誰就輸了.要求甲先取硬幣,乙方如何抽取才能保證一定勝利.
對應(yīng)知識點:while語句、continue語句、break語句
創(chuàng)設(shè)情境:在講解該案例之前,教師先和學(xué)生做游戲,教師帶21枚1元硬幣到課堂,和學(xué)生說明游戲規(guī)則,2人輪流取硬幣,每人每次可拿1~4枚硬幣,不能多拿也不能不拿,誰取到最后一枚硬幣誰就輸了,游戲參與對象為教師與學(xué)生,要求學(xué)生先取硬幣,若教師輸了,則21元歸贏的學(xué)生,作為加餐費,教師掌握著必勝法寶,游戲的結(jié)果當(dāng)然是以學(xué)生挑戰(zhàn)失敗.
問題產(chǎn)生:為何多名學(xué)生上講臺挑戰(zhàn)教師,卻都全軍覆沒?教師掌握了什么規(guī)則,使之成為不敗者?
案例分析:教師要保證自己是必勝方,也就是讓學(xué)生拿到最后一枚硬幣,只有一種可能,那就是只給學(xué)生剩下1枚硬幣,于是問題轉(zhuǎn)化為“20枚硬幣,甲乙兩人輪流取硬幣,每人每次可拿1~4枚,不能多拿也不能不拿,誰取到最后一枚硬幣誰就贏”,為了讓乙方取到最后一枚硬幣,則要保證最后一輪抽取之前剩下5枚硬幣,這樣,無論甲方怎樣取硬幣,乙方都可將硬幣取走.于是問題轉(zhuǎn)化為“15枚硬幣情況”,同理,為了讓乙方取到最后一枚硬幣,則要保證最后一輪抽取之前剩下5枚硬幣.問題又轉(zhuǎn)化為10枚硬幣情況,可以推出這樣的結(jié)論,在抽取的過程中,乙方只要保證每一輪的抽取硬幣數(shù)與甲方抽取硬幣數(shù)量之和為5,就能保證自己一定勝利. 教師就是利用這個規(guī)則,使自己成為不敗者.
程序清單:
main()
{
int teacher , student, coin num = 21;// coin num存放初始硬幣數(shù)量
while(1)
{
if(studentlt;1 || studentgt;4 || studentgt;coin num)
coin num = coin num - student;
teacher = 5 - student;
coin num = coin num - teacher;
}
程序運行結(jié)果如圖3所示:
圖 3
好的游戲案例也需好的傳達,才能充分發(fā)揮游戲案例的趣味性,如一個好笑的故事若只是平淡地陳述,笑話也就變得不那么好笑.游戲算法融合游戲情景模擬,可活躍課堂氣氛,拉近師生距離,創(chuàng)設(shè)良好的學(xué)習(xí)氛圍,充分調(diào)動學(xué)生參與游戲的熱情,讓學(xué)生覺得編程也可以像游戲一樣好玩,激發(fā)學(xué)生學(xué)習(xí)的主動性.教師還可結(jié)合多媒體課件,通過flash制作的算法動畫、圖像等手段對游戲算法進行分析,使得講解更加生動、直觀、更好理解.
采用游戲算法融合情景模擬的方式進行教學(xué),使得教師的“教”與學(xué)生的“學(xué)”都是一件愉快并令人期待的過程,許多學(xué)生對程序設(shè)計已不再感到乏味、枯燥、畏懼,而是覺得有趣、好玩;許多學(xué)生還想辦法改進游戲、創(chuàng)新游戲,為完成自己的游戲設(shè)計,課后主動學(xué)習(xí),主動查詢資料.雖然紹興職業(yè)技術(shù)學(xué)院是一所普通的高職院校,通過C語言程序設(shè)計的教學(xué)改革與實踐,已取得了一系列豐碩的成果.課程組教師所指導(dǎo)的學(xué)生在紹興市大學(xué)生程序設(shè)計技能競賽中,多次獲一、二、三等獎;在浙江省第七屆至第十屆大學(xué)生程序設(shè)計競賽中多次獲得金獎、銀獎與銅獎.
與傳統(tǒng)的教學(xué)方法相比,游戲案例情景模擬融合游戲算法分析的教學(xué)方式使得算法教學(xué)生動、具體、形象,讓學(xué)生在輕松愉快的游戲與游戲編碼中掌握了編碼的基本技能,培養(yǎng)與鍛煉了學(xué)生的邏輯思維能力和創(chuàng)新能力.
[1]何欽銘,顏暉.C語言程序設(shè)計[M].杭州:浙江科學(xué)技術(shù)出版社,2010.
[2]黃國政.游戲促進學(xué)習(xí)——“掃雷”程序提高C語言學(xué)習(xí)興趣[J].連云港師范高等專科學(xué)校學(xué)報,2002(2):53-56.
[3]余小燕.C語言程序設(shè)計教學(xué)方法探討[J].計算機教育,2009(10):136-138.
[4]程守梅,賀彥鳳,劉云波.論情境模擬教學(xué)法的理論依據(jù)[J].成人教育,2011(7):43-44.
[5]皮連生.教育心理學(xué)[M].上海:上海教育出版社,2005.
[6]孫玉霞.基于教育心理學(xué)C語言教學(xué)探討[J].湖北師范學(xué)院學(xué)報(自然科學(xué)版).2011(01):105-108.
2014-03-22
紹興市教育科學(xué)2013年規(guī)劃項目(編號:SGJ13042)
陳文青 (1978-),女 ,廣東潮陽人,講師,主要研究方向:計算機應(yīng)用技術(shù)、計算機教學(xué).
G642
A
1008-293X(2014)08-0087-06