摘 要:為了提高職工的知識和業(yè)務(wù)水平,各大企事業(yè)單位及工會系統(tǒng)經(jīng)常會開展形式多樣的競賽活動,而知識競答是最為常見的一種競賽形式??茖W(xué)設(shè)計競答內(nèi)容和競答形式是保證競賽公平公正開展的前提。經(jīng)過周密設(shè)計的競答系統(tǒng),可以有效地保證競答的公平、公開、公正和高效性,大大節(jié)省時間和人力成本。該文以沈陽市總工會民管部集體合同知識競賽競答系統(tǒng)為例,較為詳細地說明了競答系統(tǒng)的設(shè)計流程及相關(guān)技術(shù),針對不同題型給出了可行的競答設(shè)計方案。
關(guān)鍵詞:競答系統(tǒng) 隨機算法 AS 3.0 URLLoader XML
中圖分類號:TP31 文獻標(biāo)識碼:A 文章編號:1674-098X(2017)02(c)-0128-04
競答設(shè)計主要包括賽制設(shè)計、題型設(shè)計、題目題量設(shè)計、評分標(biāo)準(zhǔn)設(shè)計和競答流程設(shè)計等。而競答系統(tǒng)的設(shè)計則更為復(fù)雜,除了要考慮到以上幾點,還要考慮到題目抽取的隨機性,答案顯示的準(zhǔn)確性、時效性,系統(tǒng)的可操控性,主持人與競賽選手的互動性等要素。該文為提高可讀性,突破傳統(tǒng)的需求分析、概要設(shè)計、詳細設(shè)計、編碼、測試幾大模塊,以競答設(shè)計的步驟為主線,逐一剖析競答系統(tǒng)的設(shè)計流程。
1 賽制設(shè)計
設(shè)計分為預(yù)賽、復(fù)賽、決賽3個部分。
預(yù)賽3組,每組6隊,每隊3人,采用6進4制;復(fù)賽2組,每組6隊,每隊3人,采用6進3制;決賽1組,共6隊,每隊3人,最后按成績高低決出一等獎1隊,二等獎2隊,三等獎3隊。以上是根據(jù)實際參賽隊伍情況進行的設(shè)計。
根據(jù)以上賽制設(shè)計,競答系統(tǒng)界面預(yù)留預(yù)賽、復(fù)賽、決賽單選按鈕,以便按不同場次抽取試卷(如圖1所示)。
偵聽單選按鈕的鼠標(biāo)點擊事件并做出響應(yīng),設(shè)置場次變量(s)并設(shè)定隨機抽取試卷量的基數(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è)計
集體合同競賽主要是考查競賽選手個人和團隊對相關(guān)知識的識別、判定和分析理解能力,所以在題型設(shè)計上選用了個人必答題、小組共答題、搶答題、風(fēng)險題、加試題。解讀成標(biāo)準(zhǔn)的題型就是4種,即填空、判斷、簡答和案例分析。而無論是什么題型,因為競答現(xiàn)場要求的就是顯示題目,選手作答,然后顯示答案,所以,競答系統(tǒng)數(shù)據(jù)庫設(shè)計考慮兩個字段就可以了,一個是題目、一個是答案。
根據(jù)上述題型,設(shè)計競答系統(tǒng)外部加載XML文件結(jié)構(gòu)(以第1套必答題為例)如下:
…
3 題目題量設(shè)計
3.1 題目題量設(shè)計原則
(1)隨機抽取題目作答形式?jīng)Q定了每種題型的題目設(shè)計量要超過實際競答題目量,一般隨機抽取題目基數(shù)與實際抽取題目數(shù)比例越高越好,也可根據(jù)實際需要。
(2)不同場次抽取的試卷基數(shù)也要也要大于實際抽取試卷數(shù)。
(3)降低不同試卷的題目重復(fù)率,最好互不重復(fù)。
(4)在試卷基數(shù)范圍內(nèi)每次抽取的試卷號互不相同。
(5)題號批量抽取且互不相同。
3.2 隨機抽取題號的實現(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ù)組中隨機抽取一個元素(第k個) currArray[i] = nums[k] + 1; //把nums數(shù)組中抽出的元素值賦給currArray數(shù)組第i個元素; nums.splice(k, 1); } t1.text = currArray[0].toString();//顯示抽題號 … tn.text = currArray[n].toString();
}
function chooseNum(e:MouseEvent)
{
randomNum(a,b);//從a個數(shù)中隨機取不重復(fù)的b個數(shù)。
}
隨機抽取試卷號方法與上面雷同。
4 評分標(biāo)準(zhǔn)設(shè)計
4.1 界面設(shè)計
因為競答采用計分器作為計分輔助設(shè)備,所以在競答系統(tǒng)界面設(shè)計中要明確給出評分標(biāo)準(zhǔn),如圖2風(fēng)險題抽取題號界面所示。
4.2 不同分值題目切換實現(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)對象的引用指向到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 競答流程設(shè)計
在抽取試卷號界面中,首先選取競答場次,選擇預(yù)賽、復(fù)賽、決賽中的一個,接著抽取該場次的試卷號,進入選取題型界面。
在選取題型界面中,選擇競答題型進入相應(yīng)題型的答題界面。
在答題界面中,首先隨機為每組抽取題號,然后主持人向參賽選手宣讀題目,選手在指定時間內(nèi)作答,作答完畢顯示答案,正確加分,錯誤按比賽規(guī)則扣分或不扣分,并在計分器中更新分?jǐn)?shù)。
所有題目作答完畢后按賽制選出優(yōu)勝隊伍。
6 可備選的其他題型設(shè)計
按照加載題目素材的不同,競答系統(tǒng)還可支持圖片、聲音、視頻、動畫等類型的題目,以豐富競答題目的類型,使競答形式更加多樣、內(nèi)容更加全面。
具體實現(xiàn)方法如下。
6.1 圖片、動畫類題型
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)點擊某題號時,將名為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)用程序中的聲音,它包括一個stop()方法,而SoundTransform類可以控制聲音的播放音量和播放位置。
6.2.2 基本用法
(1)創(chuàng)建Sound類的實例。
snd=new Sound();
(2)把聲音加載到Sound實例。
snd.load(new URLRequest(currSong));
(3)創(chuàng)建SoundChannel和SoundTransform實例。
channel=new SoundChannel;
trans=new SoundTransform(currVol, currPan);
(4)播放音頻并控制播放的音量和起始位置。
channel=snd.play();
channel.soundTransform=trans;
(5)停止播放聲音。
channel.stop();
在具體設(shè)計中,以上基本用法一般結(jié)合對按鈕對象的事件偵聽和響應(yīng)函數(shù)來實現(xiàn)。
6.3 視頻類
(1)所需組件:FLVPlayback 組件。
(2)加載辦法:通過使用Flash直觀的“組件檢查器”設(shè)置常用屬性,一般項目文件所需的大部分視頻功能不用代碼就能夠?qū)崿F(xiàn)。但是如果是多道視頻題,則可使用外部XML文件存儲視頻加載路徑,再通過URLLoader類的load方法來加載。
7 結(jié)論
綜上所述,一個較為完備的競答系統(tǒng)設(shè)計應(yīng)注意以下幾點。
(1)了解和熟悉競答比賽的每一個環(huán)節(jié)。
(2)根據(jù)競答題類型采用有針對性的技術(shù)解決方案。
(3)兼顧界面友好性和易用性。
(4)進行后期調(diào)試。需要競賽組織者、競答系統(tǒng)設(shè)計者、主持人、系統(tǒng)操作員、虛擬選手同時到場進行至少兩次完整的流程測試并根據(jù)測試結(jié)果對系統(tǒng)進行再調(diào)試。
(5)給出其他可行性的競答設(shè)計解決方案。
參考文獻
[1] (美)Adobe公司.Adobe Flash CS4 ActionScript 3.0中文版經(jīng)典教程[M].人民郵電出版社,2009:65,158-159.
[2] 郭琳.Flash課件平臺組件技術(shù)研究[J].遼寧高職學(xué)報, 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è)計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.