鄭深
摘 要:為了讓兒童可以在游戲中有所收獲,我們要利用兒童愛(ài)玩游戲和對(duì)世界充滿(mǎn)好奇心的特點(diǎn),開(kāi)發(fā)適合于他們玩的教育游戲,做到寓教于樂(lè)。本文論述了制作一個(gè)基于Flash益智游戲“學(xué)字母,打氣球”的設(shè)計(jì)與開(kāi)發(fā)的詳細(xì)過(guò)程。通過(guò)這個(gè)打字游戲,可以讓學(xué)齡前兒童在玩游戲的同時(shí),熟悉鍵盤(pán)字母鍵的位置,并且學(xué)習(xí)英文字母“A—Z”的發(fā)音。此外這個(gè)游戲可以通過(guò)游戲時(shí)間和速度的改變,來(lái)訓(xùn)練兒童對(duì)英文字母的反應(yīng)速度和對(duì)鍵盤(pán)的熟悉程度。
關(guān)鍵詞:Flash;游戲;功能模塊
中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:In order for children can be harvested in the game,we want to take advantage of children playing games and the characteristics of the world is full of curiosity,develop appropriate for them to play educational games,so entertaining.This article discusses the production of a Flash-based puzzle game"learning letters,playing balloon",the detailed process design and development.Through this typing game that lets preschoolers play the game at the same time,the familiar position of letter keys, and learning the alphabet"A-Z"pronunciation.In addition,this game can change the game time and speed,to train children's reaction speed and familiarity with the english letters on the keyboard.
Keywords:flash;game;function module
1 引言(Introduction)
在網(wǎng)絡(luò)智能化的今天,游戲也開(kāi)始成為大眾包括學(xué)齡前兒童很重要的一種消遣方式,其中Flash游戲由于體積小,下載方便和容易玩尤為受歡迎。所以可以利用兒童喜愛(ài)游戲的天性把教育和游戲結(jié)合,開(kāi)發(fā)一個(gè)教育游戲,讓兒童在游戲中學(xué)習(xí),寓教于樂(lè),于是游戲和學(xué)習(xí)這兩個(gè)看似矛盾的事物結(jié)合就成了Flash游戲的又一個(gè)發(fā)展方向,其中打字游戲就是一款很好的教育游戲[1]。本文詳細(xì)論述了制作基于Flash益智游戲“學(xué)字母,打氣球”的設(shè)計(jì)與開(kāi)發(fā)的過(guò)程。通過(guò)這個(gè)打字游戲,可以讓學(xué)齡前兒童在玩游戲的同時(shí),熟悉鍵盤(pán)字母鍵的位置,并且學(xué)習(xí)英文字母“A-Z”的發(fā)音。
2 “學(xué)字母,打氣球”游戲的整體設(shè)計(jì)("Learning letters,playing balloon"game overall design)
對(duì)“學(xué)字母,打氣球”這個(gè)打字游戲的整體設(shè)計(jì)主要包括游戲框架、游戲介紹、游戲玩法和游戲技術(shù)分析的設(shè)計(jì)。游戲框架又可以分為四個(gè)設(shè)計(jì)模塊:游戲說(shuō)明模塊、游戲參數(shù)設(shè)置模塊、游戲進(jìn)行模塊和游戲結(jié)束模塊,每?jī)蓚€(gè)模塊之間以按鈕進(jìn)行連接,完成整個(gè)游戲流程的貫穿。
2.1 游戲說(shuō)明模塊
游戲說(shuō)明模塊是打開(kāi)運(yùn)行這個(gè)Flash游戲就會(huì)出現(xiàn)的模塊,由于多數(shù)學(xué)齡前兒童是初次接觸打字游戲,所以需要一個(gè)游戲的操作說(shuō)明來(lái)介紹游戲的名稱(chēng)和游戲的操作規(guī)則,這是每一個(gè)游戲都必不可少的一個(gè)模塊。模塊里面除了有游戲的操作說(shuō)明以外,還應(yīng)該有一個(gè)進(jìn)入下一個(gè)模塊的“開(kāi)始”按鈕。
2.2 游戲參數(shù)設(shè)置模塊
單擊游戲說(shuō)明模塊里的“開(kāi)始”按鈕后進(jìn)入游戲參數(shù)設(shè)置模塊,在這個(gè)模塊里,由三個(gè)組件來(lái)實(shí)現(xiàn)游戲的參數(shù)設(shè)置,玩家可以設(shè)置游戲的等級(jí)、游戲的時(shí)間和氣球數(shù)量。游戲等級(jí)分為三級(jí),不同的游戲等級(jí)會(huì)有不同的游戲速度,即氣球上飄的速度;游戲時(shí)間可以設(shè)置1—5分鐘,即限定玩家每次游戲的最長(zhǎng)時(shí)間,時(shí)間一到就會(huì)停止游戲,進(jìn)入到游戲結(jié)束模塊;氣球數(shù)量是指在同一時(shí)間內(nèi)舞臺(tái)上出現(xiàn)的最多氣球數(shù)量。
2.3 游戲進(jìn)行模塊
單擊游戲參數(shù)設(shè)置模塊里的“OK”按鈕后進(jìn)入游戲進(jìn)行模塊,開(kāi)始進(jìn)行游戲,氣球從舞臺(tái)下方隨機(jī)出現(xiàn),每個(gè)氣球上都帶有一個(gè)字母,氣球顏色和氣球上的字母都是隨機(jī)的??吹綒馇蛏系淖帜笗r(shí)敲擊鍵盤(pán)上相應(yīng)的字母,氣球就會(huì)破裂,同時(shí)發(fā)出相應(yīng)字母的讀音,然后氣球上的字母下落直到落出舞臺(tái)。在游戲舞臺(tái)上方有一個(gè)字?jǐn)?shù)統(tǒng)計(jì)、準(zhǔn)確率和剩余時(shí)間的顯示,以動(dòng)態(tài)文本框來(lái)實(shí)現(xiàn)。字?jǐn)?shù)統(tǒng)計(jì)的是玩家敲擊鍵盤(pán)的次數(shù),準(zhǔn)確率則以玩家擊中的次數(shù)和玩家敲擊鍵盤(pán)的次數(shù)的比率來(lái)計(jì)算,剩余時(shí)間是根據(jù)玩家的參數(shù)設(shè)定來(lái)倒數(shù),剩余時(shí)間為零時(shí)進(jìn)入游戲結(jié)束模塊。
2.4 游戲結(jié)束模塊
當(dāng)剩余時(shí)間結(jié)束后游戲進(jìn)入結(jié)束模塊,在這個(gè)模塊里會(huì)計(jì)算出玩家在這次游戲的打字速度,即一分鐘打了幾個(gè)字和打字的準(zhǔn)確率,以及一個(gè)“繼續(xù)”按鈕,單擊繼續(xù)按鈕會(huì)回到第二個(gè)模塊即游戲參數(shù)設(shè)置模塊再進(jìn)行游戲參數(shù)設(shè)置,如此循環(huán)。如果不想繼續(xù)游戲,直接關(guān)閉窗口即可。
游戲中音頻效果的選擇是很重要的,在這個(gè)打字游戲中,音頻主要是A—Z這26個(gè)英文字母的標(biāo)準(zhǔn)發(fā)音,每次打破游戲界面中的氣球時(shí)都會(huì)發(fā)出相應(yīng)氣球上帶有的英文字母的發(fā)音,從而對(duì)玩家起到耳濡目染的作用,讓學(xué)齡前兒童在游戲中受到英文字母發(fā)音潛移默化的影響,為學(xué)齡前兒童學(xué)習(xí)英文字母起到一定的輔助作用。
3 游戲主要元件素材的設(shè)計(jì)(The main componentsendprint
of the material design game)
聲音素材是通過(guò)錄音之后再經(jīng)音頻處理軟件Audition處理之后保存導(dǎo)入到庫(kù)面板的,本游戲中用到的聲音元件有26個(gè),即26個(gè)英文字母A—Z的發(fā)音,分別以相應(yīng)的英文字母命名,文件類(lèi)型為“.MP3”,聲音文件主要是用于玩家單擊字母鍵盤(pán)后調(diào)用相應(yīng)的聲音文件并播放。
創(chuàng)建5個(gè)影片剪輯元件,分別命名為“character”
“edge”“skin”“氣球”和“得分榜”。在“character”元件中創(chuàng)建逐幀動(dòng)畫(huà),共有26幀,按順序每一幀為一個(gè)大寫(xiě)英文字母,并在第一幀的動(dòng)作腳本中寫(xiě)上“stop();”。在“edge”元件中畫(huà)出一個(gè)心形氣球的輪廓,不用填充色彩。
在“skin”元件中的第一幀畫(huà)出一個(gè)沒(méi)有邊框的心形氣球,第二幀至第五幀繪制氣球爆炸開(kāi)的過(guò)程,并在第二幀輸入氣球爆炸時(shí)調(diào)用聲音文件的代碼:
stage.addEventListener(KeyboardEvent.KEY_DOWN,onPressKey);
function onPressKey(k:KeyboardEvent) {
var index=k.keyCode-65;
if (index==0) { var A:ASound = new ASound(); A.play(); }
else { if (index==1) { var B:BSound = new BSound(); B.play(); }
通過(guò)鍵控代碼確定按鍵的索引,判斷玩家的按鍵操作,并根據(jù)玩家操作調(diào)用相應(yīng)的聲音文件,如keycode-65=0即玩家按A鍵時(shí)則調(diào)用聲音文件A,這是通過(guò)onPressKey函數(shù)和if函數(shù)來(lái)實(shí)現(xiàn)的。
在“氣球”元件中,創(chuàng)建四個(gè)圖層分別命名為“文字”“氣球外框”和“氣球皮膚”和“action”,然后對(duì)應(yīng)在圖層第一幀把“character”“edge”“skin”元件拉入元件編輯區(qū),并分別設(shè)置三個(gè)對(duì)象的實(shí)例名稱(chēng)為edge、skin、txt_char,形成一個(gè)帶字母的氣球元件,然后在“action”圖層第一幀輸入代碼設(shè)置氣球的各種初始狀態(tài),包括氣球的速度、氣球的索引和重力加速度。在第二幀輸入代碼設(shè)置氣球飄出舞臺(tái)和打落的字母掉出舞臺(tái),第三幀代碼為“gotoAndPlay(2);”。在庫(kù)中選中氣球元件,右擊選中“為ActionScript導(dǎo)出”復(fù)選框,設(shè)置其鏈接名稱(chēng)為Balloon。并在“氣球”元件第一幀添加動(dòng)作腳本代碼:
var index:int;
var g:Number;
stop();
設(shè)置氣球的各個(gè)初始狀態(tài)包括氣球上升的速度、加速度,索引和氣球的顏色,以及設(shè)置氣球破裂后的字母掉落的速度。在“氣球”元件第二幀添加腳本代碼[2]:
this.y += speed; if (this.y<=-20) {
this.y = 420; init(); }
if (this.y>=440) { init(); }
判斷氣球是否飄出舞臺(tái)和打落的字母是否掉出舞臺(tái),并作出相應(yīng)的反應(yīng)。在“氣球”元件第三幀添加腳本代碼:gotoAndPlay(2);。
4 游戲功能模塊的設(shè)計(jì)和實(shí)現(xiàn)(Design and
implementation of functional modules game)
設(shè)置舞臺(tái)背景尺寸為“550*400”像素,在主場(chǎng)景的時(shí)間軸面板上創(chuàng)建三個(gè)圖層,分別命名為“背景”“按鈕”和“action”,把庫(kù)面板中的“背景”拉入背景圖層第一幀,并延續(xù)到第四幀。
4.1 游戲說(shuō)明模塊
在“按鈕”圖層第一幀用文本工具、矩形工具繪制游戲的說(shuō)明界面,即顯示游戲名稱(chēng)、游戲說(shuō)明,并把庫(kù)面板中的開(kāi)始按鈕拖動(dòng)到游戲說(shuō)明下方,命名“開(kāi)始”按鈕的實(shí)例名稱(chēng)為“bt_start”。
在主場(chǎng)景“action”圖層第一幀輸入代碼,設(shè)置游戲參數(shù)的默認(rèn)初始值并創(chuàng)建氣球數(shù)組:
var maxCount:int=5;
var timer:Timer;
以上代碼用以設(shè)置游戲默認(rèn)參數(shù),即默認(rèn)設(shè)置游戲等級(jí)為1級(jí),游戲時(shí)間為一分鐘,舞臺(tái)最多氣球數(shù)量為5個(gè),之后可再根據(jù)游戲者的意愿再進(jìn)行更改。
var balloonList:Array=new Array();
for (var i=0; i<26; i++) {
var balloon:Balloon=new Balloon();
balloon.init();
addChild(balloon);
}
stop();
以上代碼用來(lái)創(chuàng)建26個(gè)英文字母所對(duì)應(yīng)的氣球數(shù)組[3]。
bt_start.addEventListener(MouseEvent.CLICK,startGame);
function startGame(evt:MouseEvent) { gotoAndStop("setting");}
以上代碼是響應(yīng)玩家單擊“開(kāi)始”按鈕的操作,即跳轉(zhuǎn)到游戲參數(shù)設(shè)置模塊。
4.2 游戲參數(shù)設(shè)置模塊
在“按鈕”圖層第二幀顯示游戲設(shè)置界面,提供游戲參數(shù)設(shè)置,利用三個(gè)組合框組件來(lái)設(shè)置游戲速度等級(jí)、游戲時(shí)間和同時(shí)在舞臺(tái)上的氣球最大數(shù)量,在參數(shù)欄中設(shè)置數(shù)據(jù)項(xiàng)(DataProvider)。設(shè)置三個(gè)組合框的實(shí)例名稱(chēng)分別為cmb_speed、cmb_time、cmb_maxCount、設(shè)置OK按鈕實(shí)例名稱(chēng)為“bt_OK”。endprint
在主場(chǎng)景“action”圖層第二幀輸入以下代碼:
stop();
bt_OK.addEventListener(MouseEvent.CLICK,init);
function init(evt:MouseEvent) {
matchCount=0; loseCount=0;
speedLevel=int(cmb_speed.value);
time=int(cmb_time.value);
maxCount=int(cmb_maxCount.value);
timeLeft=time*60;
timer= new Timer(1000, timeLeft);
timer.start();
for (var i=0; i<26; i++) {
MovieClip(balloonList[i]).init(i); }
gotoAndStop("playing"); }
這一幀的代碼是設(shè)置根據(jù)玩家設(shè)置的游戲參數(shù),初始化游戲的各個(gè)變量并響應(yīng)玩家單擊“OK”按鈕的操作,進(jìn)入游戲。
4.3 游戲進(jìn)行模塊
“按鈕”圖層第三幀為游戲進(jìn)行界面,在背景上增加了游戲成績(jī)的動(dòng)態(tài)顯示,包括字?jǐn)?shù)、準(zhǔn)確率和剩余時(shí)間的顯示,動(dòng)態(tài)顯示內(nèi)容用動(dòng)態(tài)文本框來(lái)實(shí)現(xiàn),并分別給這三個(gè)動(dòng)態(tài)文本框設(shè)置一個(gè)實(shí)例名稱(chēng)。在主場(chǎng)景“action”圖層第三幀輸入代碼實(shí)現(xiàn)游戲的進(jìn)行。
function onPressKey(k:KeyboardEvent) {
//通過(guò)鍵控代碼確定按鍵的索引
var index=k.keyCode-65;
if (index<0 ||index>26) {
loseCount++;
} else {
if (balloonList[index].inStage==true)
{ //這個(gè)字母鍵正好在舞臺(tái)上
matchCount++;
balloonList[index].bomb();
} else {
//這個(gè)字母不在舞臺(tái)上
loseCount++;
} }
updateView(); }
通過(guò)鍵控代碼確定按鍵索引,偵聽(tīng)玩家敲擊鍵盤(pán)的事件,首先判斷玩家敲擊的是不是字母鍵,如果是再判斷玩家按的是哪個(gè)鍵,并依據(jù)按鍵和舞臺(tái)上的氣球情形等判斷應(yīng)當(dāng)?shù)梅只蚴Х?,這是通過(guò)onPressKey函數(shù)實(shí)現(xiàn)的。
function blast(evt:Event) {
if (Math.random()*100/speedLevel>5) {
return;} }
//隨機(jī)尋找一個(gè)不在舞臺(tái)上的氣球
do {
i=int(Math.random()*26);
} while (balloonList[i].idle==false);
trace("blast"+i);
//產(chǎn)生一個(gè)新的氣球
MovieClip(balloonList[i]).blast(speedLevel);
}
function loseBalloon() {
loseCount++;
if (timeLeft>0) {
updateView();
}
}
按一定的隨機(jī)時(shí)間發(fā)射新的氣球,并且用do……while……這個(gè)循環(huán)語(yǔ)句來(lái)控制隨機(jī)氣球的發(fā)射,它控制著上飄氣球的數(shù)量和發(fā)射速度,通過(guò)blast函數(shù)來(lái)實(shí)現(xiàn)。
4.4 游戲結(jié)束模塊
“按鈕”圖層第四幀是用來(lái)顯示最后的游戲成績(jī)。以動(dòng)態(tài)文本框來(lái)顯示打字速度和準(zhǔn)確率,分別給這兩個(gè)動(dòng)態(tài)文本框設(shè)置一個(gè)實(shí)例名稱(chēng),設(shè)置“繼續(xù)”按鈕的實(shí)例名稱(chēng)為“bt_continue”。
在主場(chǎng)景“action”圖層第四幀輸入代碼:
bt_continue.addEventListener(MouseEvent.CLICK,startGame);
txt_typeSpeed.text=String(Math.round((matchCount+loseCount)/time));
txt_finallyPercent.text=String(int(100*matchCount/(matchCount+loseCount)));
這一幀的代碼用來(lái)顯示最后的成績(jī),等待玩家單擊“繼續(xù)”按鈕的操作,并響應(yīng)玩家的操作。
完成這個(gè)游戲的制作以后,通過(guò)單擊菜單欄里的“文件”,選擇“發(fā)布設(shè)置”命令,選中“Flash(.swf)”、“Windows放映文件(.exe)”后單擊“發(fā)布”和“確定”按鈕,即在Flash源文件所在文件夾生成“.swf”和“.exe”的文件。
5 結(jié)論(Conclusion)
以上論述了制作一個(gè)基于Flash益智游戲“學(xué)字母,打氣球”的設(shè)計(jì)與開(kāi)發(fā)的詳細(xì)過(guò)程。通過(guò)這個(gè)打字游戲,可以讓學(xué)齡前兒童在玩游戲的同時(shí),熟悉鍵盤(pán)字母鍵的位置,并且學(xué)習(xí)英文字母“A—Z”的發(fā)音。此外這個(gè)游戲可以通過(guò)游戲時(shí)間和速度的改變,來(lái)訓(xùn)練兒童對(duì)英文字母的反應(yīng)速度和對(duì)鍵盤(pán)的熟悉程度。希望通過(guò)介紹這個(gè)游戲設(shè)計(jì)的過(guò)程,能夠起到拋磚引玉的作用,讓更多的人投入到有益于兒童的益智游戲的設(shè)計(jì)中來(lái)。
參考文獻(xiàn)(References)
[1] 錢(qián)瓊,郭力平.兒童認(rèn)知風(fēng)格與游戲的相關(guān)研究綜述[J].幼兒教育,2006,(5):26-28.
[2] 肖剛.Flash游戲編程教程[M].北京:清華大學(xué)出版社,2008:83-84;91-92.
[3] 王愉,等.交互程序設(shè)計(jì)書(shū)Flash ActionScript 3.0溢彩編程[M].北京:清華大學(xué)出版社,2010:63-64.
作者簡(jiǎn)介:
鄭 深(1979-),男,碩士,講師.研究領(lǐng)域:教育信息技術(shù)應(yīng)用.endprint