陳興國
(1.南京郵電大學計算機學院/軟件學院,南京 210023;2.南京大學計算機軟件新技術國家重點實驗室,南京 210046)
Rings游戲開發在《Java語言程序設計A》課程中的應用研究
陳興國1,2
(1.南京郵電大學計算機學院/軟件學院,南京 210023;2.南京大學計算機軟件新技術國家重點實驗室,南京 210046)
傳統的語言程序設計課程的教學方式都以教師按部就班的課堂講授和練習為主。對大一新生來說難以理解和消化,從而產生對語言類程序設計課程的抵觸情緒。通過在《Java語言程序設計A》課程中引入Rings游戲開發,不僅激發學生的學習興趣、貫穿課程的知識點、在一定程度上防止沉迷游戲,而且有效地鍛煉學生的思考和解決問題的能力。在游戲開發基礎上,通過智能算法競賽,引領學生走進人工智能科學前沿。
游戲開發;程序設計;人工智能
計算機程序設計語言類課程有兩個目標:(1)學生了解語言的基本語法,設計理念和基本的實現機制;(2)通過一定的編程示例,培養一定的編程能力。第一個目標可以在期末考試中體現,第二個目標則很難達到預期的期望。歷年來,學生們往往能通過考試,但真正遇到一個問題,希望通過編程解決時則舉步維艱,一部分學生干脆選擇放棄甚至有個別人抄襲。為了提高學生的學習興趣,培養學生的思維能力,將最潮流的游戲開發引入到語言類程序設計課程中,使該類課程的教與學都朝著有益的方向發展。

培養模式:以南京郵電大學電子學院和地理學院的學生為例,在大一第一學期學習《C語言程序設計》課程,學習程序設計語言的基本概念,對面向過程的程序設計有了一定的了解。作為理工科學生,第二學期學《Java語言程序設計A》,主要學習面向對象的編程思想[1]。然后在第三或第四學期通過一到兩周的《程序設計上機》實踐完成一個相對完整的Java應用程序。
《Java語言程序設計A》課程:該課程一直采用課堂講授和上機練習相結合的教學形式,分為理論課和上機課。理論課上,是以教師的講授為主,進行理論知識、編程理念、算法思想和程序代碼的講解與演示,上機課上,會安排相應的上機練習內容,通過講授和學生自主完成上機練習來達到學習和鞏固知識的目的。

這種傳統的教學方法存在以下幾個問題,首先,很難激發學生學習的主動性。學生的學習都是按部就班地按照教師的教學安排進行,由于課時所限,教師所強調的課前預習環節和課后復習環節往往很難實現;其次,很難培養學生的動手能力[2]。學生通過幾次簡單的上機練習只能了解基本的面向對象的概念,在下學年的《程序設計上機》課上就能發現學生們還得從頭學起,功底淺的學生要么做簡單的題目,要么在網上找現成的,讀別人的程序,做的是閱讀理解;再次,部分學生沉迷玩游戲不可自拔。游戲是當今校園學生生活不可或缺的部分,自制力不高的學生經常通宵玩游戲,不僅毀了自己的學業,而且影響了室友的學習生活,輔導員們想盡辦法也不能起到扭轉乾坤的作用。最后,課程與前沿脫節。授課的年輕教師往往有良好的科研創新能力,很多本科生也具備一定的數學基礎,有強烈的科研創新期望,語言類課程如何與當前科研熱點結合是個難題。因此,在《Java語言程序設計A》課程引入游戲開發,從游戲的設計機制出發,不避諱游戲而直面游戲,引導大一學生在玩游戲的過程中思考制作游戲和編寫智能程序自動玩游戲,并實現人工智能算法,讓程序自動的玩游戲、玩好游戲,這樣可以全力地調度學生的學習積極性,在一定程序上杜絕學生對玩游戲的沉迷,不但能培養學生的動手能力,還可以讓學生接觸前沿科技,為將來工作或進一步深造打下良好的基礎。

游戲由很多種分法,其設計與開發的難度也天差地別。為了適合《Java語言程序設計A》的講授,我們選擇的游戲遵循以下原則:(1)益智類游戲具備一定的受歡迎度,學生開發出來有一定的成就感;(2)游戲中只有一個玩家;(3)游戲具有有限的狀態和動作個數;(4)授課時該游戲在網上沒有公開的源碼;(5)迎合當前科技發展的熱點需求。
Rings是2016年9月份首次發布的一款益智類游戲,只有一個玩家和有限的狀態和動作,目前網上還沒有Java版的源碼。2016年至今,AlphaGo轟動全球,人工智能成為世人矚目的焦點,強化學習算法再次展示其優良的學習能力。因此把強化學習算法用于游戲智能算法中是很多同學的期望。

Rings的游戲世界是一塊由9個白點組成的3×3點陣。游戲的消除對象,是一個個大小不一的彩色圓圈。游戲共有兩種消除方式。只要在點陣中形成一條包含同一顏色的圓圈,這些同色圓圈就會消除掉,橫線、豎線、斜線均可,無論大小、數量。除此之外,若是在某一個點陣上形成三個同色圓圈完美嵌套的同色「實心圓」,實心圓也會立即消除。圓圈共有3種尺寸、8種顏色,彼此間可以互相嵌套。點陣下每次會隨機生成3個圓圈。不同顏色圓圈的放置位置以及放置的先后順序,都會對整個消除過程造成影響。

圖1給出了游戲模型,游戲玩家或者智能算法(記為Agent)通過觀察環境,得到環境的狀態st,并獲得可選動作集合A,權衡后從動作集合中選擇其中一個動作a反饋給環境,環境收到反饋后,對當前的狀態進行修改,并給Agent一個獎賞r和下一個狀態st+1。如此循環反復直至游戲結束[3]。

圖1 Rings游戲模型
根據該游戲模型,我們需要完成環境和Agent的功能。環境要實現以下方法:(1)游戲開始時給出初始狀態;(2)對于給定的游戲狀態,給出可選動作的集合;(3)當Agent選擇完動作后,實現狀態的遷移算法給出新的狀態,并給出獎賞評分。Agent要實現以下方法:(1)在給定的狀態和動作集合中選擇一個最優動作;(2)如果有學習算法的話,實現策略改進算法。
我們可以定義游戲模型的兩類接口:環境接口和Agent接口。從而,Rings環境要實現環境接口,Rings的算法玩家實現Agent接口。
我們還需要實現Rings的圖形交互界面,涉及到(1)顏色的定義;(2)組件、容器與布局;(3)事件監聽機制;(4)多線程;(5)Java的實用包,如Math.rand()函數等。
此外,為了編寫智能算法,學生需要學習(1)搜索算法;(2)啟發式函數:狀態值評價函數的定義;(3)參數優化學習算法:強化學習[3-5]。
具體實施方案布置如下:(1)在開學初,先布置在手機上下載Rings游戲并玩到500分的任務,學生的反應是:老師是很認真嚴肅地讓大家玩游戲,這簡直不可思議。玩這個游戲是玩,玩別的游戲也是玩,老師布置的游戲那自然是義不容辭。(2)隨著Java語言基礎的介紹完畢,講解和分析Rings游戲的結構、規則,總結Rings的各個功能,分析需求并布置代碼編寫任務,以面向過程的思想完成這些功能程序。此時,相較于往年的教學,我們發現已有若干學生下課后主動向老師請教,并感到好奇:這個游戲是怎么跑起來的?怎么才能完成這個游戲?(3)對Rings游戲做一個更全面的分析,告訴大家真正要完成時需要學習哪些知識,大家更有積極性的去自習和預習。(4)在講解面向對象編程理念時,將類與對象,抽象與繼承,多線程等結合Rings游戲進行闡述,學生們產生了一種醍醐灌頂的感覺。(5)在學生們完成游戲開發時,發布智能游戲算法競賽,激勵大家學習人工智能算法,如基于啟發的智能搜索算法、強化學習[4-5]等,學生們發現學無止境,需要不斷學習前進。(6)對于獲獎者予以除課程成績外的榮譽獎勵,讓大家獲得認可和成就感。
教學實踐表明,在程序設計語言類課程教學過程中采用新穎的、科學前沿的游戲項目教學法可以充分調動學生學習的積極性,激發學生的學習熱情,提高學生分析問題和解決問題的能力,使得學生對語言的掌握程度遠遠高于傳統的教學方式,并接觸到了計算機科學研究人工智能的前沿。此外還可以潛在的防止部分學生沉迷玩游戲。
[1]王紅."Java語言程序設計"課學生能力的培養[J].計算機教育,2007(15):31-33.
[2]沈維政,蘇中濱,趙潔.項目驅動教學法在Java語言程序設計教學中的應用[J].東北農業大學學報(社會科學版),2010,8(2):66-67.
[3]Sutton R S.Barto Reinforcement Learning:An Introduction[C].MITPress,1998:216-224.
[4]Chen X,Gao Y,Wang R.Online Selective Kernel-Based Temporal Difference Learning[J].IEEE Transactions on Neural Networks& Learning Systems,2013,24(12):1944-1956.
[5]Chen X,Wang H,Wang W,et al.Apply Ant Colony Optimization to Tetris[C].Genetic and Evolutionary Computation Conference, GECCO 2009,Proceedings,Montreal,Québec,Canada,July.DBLP,2009:1741-1742.
Research on the App lication of Rings Game Development in Java Language Programm ing A
CHEN Xing-guo1,2
(1.School of Computer Science and Technology,School of Software,Nanjing University of Posts and Telecommunications,Nanjing 210023;2.The State Key Laboratory for Novel Software Technology,Nanjing University,Nanjing 210093)
The traditional language programming courses are taught based on teaching and practice in a classroom.This is difficult to understand and digest for the freshmen,evenmakes them inim ical.By introducing the Rings game development in the Java Language Programming A course,it not only stimulates students'interest in learning,runs through the knowledge of the course,prevents them from becoming ad-dicted to the game p laying,and effectively improves students'ability to solve problems.On the basis of game development,the intelligent algorithm competition lead students into the forefront of artificial intelligence.
Game Development;Programming;Artificial Intelligence
1007-1423(2017)12-0015-03
10.3969/j.issn.1007-1423.2017.12.004
陳興國(1984-),男,江蘇南通人,講師,博士,研究方向為機器學習、強化學習、智能游戲
2017-03-06
2017-04-16
國家自然科學基金(No.61403208)、計算機軟件新技術國家重點實驗室開放課題(No.KFKT2016B04)、南京郵電大學引進人才科研啟動基金(No.NY214014)