李飛+王亞杰+尹航+孫玉霞
摘要:針對(duì)計(jì)算思維“落地”的實(shí)際需要,結(jié)合計(jì)算機(jī)程序設(shè)計(jì)課程教學(xué)培養(yǎng)目標(biāo)的要求,提出基于幻影圍棋的案例式教學(xué)模式,并以C語言程序設(shè)計(jì)課程為例,闡述案例的設(shè)計(jì)方法。
關(guān)鍵詞:幻影圍棋;計(jì)算思維“落地”;C語言程序設(shè)計(jì)
0引言
隨著社會(huì)信息化的不斷發(fā)展,其他學(xué)科與計(jì)算機(jī)學(xué)科的融合越來越密切,對(duì)大學(xué)生計(jì)算機(jī)應(yīng)用能力的要求也越來越高,用計(jì)算機(jī)解決問題的能力逐漸成為衡量大學(xué)生素質(zhì)的標(biāo)準(zhǔn)之一。在我國,理工院校均開設(shè)計(jì)算機(jī)程序設(shè)計(jì)(C、VB、C#等)的必修課,它是繼大學(xué)計(jì)算機(jī)基礎(chǔ)之后的另一門計(jì)算機(jī)主干基礎(chǔ)課。通過本課程的學(xué)習(xí),使學(xué)生正確理解并基本掌握面向過程(或者面向?qū)ο螅┏绦蛟O(shè)計(jì)方法,培養(yǎng)學(xué)生的程序設(shè)計(jì)和上機(jī)調(diào)試能力以及用計(jì)算機(jī)處理實(shí)際問題的思維方式和能力,為后續(xù)專業(yè)課程實(shí)踐和今后的工作提供相關(guān)知識(shí)。
近年來,以計(jì)算思維為核心的計(jì)算機(jī)基礎(chǔ)課程教學(xué)改革在各個(gè)高校廣泛開展,首先要做的具體工作就是解決計(jì)算思維能力培養(yǎng)的“落地”問題,即要將計(jì)算思維能力培養(yǎng)落實(shí)到具體課程內(nèi)容與教學(xué)過程中去。啟發(fā)式教學(xué)和案例式教學(xué)就是計(jì)算思維“落地”的具體方法。
計(jì)算機(jī)博弈(Computer Game)也稱為機(jī)器博弈,是指根據(jù)各種棋類游戲規(guī)則,讓計(jì)算機(jī)模擬人的思維給出招法,與人或者另一臺(tái)計(jì)算機(jī)進(jìn)行對(duì)弈。計(jì)算機(jī)博弈項(xiàng)目既有趣味性,又有策略性和對(duì)抗性,深受廣大青年學(xué)者的喜愛,并成為人工智能領(lǐng)域一項(xiàng)重要的研究課題。筆者研究幻影圍棋項(xiàng)目多年,在文獻(xiàn)[4]的啟發(fā)下,將程序中的部分基礎(chǔ)內(nèi)容作為C語言程序設(shè)計(jì)的教學(xué)案例和實(shí)驗(yàn)內(nèi)容,制作C語言課程設(shè)計(jì)題目,讓學(xué)生在游戲中體會(huì)學(xué)習(xí)的樂趣,調(diào)動(dòng)了學(xué)生的學(xué)習(xí)興趣,取得了良好的學(xué)習(xí)效果。
1幻影圍棋概述
幻影圍棋(Phantom go)是一項(xiàng)歐洲的棋類游戲,因?yàn)橄缕逡?guī)則是基于圍棋,采用9×9的圍棋棋盤,但是又在圍棋基礎(chǔ)上加入了信息不完全的限制,即下棋雙方均無法獲得對(duì)方落子的位置,有中間裁判可以看到雙方落子位置,進(jìn)而給予雙方操作是否合法或者是否提子的指令來進(jìn)行比賽,故稱為幻影圍棋。它是國際計(jì)算機(jī)奧林匹克大賽的競賽項(xiàng)目,也是我國大學(xué)生計(jì)算機(jī)博弈大賽的競賽項(xiàng)目,是一種集戰(zhàn)略、戰(zhàn)術(shù)和機(jī)會(huì)為一體的棋類游戲項(xiàng)目。如圖1所示,左邊是黑方棋盤,中間是白方棋盤,右邊是裁判棋盤。裁判的棋盤相當(dāng)于一個(gè)9×9的圍棋棋盤,黑方棋盤中的白子是通過裁判的返回信息判斷出的部分棋子落子位置,信息是不完全的。這種不完全的信息,既增加了對(duì)弈的難度,同時(shí)也增加了趣味性和機(jī)會(huì)性。
2課堂教學(xué)實(shí)例設(shè)計(jì)
案例教學(xué)法是計(jì)算思維“落地”的最直接方法,一個(gè)好的案例在教學(xué)中會(huì)起到事半功倍的效果。筆者在指導(dǎo)幻影圍棋博弈項(xiàng)目的過程中,總結(jié)了一些適合C語言教學(xué)的例子,將C語言的知識(shí)與游戲程序有效融合,取得了較好的學(xué)習(xí)效果,部分實(shí)例見表1。
由于篇幅有限,下面只列出兩個(gè)實(shí)例的部分代碼。
實(shí)例1:幻影圍棋的界面設(shè)計(jì)
在C語言程序設(shè)計(jì)課程教學(xué)中,程序輸出運(yùn)行結(jié)果都是DOS命令行式的,表示一個(gè)圍棋棋盤在初學(xué)者眼里似乎是不可能的。該實(shí)例利用輸出各種線條組合來表示一個(gè)棋盤,使學(xué)生對(duì)C語言程序另眼相看。由于方便顯示,我們用表格表示棋盤,每一個(gè)單元格表示實(shí)際棋盤上的交叉點(diǎn)。部分代碼如下:
實(shí)例2:初始化棋盤數(shù)據(jù)結(jié)構(gòu)
在該實(shí)例中,利用了結(jié)構(gòu)體類型定義變量表示落子的位置,用二重循環(huán)結(jié)構(gòu)控制二維數(shù)組的賦值。
3上機(jī)實(shí)驗(yàn)題目設(shè)計(jì)
上機(jī)實(shí)驗(yàn)是C語言程序設(shè)計(jì)課程的重要教學(xué)環(huán)節(jié),學(xué)生通過上機(jī)練習(xí)才能更好地掌握和理解C語言各個(gè)知識(shí)點(diǎn),鍛煉并提高他們的程序設(shè)計(jì)和程序調(diào)試能力。設(shè)計(jì)實(shí)驗(yàn)內(nèi)容一定要有針對(duì)性和綜合性,而幻影圍棋程序綜合運(yùn)用C語言很多知識(shí)點(diǎn),不僅滿足上述要求,而且還增加了趣味性,使實(shí)驗(yàn)效果更好。
例如:實(shí)驗(yàn)1:統(tǒng)計(jì)棋盤上白子的數(shù)目和黑子的數(shù)目,部分代碼如下:
該實(shí)驗(yàn)中將循環(huán)結(jié)構(gòu)、選擇結(jié)構(gòu)、二維數(shù)組3個(gè)知識(shí)點(diǎn)有機(jī)地融合,又實(shí)現(xiàn)了計(jì)數(shù)功能,解決了棋類游戲最基本的統(tǒng)計(jì)功能。由于篇幅有限,下面僅列出實(shí)驗(yàn)題目。
實(shí)驗(yàn)2:實(shí)現(xiàn)提子(吃子)的過程,并更新棋盤;
實(shí)驗(yàn)3:隨機(jī)產(chǎn)生落子位置,并判斷是否該位置已有子。
4課程設(shè)計(jì)題目設(shè)計(jì)
課程設(shè)計(jì)是C語言程序設(shè)計(jì)的后續(xù)課程,目的是鞏固學(xué)生對(duì)C語言知識(shí)的綜合運(yùn)用能力,增強(qiáng)學(xué)生用計(jì)算機(jī)解決問題的能力,即計(jì)算思維能力。該課程總共一周的時(shí)間,要求學(xué)生完成一個(gè)綜合性的程序設(shè)計(jì)題目。筆者基于幻影圍棋設(shè)計(jì)了一個(gè)課設(shè)題目,該題目有若干個(gè)功能,由一組同學(xué)(1~4人)完成,其中一人負(fù)責(zé)分工、總體程序框架建立及其他功能整合,最后綜合成一個(gè)簡單的幻影圍棋競賽程序,能夠?qū)崿F(xiàn)人機(jī)對(duì)弈的過程。
課設(shè)題目:一個(gè)簡單的幻影圍棋系統(tǒng)
主要功能包括:①繪制棋盤:根據(jù)幻影圍棋規(guī)則繪制9×9的棋盤,并定義變量來保存棋局;②開局初始化:打印棋盤并將一些變量設(shè)為初始狀態(tài);③先手選擇:選擇自己為先手還是對(duì)方先手(現(xiàn)代圍棋下法黑子為先);④招法生成:即生成一個(gè)落子點(diǎn),可以是隨機(jī)方法(最簡單),也可以用定式方法(固定走法);⑤接收裁判信息并響應(yīng):每次落子之前,都要詢問裁判該位置是否合法,并且根據(jù)裁判返回信息做出落子、提子、猜子等策略選擇;⑥提子:根據(jù)裁判的提子信息,將部分己方的棋子或者對(duì)方的棋子提出,并更新棋盤。
以上各功能的設(shè)計(jì),不僅綜合了C語言很多知識(shí)點(diǎn),又集趣味性和創(chuàng)新性于一體,而且將完整的工程概念引入課程設(shè)計(jì)中,提高了學(xué)生C語言編程能力、創(chuàng)新實(shí)踐能力和團(tuán)隊(duì)協(xié)作能力。
5結(jié)語
很多學(xué)生感覺C語言程序設(shè)計(jì)這門課程內(nèi)容比較枯燥乏味,沒有學(xué)習(xí)興趣。筆者將幻影圍棋作為教學(xué)實(shí)例和上機(jī)實(shí)驗(yàn)內(nèi)容以及課程設(shè)計(jì)題目,由簡單到復(fù)雜,循序漸進(jìn),調(diào)動(dòng)了學(xué)生學(xué)習(xí)積極性的同時(shí)也增強(qiáng)了他們勇于探索和創(chuàng)新的能力。很多學(xué)生對(duì)博弈項(xiàng)目產(chǎn)生了濃厚的興趣,并且自愿加入幻影圍棋開發(fā)團(tuán)隊(duì)進(jìn)行深入研究,并以此為基礎(chǔ)申報(bào)大學(xué)生創(chuàng)新項(xiàng)目。筆者所帶領(lǐng)的幻影圍棋團(tuán)隊(duì)參加了2015年全國大學(xué)生計(jì)算機(jī)博弈大賽,取得了幻影圍棋項(xiàng)目冠軍的好成績。筆者總結(jié)的用幻影圍棋程序案例實(shí)踐計(jì)算思維的具體方法也適用其他博弈項(xiàng)目,希望該方法能對(duì)計(jì)算機(jī)程序設(shè)計(jì)課程教學(xué)提供一種參考和幫助。