田春婷
(蘭州石化職業(yè)技術(shù)學(xué)院信息處理與控制工程學(xué)院,甘肅 蘭州730060)
大數(shù)據(jù)時代,java語言[1]作為一門老牌通用編程語言,有著成熟的社區(qū)生態(tài),依然是互聯(lián)網(wǎng)各個專業(yè)領(lǐng)域最熱門的編程語言之一。在行業(yè)領(lǐng)域內(nèi)的人才占有率和使用率,以絕對優(yōu)勢穩(wěn)居世界第一。人工智能[2]、云計算[3]、大數(shù)據(jù)、物聯(lián)網(wǎng)、移動開發(fā)等數(shù)字化新技術(shù)較常用的編程語言也是java語言。
Java語言作為一門純面向?qū)ο缶幊陶Z言,面向?qū)ο缶幊趟枷牒退惴ㄊ撬撵`魂。教學(xué)難點(diǎn)是如何提高學(xué)生的算法分析能力和編程能力。將小游戲的設(shè)計與實(shí)現(xiàn)融入到j(luò)ava語言課程的任務(wù)驅(qū)動教學(xué)法應(yīng)用案例中,在提高學(xué)生對編程的興趣方面尤為重要。
在java語言的整個教學(xué)過程中,主要采取任務(wù)驅(qū)動教學(xué)法[4]等多種教學(xué)方法,以更好樹立學(xué)生面向?qū)ο蟪绦蛟O(shè)計思想,提高學(xué)生的算法分析能力和使用面向?qū)ο笏枷虢鉀Q實(shí)際問題的能力。
全面推行“任務(wù)驅(qū)動”教學(xué)法,通過精選案例、分解任務(wù)、講練有機(jī)融合,將java語言相關(guān)知識點(diǎn)融入案例。學(xué)生通過學(xué)習(xí)趣味游戲等案例[5],掌握java語言技術(shù),并對面向?qū)ο缶幊逃幸粋€直觀和更加感性的認(rèn)識,激發(fā)學(xué)生積極參與整個教學(xué)過程,更好建立起面向?qū)ο蟮木幊趟枷搿?/p>
在教學(xué)過程中,采用“感知與聯(lián)想→引入與模擬→實(shí)戰(zhàn)演習(xí)→總結(jié)提高”模式,實(shí)現(xiàn)任務(wù)分層次教學(xué),以滿足不同水平學(xué)生的學(xué)習(xí)要求。
通過對單機(jī)版記憶游戲案例[6]進(jìn)行任務(wù)分解,分層次逐步實(shí)現(xiàn)該游戲功能的設(shè)計要求,將java語言相關(guān)知識點(diǎn)有機(jī)融合到游戲?qū)崿F(xiàn)的各個環(huán)節(jié)中,從而使學(xué)生在學(xué)習(xí)編程的同時享受設(shè)計游戲的樂趣,將學(xué)習(xí)和娛樂有效結(jié)合,激發(fā)學(xué)生的程序設(shè)計興趣。
本文討論的記憶游戲教學(xué)案例為單機(jī)版,總體設(shè)計要求及功能如下:①該游戲設(shè)計要求有一組網(wǎng)格按鈕,代表玩家可以翻轉(zhuǎn)的卡片。所有按鈕的初始顏色都是空白或灰色的,玩家不知道卡片背面所隱藏的顏色。每次翻兩個,一個一個,如果匹配,就能得分。②在窗體頂部和底部分別設(shè)計有標(biāo)簽,用來指定輪到哪位玩家以及玩家得分和他們應(yīng)該做什么。③游戲期間,一位玩家會先選擇一個按鈕,然后再選擇另一個。當(dāng)玩家選擇按鈕的時候,按鈕會顯示它隱藏的背面顏色。如果玩家選擇的兩個按鈕顏色相同,游戲會告訴玩家,然后當(dāng)他再次點(diǎn)擊任何一個按鈕(繼續(xù))時,選擇顏色相同的兩個按鈕時,卡片匹配成功,按鈕顏色會變成黑色。玩家再次嘗試選擇兩個其他按鈕;如果玩家選擇的兩個按鈕顏色不同,卡片匹配不成功,則輪流到另一位玩家點(diǎn)擊按鈕玩游戲。④玩家不能選擇同一個按鈕兩次,也不能選擇一個黑色按鈕。當(dāng)所有的按鈕都是黑色的時候,游戲會告訴玩家誰贏了(或者是平局),當(dāng)按下確定按鈕,游戲就會重新開始。⑤在任何時候,游戲都通過使用兩個標(biāo)簽告訴玩家發(fā)生了什么——一個標(biāo)簽位于窗口頂部的玩家0,另一個標(biāo)簽位于窗口底部的玩家1?;钴S玩家消息有一個綠色的背景,另一位玩家消息有一個紅色的背景。
為了滿足不同能力水平學(xué)生的學(xué)習(xí)要求,在java語言教學(xué)過程中,為更好地實(shí)現(xiàn)游戲功能,采用由易到難的分層次教學(xué)設(shè)計模式,給出由簡單到難的不同要求階段案例。
根據(jù)單機(jī)版記憶游戲設(shè)計要求及功能要求,可以將記憶游戲案例教學(xué)目標(biāo)分為以下兩個階段。
4.1.1 設(shè)計及java語言實(shí)現(xiàn)要求
創(chuàng)建一個最終類ColorLabel,向類中添加一個setDrawColor( )方法,這個方法帶有一個Color類型的參數(shù),ColorLabel類中還要求有一個Color類型的成員變量drawColor,這個成員變量用來給標(biāo)簽著色,改變drawColor的值則會改變標(biāo)簽的顏色,setDrawColor( )方法的參數(shù)用來給變量drawColor傳值。
java語言代碼實(shí)現(xiàn)如下:
創(chuàng)建一個名為Main的類,添加主方法main( )。
向Main類中添加三個非靜態(tài)成員變量:①名為guiFrame的JFrame對象引用;②名為arrayLabels的64位一維數(shù)組,數(shù)組元素類型為ColorLabel的對象引用;③名為rand的Random的對象引用,Random類型來自java.util包,Y成員變量rand用來產(chǎn)生隨機(jī)數(shù)。
Java語言代碼實(shí)現(xiàn)如下:
Main類中添加返回類型為void且無參的非靜態(tài)成員方法createGUⅠ( )。
createGUⅠ( )方法體內(nèi)容設(shè)計要求如下:①給guiFrame賦值為一個新創(chuàng)建的JFrame對象;②當(dāng)程序運(yùn)行結(jié)束時,設(shè)置窗體默認(rèn)關(guān)閉;③設(shè)置窗體標(biāo)題為“Label demo”;④創(chuàng)建64個ColorLabel對象,并且將其存儲在arrayLabels數(shù)組中,給每一位數(shù)組元素賦值為rand對象產(chǎn)生的隨機(jī)數(shù)值,這個隨機(jī)數(shù)代表一種顏色;⑤向面板添加64個ColorLabel對象,運(yùn)用布局管理器,向窗體頂端和底部分別添加一個8×8的網(wǎng)格和命令按鈕。
Java語言代碼實(shí)現(xiàn)如下:①在主類Main中創(chuàng)建一個適當(dāng)?shù)姆椒╪otification( ),用來告訴命令按鈕,當(dāng)它被單擊時,通知主類,該方法將被告知執(zhí)行了命令按鈕的單擊操作(需要在主類中執(zhí)行操作界面)。②在主類中實(shí)現(xiàn)notification( )方法。這樣,當(dāng)按鈕被單擊時,每一個標(biāo)簽顏色會被隨機(jī)改變。
Java語言代碼實(shí)現(xiàn)如下:測試程序代碼。實(shí)現(xiàn)當(dāng)單擊命令按鈕時,8×8網(wǎng)格的標(biāo)簽顏色會被隨機(jī)改變。
4.1.2 程序設(shè)計要求
程序設(shè)計要求如下:①創(chuàng)建期望的主類;②窗體、數(shù)組和隨機(jī)對象引用是成員變量,并在適當(dāng)?shù)奈恢脛?chuàng)建;③需要創(chuàng)建creategui方法并且起到適當(dāng)作用;④8×8網(wǎng)格標(biāo)簽為數(shù)組元素;⑤標(biāo)簽有隨機(jī)顏色;⑥主類處理按鈕通知事件(即操作處理程序是在主類中,而不是內(nèi)部類或其他類);⑦單擊命令按鈕則改變每一個標(biāo)簽顏色;⑧程序演示正確。
4.2.1 程序設(shè)計部分的要求
程序設(shè)計部分的要求如下:①確保在代碼中使用的常量(static final int)有要使用的不同顏色的數(shù)量、每種顏色的按鈕數(shù)量、網(wǎng)格的寬度和高度(在按鈕中)、每個按鈕的大小(以像素為單位);②確保在網(wǎng)格中的每個按鈕都是自己創(chuàng)建的JButton子類,按鈕大小與代碼中給定常量的值相匹配。當(dāng)要求更改按鈕的尺寸時,程序仍可以正常運(yùn)行;③確保當(dāng)按鈕被單擊的操作能被監(jiān)聽到;④每個按鈕應(yīng)該知道自己的狀態(tài),即應(yīng)該繪制什么顏色、是否繪制完成、是否點(diǎn)擊過(即應(yīng)該顯示其顏色)、是否沒有點(diǎn)擊過(即顯示灰色)或者已經(jīng)被匹配(應(yīng)該是黑色)等,即將這些信息保存在按鈕中,而不是保存在其他數(shù)據(jù)結(jié)構(gòu)中。
4.2.2 程序?qū)崿F(xiàn)部分的要求
程序?qū)崿F(xiàn)部分的要求如下:①顯示具有指定行數(shù)和列數(shù)(常量)的正方形網(wǎng)格(指定的大小,常量)。②每個正方形最初應(yīng)顯示為灰色,直到它已被點(diǎn)擊,但應(yīng)顯示其被單擊之后真正的顏色。③使用正確數(shù)量的不同顏色,可用的顏色數(shù)量是在一個常量中指定的。每個正方形從可用的顏色中給定一個隨機(jī)(隱藏)的顏色。④每種顏色都應(yīng)該創(chuàng)建若干給定個數(shù)的正方形(這個數(shù)字應(yīng)該在代碼中定義為一個常量)。每一個方塊會分配若干個隨機(jī)的顏色(顏色的數(shù)量乘以每個顏色的方格)必須相等(行乘以列)的網(wǎng)格(即總方格數(shù)量)所以網(wǎng)格大小設(shè)置為適當(dāng)?shù)某A?。⑤?dāng)前玩家只能夠點(diǎn)擊兩個正方形,顯示他們的顏色。只有灰色方塊可以點(diǎn)擊,玩家不能點(diǎn)擊一個完成的方塊(黑色),或點(diǎn)擊同一個方塊兩次。⑥如果選擇兩個相同的正方形,那么當(dāng)前玩家獲得兩分(每個正方形一分),正方形變黑(不能再點(diǎn)擊),當(dāng)前玩家繼續(xù)點(diǎn)擊方塊。⑦如果兩個不同顏色的方塊被選中,方塊再次變成灰色,當(dāng)前玩家回合結(jié)束,另一個玩家開始新的回合(得分狀態(tài)標(biāo)簽應(yīng)該更新)。⑧如果所有的方塊都是黑色的,表示游戲結(jié)束,則應(yīng)彈出一個消息框說明哪個玩家獲勝。⑨當(dāng)單擊確定按鈕關(guān)閉消息框時,操作盤應(yīng)被重置,所有方塊會被重新設(shè)置為新的隨機(jī)顏色,被顯示的最初顏色都是灰色。在按下確定按鈕之前,操作盤不應(yīng)該被重置。應(yīng)該改變現(xiàn)有按鈕的存儲顏色,而不是創(chuàng)建新的按鈕。⑩程序要求被演示的是一個完整的游戲,可以被重置開始新一局游戲(要求相同的大小但不同的按鈕顏色)等。
在Java語言教學(xué)過程中,把單機(jī)版記憶游戲的實(shí)現(xiàn)作為任務(wù)驅(qū)動教學(xué)案例,將學(xué)生玩游戲的興趣向開發(fā)游戲方面引導(dǎo),在編寫小游戲的過程中,學(xué)生能夠更容易理解面向?qū)ο笏枷?,游戲代碼也使學(xué)生能夠更容易理解和接受Java語言復(fù)雜的知識要點(diǎn)和算法;在寓教于樂的教學(xué)過程中,能夠更好提高學(xué)生思考問題和解決實(shí)際問題的能力,進(jìn)而大大提高學(xué)生的算法分析能力與面向?qū)ο蟪绦蛟O(shè)計的編程能力,達(dá)到較好的教學(xué)效果。