田春婷
(蘭州石化職業技術學院信息處理與控制工程學院,甘肅 蘭州730060)
大數據時代,java語言[1]作為一門老牌通用編程語言,有著成熟的社區生態,依然是互聯網各個專業領域最熱門的編程語言之一。在行業領域內的人才占有率和使用率,以絕對優勢穩居世界第一。人工智能[2]、云計算[3]、大數據、物聯網、移動開發等數字化新技術較常用的編程語言也是java語言。
Java語言作為一門純面向對象編程語言,面向對象編程思想和算法是它的靈魂。教學難點是如何提高學生的算法分析能力和編程能力。將小游戲的設計與實現融入到java語言課程的任務驅動教學法應用案例中,在提高學生對編程的興趣方面尤為重要。
在java語言的整個教學過程中,主要采取任務驅動教學法[4]等多種教學方法,以更好樹立學生面向對象程序設計思想,提高學生的算法分析能力和使用面向對象思想解決實際問題的能力。
全面推行“任務驅動”教學法,通過精選案例、分解任務、講練有機融合,將java語言相關知識點融入案例。學生通過學習趣味游戲等案例[5],掌握java語言技術,并對面向對象編程有一個直觀和更加感性的認識,激發學生積極參與整個教學過程,更好建立起面向對象的編程思想。
在教學過程中,采用“感知與聯想→引入與模擬→實戰演習→總結提高”模式,實現任務分層次教學,以滿足不同水平學生的學習要求。
通過對單機版記憶游戲案例[6]進行任務分解,分層次逐步實現該游戲功能的設計要求,將java語言相關知識點有機融合到游戲實現的各個環節中,從而使學生在學習編程的同時享受設計游戲的樂趣,將學習和娛樂有效結合,激發學生的程序設計興趣。
本文討論的記憶游戲教學案例為單機版,總體設計要求及功能如下:①該游戲設計要求有一組網格按鈕,代表玩家可以翻轉的卡片。所有按鈕的初始顏色都是空白或灰色的,玩家不知道卡片背面所隱藏的顏色。每次翻兩個,一個一個,如果匹配,就能得分。②在窗體頂部和底部分別設計有標簽,用來指定輪到哪位玩家以及玩家得分和他們應該做什么。③游戲期間,一位玩家會先選擇一個按鈕,然后再選擇另一個。當玩家選擇按鈕的時候,按鈕會顯示它隱藏的背面顏色。如果玩家選擇的兩個按鈕顏色相同,游戲會告訴玩家,然后當他再次點擊任何一個按鈕(繼續)時,選擇顏色相同的兩個按鈕時,卡片匹配成功,按鈕顏色會變成黑色。玩家再次嘗試選擇兩個其他按鈕;如果玩家選擇的兩個按鈕顏色不同,卡片匹配不成功,則輪流到另一位玩家點擊按鈕玩游戲。④玩家不能選擇同一個按鈕兩次,也不能選擇一個黑色按鈕。當所有的按鈕都是黑色的時候,游戲會告訴玩家誰贏了(或者是平局),當按下確定按鈕,游戲就會重新開始。⑤在任何時候,游戲都通過使用兩個標簽告訴玩家發生了什么——一個標簽位于窗口頂部的玩家0,另一個標簽位于窗口底部的玩家1。活躍玩家消息有一個綠色的背景,另一位玩家消息有一個紅色的背景。
為了滿足不同能力水平學生的學習要求,在java語言教學過程中,為更好地實現游戲功能,采用由易到難的分層次教學設計模式,給出由簡單到難的不同要求階段案例。
根據單機版記憶游戲設計要求及功能要求,可以將記憶游戲案例教學目標分為以下兩個階段。
4.1.1 設計及java語言實現要求
創建一個最終類ColorLabel,向類中添加一個setDrawColor( )方法,這個方法帶有一個Color類型的參數,ColorLabel類中還要求有一個Color類型的成員變量drawColor,這個成員變量用來給標簽著色,改變drawColor的值則會改變標簽的顏色,setDrawColor( )方法的參數用來給變量drawColor傳值。
java語言代碼實現如下:

創建一個名為Main的類,添加主方法main( )。
向Main類中添加三個非靜態成員變量:①名為guiFrame的JFrame對象引用;②名為arrayLabels的64位一維數組,數組元素類型為ColorLabel的對象引用;③名為rand的Random的對象引用,Random類型來自java.util包,Y成員變量rand用來產生隨機數。
Java語言代碼實現如下:

Main類中添加返回類型為void且無參的非靜態成員方法createGUⅠ( )。
createGUⅠ( )方法體內容設計要求如下:①給guiFrame賦值為一個新創建的JFrame對象;②當程序運行結束時,設置窗體默認關閉;③設置窗體標題為“Label demo”;④創建64個ColorLabel對象,并且將其存儲在arrayLabels數組中,給每一位數組元素賦值為rand對象產生的隨機數值,這個隨機數代表一種顏色;⑤向面板添加64個ColorLabel對象,運用布局管理器,向窗體頂端和底部分別添加一個8×8的網格和命令按鈕。
Java語言代碼實現如下:①在主類Main中創建一個適當的方法notification( ),用來告訴命令按鈕,當它被單擊時,通知主類,該方法將被告知執行了命令按鈕的單擊操作(需要在主類中執行操作界面)。②在主類中實現notification( )方法。這樣,當按鈕被單擊時,每一個標簽顏色會被隨機改變。
Java語言代碼實現如下:測試程序代碼。實現當單擊命令按鈕時,8×8網格的標簽顏色會被隨機改變。
4.1.2 程序設計要求
程序設計要求如下:①創建期望的主類;②窗體、數組和隨機對象引用是成員變量,并在適當的位置創建;③需要創建creategui方法并且起到適當作用;④8×8網格標簽為數組元素;⑤標簽有隨機顏色;⑥主類處理按鈕通知事件(即操作處理程序是在主類中,而不是內部類或其他類);⑦單擊命令按鈕則改變每一個標簽顏色;⑧程序演示正確。
4.2.1 程序設計部分的要求
程序設計部分的要求如下:①確保在代碼中使用的常量(static final int)有要使用的不同顏色的數量、每種顏色的按鈕數量、網格的寬度和高度(在按鈕中)、每個按鈕的大小(以像素為單位);②確保在網格中的每個按鈕都是自己創建的JButton子類,按鈕大小與代碼中給定常量的值相匹配。當要求更改按鈕的尺寸時,程序仍可以正常運行;③確保當按鈕被單擊的操作能被監聽到;④每個按鈕應該知道自己的狀態,即應該繪制什么顏色、是否繪制完成、是否點擊過(即應該顯示其顏色)、是否沒有點擊過(即顯示灰色)或者已經被匹配(應該是黑色)等,即將這些信息保存在按鈕中,而不是保存在其他數據結構中。
4.2.2 程序實現部分的要求
程序實現部分的要求如下:①顯示具有指定行數和列數(常量)的正方形網格(指定的大小,常量)。②每個正方形最初應顯示為灰色,直到它已被點擊,但應顯示其被單擊之后真正的顏色。③使用正確數量的不同顏色,可用的顏色數量是在一個常量中指定的。每個正方形從可用的顏色中給定一個隨機(隱藏)的顏色。④每種顏色都應該創建若干給定個數的正方形(這個數字應該在代碼中定義為一個常量)。每一個方塊會分配若干個隨機的顏色(顏色的數量乘以每個顏色的方格)必須相等(行乘以列)的網格(即總方格數量)所以網格大小設置為適當的常量。⑤當前玩家只能夠點擊兩個正方形,顯示他們的顏色。只有灰色方塊可以點擊,玩家不能點擊一個完成的方塊(黑色),或點擊同一個方塊兩次。⑥如果選擇兩個相同的正方形,那么當前玩家獲得兩分(每個正方形一分),正方形變黑(不能再點擊),當前玩家繼續點擊方塊。⑦如果兩個不同顏色的方塊被選中,方塊再次變成灰色,當前玩家回合結束,另一個玩家開始新的回合(得分狀態標簽應該更新)。⑧如果所有的方塊都是黑色的,表示游戲結束,則應彈出一個消息框說明哪個玩家獲勝。⑨當單擊確定按鈕關閉消息框時,操作盤應被重置,所有方塊會被重新設置為新的隨機顏色,被顯示的最初顏色都是灰色。在按下確定按鈕之前,操作盤不應該被重置。應該改變現有按鈕的存儲顏色,而不是創建新的按鈕。⑩程序要求被演示的是一個完整的游戲,可以被重置開始新一局游戲(要求相同的大小但不同的按鈕顏色)等。
在Java語言教學過程中,把單機版記憶游戲的實現作為任務驅動教學案例,將學生玩游戲的興趣向開發游戲方面引導,在編寫小游戲的過程中,學生能夠更容易理解面向對象思想,游戲代碼也使學生能夠更容易理解和接受Java語言復雜的知識要點和算法;在寓教于樂的教學過程中,能夠更好提高學生思考問題和解決實際問題的能力,進而大大提高學生的算法分析能力與面向對象程序設計的編程能力,達到較好的教學效果。