摘 要:為了提高職工的知識(shí)和業(yè)務(wù)水平,各大企事業(yè)單位及工會(huì)系統(tǒng)經(jīng)常會(huì)開展形式多樣的競(jìng)賽活動(dòng),而知識(shí)競(jìng)答是最為常見的一種競(jìng)賽形式??茖W(xué)設(shè)計(jì)競(jìng)答內(nèi)容和競(jìng)答形式是保證競(jìng)賽公平公正開展的前提。經(jīng)過周密設(shè)計(jì)的競(jìng)答系統(tǒng),可以有效地保證競(jìng)答的公平、公開、公正和高效性,大大節(jié)省時(shí)間和人力成本。該文以沈陽市總工會(huì)民管部集體合同知識(shí)競(jìng)賽競(jìng)答系統(tǒng)為例,較為詳細(xì)地說明了競(jìng)答系統(tǒng)的設(shè)計(jì)流程及相關(guān)技術(shù),針對(duì)不同題型給出了可行的競(jìng)答設(shè)計(jì)方案。
關(guān)鍵詞:競(jìng)答系統(tǒng) 隨機(jī)算法 AS 3.0 URLLoader XML
中圖分類號(hào):TP31 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2017)02(c)-0128-04
競(jìng)答設(shè)計(jì)主要包括賽制設(shè)計(jì)、題型設(shè)計(jì)、題目題量設(shè)計(jì)、評(píng)分標(biāo)準(zhǔn)設(shè)計(jì)和競(jìng)答流程設(shè)計(jì)等。而競(jìng)答系統(tǒng)的設(shè)計(jì)則更為復(fù)雜,除了要考慮到以上幾點(diǎn),還要考慮到題目抽取的隨機(jī)性,答案顯示的準(zhǔn)確性、時(shí)效性,系統(tǒng)的可操控性,主持人與競(jìng)賽選手的互動(dòng)性等要素。該文為提高可讀性,突破傳統(tǒng)的需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試幾大模塊,以競(jìng)答設(shè)計(jì)的步驟為主線,逐一剖析競(jìng)答系統(tǒng)的設(shè)計(jì)流程。
1 賽制設(shè)計(jì)
設(shè)計(jì)分為預(yù)賽、復(fù)賽、決賽3個(gè)部分。
預(yù)賽3組,每組6隊(duì),每隊(duì)3人,采用6進(jìn)4制;復(fù)賽2組,每組6隊(duì),每隊(duì)3人,采用6進(jìn)3制;決賽1組,共6隊(duì),每隊(duì)3人,最后按成績高低決出一等獎(jiǎng)1隊(duì),二等獎(jiǎng)2隊(duì),三等獎(jiǎng)3隊(duì)。以上是根據(jù)實(shí)際參賽隊(duì)伍情況進(jìn)行的設(shè)計(jì)。
根據(jù)以上賽制設(shè)計(jì),競(jìng)答系統(tǒng)界面預(yù)留預(yù)賽、復(fù)賽、決賽單選按鈕,以便按不同場(chǎng)次抽取試卷(如圖1所示)。
偵聽單選按鈕的鼠標(biāo)點(diǎn)擊事件并做出響應(yīng),設(shè)置場(chǎng)次變量(s)并設(shè)定隨機(jī)抽取試卷量的基數(shù)(range)。主要功能腳本如下:
rgroup.addEventListener("click",changeFun);
function changeFun(e:MouseEvent)
{
var radg:RadioButtonGroup = e.target as RadioButtonGroup;
switch (radg.selection)
{
case r1 :
s = 1;
range = 6;
break;
case r2 :
s = 2;
range = 4;
break;
case r3 :
s = 3;
range =2;
break;
}
}
2 題型設(shè)計(jì)
集體合同競(jìng)賽主要是考查競(jìng)賽選手個(gè)人和團(tuán)隊(duì)對(duì)相關(guān)知識(shí)的識(shí)別、判定和分析理解能力,所以在題型設(shè)計(jì)上選用了個(gè)人必答題、小組共答題、搶答題、風(fēng)險(xiǎn)題、加試題。解讀成標(biāo)準(zhǔn)的題型就是4種,即填空、判斷、簡答和案例分析。而無論是什么題型,因?yàn)楦?jìng)答現(xiàn)場(chǎng)要求的就是顯示題目,選手作答,然后顯示答案,所以,競(jìng)答系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)考慮兩個(gè)字段就可以了,一個(gè)是題目、一個(gè)是答案。
根據(jù)上述題型,設(shè)計(jì)競(jìng)答系統(tǒng)外部加載XML文件結(jié)構(gòu)(以第1套必答題為例)如下:
…
3 題目題量設(shè)計(jì)
3.1 題目題量設(shè)計(jì)原則
(1)隨機(jī)抽取題目作答形式?jīng)Q定了每種題型的題目設(shè)計(jì)量要超過實(shí)際競(jìng)答題目量,一般隨機(jī)抽取題目基數(shù)與實(shí)際抽取題目數(shù)比例越高越好,也可根據(jù)實(shí)際需要。
(2)不同場(chǎng)次抽取的試卷基數(shù)也要也要大于實(shí)際抽取試卷數(shù)。
(3)降低不同試卷的題目重復(fù)率,最好互不重復(fù)。
(4)在試卷基數(shù)范圍內(nèi)每次抽取的試卷號(hào)互不相同。
(5)題號(hào)批量抽取且互不相同。
3.2 隨機(jī)抽取題號(hào)的實(shí)現(xiàn)方法
function randomNum(total:int,current:int)
{
var currArray:Array = [];
var nums = [];
for (var i=0; i { nums.push(i); } for (i=0; i { var k = Math.floor(Math.random() *nums.length); //從nums數(shù)組中隨機(jī)抽取一個(gè)元素(第k個(gè)) currArray[i] = nums[k] + 1; //把nums數(shù)組中抽出的元素值賦給currArray數(shù)組第i個(gè)元素; nums.splice(k, 1); } t1.text = currArray[0].toString();//顯示抽題號(hào) … tn.text = currArray[n].toString();
}
function chooseNum(e:MouseEvent)
{
randomNum(a,b);//從a個(gè)數(shù)中隨機(jī)取不重復(fù)的b個(gè)數(shù)。
}
隨機(jī)抽取試卷號(hào)方法與上面雷同。
4 評(píng)分標(biāo)準(zhǔn)設(shè)計(jì)
4.1 界面設(shè)計(jì)
因?yàn)楦?jìng)答采用計(jì)分器作為計(jì)分輔助設(shè)備,所以在競(jìng)答系統(tǒng)界面設(shè)計(jì)中要明確給出評(píng)分標(biāo)準(zhǔn),如圖2風(fēng)險(xiǎn)題抽取題號(hào)界面所示。
4.2 不同分值題目切換實(shí)現(xiàn)方法
var scoretype,score:int;
scoretype=0; //分值類型,默認(rèn)為0
score = 200; //默認(rèn)題目分值為200分
fxtr1.group = fxtrgroup;
fxtr2.group = fxtrgroup;
fxtrgroup.addEventListener("click",fxtchangeFun);
function fxtchangeFun(e:MouseEvent)
{
var radg:RadioButtonGroup = e.target as RadioButtonGroup;
//將目標(biāo)對(duì)象的引用指向到radg
switch (radg.selection)
{
case fxtr1 :
scoretype = 0;
score = 200;
fxtloadtxt = "fxt" + s + "-" + sjh + "-" + score + ".xml";
fxtsjh_txt.text = fxtloadtxt;
fxtxmlLoader.load(new URLRequest(fxtloadtxt));
fxtxmlLoader.addEventListener(Event.COMPLETE,fxtxmlLoaded);
fxtxmlLoader.addEventListener(IOErrorEvent.IO_ERROR,fxterrorHandler);
fxtnow.x = fxt_t1.x;
fxtnow.y = fxt_t1.y;
fxttm_txt.text="題目";
fxtkey_txt.visible=false;
break;
case fxtr2 :
scoretype = 1;
score = 300;
fxtloadtxt = "fxt" + s + "-" + sjh + "-" + score + ".xml";
fxtsjh_txt.text = fxtloadtxt;
fxtxmlLoader.load(new URLRequest(fxtloadtxt));
fxtxmlLoader.addEventListener(Event.COMPLETE,fxtxmlLoaded);
fxtxmlLoader.addEventListener(IOErrorEvent.IO_ERROR,fxterrorHandler);
fxtnow.x = fxt_t7.x;
fxtnow.y = fxt_t7.y;
fxttm_txt.text="題目";
fxtkey_txt.visible=false;
break;
}
}
5 競(jìng)答流程設(shè)計(jì)
在抽取試卷號(hào)界面中,首先選取競(jìng)答場(chǎng)次,選擇預(yù)賽、復(fù)賽、決賽中的一個(gè),接著抽取該場(chǎng)次的試卷號(hào),進(jìn)入選取題型界面。
在選取題型界面中,選擇競(jìng)答題型進(jìn)入相應(yīng)題型的答題界面。
在答題界面中,首先隨機(jī)為每組抽取題號(hào),然后主持人向參賽選手宣讀題目,選手在指定時(shí)間內(nèi)作答,作答完畢顯示答案,正確加分,錯(cuò)誤按比賽規(guī)則扣分或不扣分,并在計(jì)分器中更新分?jǐn)?shù)。
所有題目作答完畢后按賽制選出優(yōu)勝隊(duì)伍。
6 可備選的其他題型設(shè)計(jì)
按照加載題目素材的不同,競(jìng)答系統(tǒng)還可支持圖片、聲音、視頻、動(dòng)畫等類型的題目,以豐富競(jìng)答題目的類型,使競(jìng)答形式更加多樣、內(nèi)容更加全面。
具體實(shí)現(xiàn)方法如下。
6.1 圖片、動(dòng)畫類題型
6.1.1 所需組件
UILoader組件。
6.1.2 加載辦法
通過設(shè)置UILoader的source屬性,使用ActionScript可以加載任意SWF、JPG、PNG或GIF文件到UILoader組件中,基本語法如下:
UILoaderInstanceName.source=“Path file to be loaded goes here”;
例:將名為myEg.swf的文件加載到UILoader組件中。
loadWindow.source=“myEg.swf”;
例:當(dāng)點(diǎn)擊某題號(hào)時(shí),將名為myEg.swf的文件加載到UILoader組件中。
t1_btn.addEventListener(MouseEvent.CLICK,showt1);
function loadFile(e:Event):void{
loadWindow.source = h;
//h為中間變量,為從xml文件中讀取的當(dāng)前題目的UILoader的source
}
6.2 聲音類題型
6.2.1 相關(guān)類
包括Sound類、SoundChannel類、SoundTransform類。
SoundChannel類控制應(yīng)用程序中的聲音,它包括一個(gè)stop()方法,而SoundTransform類可以控制聲音的播放音量和播放位置。
6.2.2 基本用法
(1)創(chuàng)建Sound類的實(shí)例。
snd=new Sound();
(2)把聲音加載到Sound實(shí)例。
snd.load(new URLRequest(currSong));
(3)創(chuàng)建SoundChannel和SoundTransform實(shí)例。
channel=new SoundChannel;
trans=new SoundTransform(currVol, currPan);
(4)播放音頻并控制播放的音量和起始位置。
channel=snd.play();
channel.soundTransform=trans;
(5)停止播放聲音。
channel.stop();
在具體設(shè)計(jì)中,以上基本用法一般結(jié)合對(duì)按鈕對(duì)象的事件偵聽和響應(yīng)函數(shù)來實(shí)現(xiàn)。
6.3 視頻類
(1)所需組件:FLVPlayback 組件。
(2)加載辦法:通過使用Flash直觀的“組件檢查器”設(shè)置常用屬性,一般項(xiàng)目文件所需的大部分視頻功能不用代碼就能夠?qū)崿F(xiàn)。但是如果是多道視頻題,則可使用外部XML文件存儲(chǔ)視頻加載路徑,再通過URLLoader類的load方法來加載。
7 結(jié)論
綜上所述,一個(gè)較為完備的競(jìng)答系統(tǒng)設(shè)計(jì)應(yīng)注意以下幾點(diǎn)。
(1)了解和熟悉競(jìng)答比賽的每一個(gè)環(huán)節(jié)。
(2)根據(jù)競(jìng)答題類型采用有針對(duì)性的技術(shù)解決方案。
(3)兼顧界面友好性和易用性。
(4)進(jìn)行后期調(diào)試。需要競(jìng)賽組織者、競(jìng)答系統(tǒng)設(shè)計(jì)者、主持人、系統(tǒng)操作員、虛擬選手同時(shí)到場(chǎng)進(jìn)行至少兩次完整的流程測(cè)試并根據(jù)測(cè)試結(jié)果對(duì)系統(tǒng)進(jìn)行再調(diào)試。
(5)給出其他可行性的競(jìng)答設(shè)計(jì)解決方案。
參考文獻(xiàn)
[1] (美)Adobe公司.Adobe Flash CS4 ActionScript 3.0中文版經(jīng)典教程[M].人民郵電出版社,2009:65,158-159.
[2] 郭琳.Flash課件平臺(tái)組件技術(shù)研究[J].遼寧高職學(xué)報(bào), 2009,11(9):102-103.
[3] (美)Roger Braunstein.ActionScript 3.0寶典[M].2版.清華大學(xué)出版社,2012:134-136,173-176,193-194.
[4] 劉歡.Flash ActionScript 3.0交互設(shè)計(jì)200例[M].人民郵電出版社,2015:304-309.
[5] Adobe Systems Incorporated.Sound Channel-AS3.ActionScript3.0 Reference for the Adobe Flash Platform[Z].2016.
[6] Adobe Systems Incorporated.Sound Transform-AS3. ActionScript 3.0 Reference for the Adobe Flash Platform[Z].2016.