鄧家榮 吳 焱
(1.文山學(xué)院,云南 文山 663000;2.昆明冶金高等??茖W(xué)校,云南 昆明 650033)
“Bingo”是一種填寫格子的卡片游戲,因游戲中第一個(gè)成功者以喊“Bingo”表示取勝而得名。在英美國(guó)家有一個(gè)說法是:“If you have never played Bingo before,then you are probably in am inority.”[1]。在廣泛使用互聯(lián)網(wǎng)和互聯(lián)網(wǎng)服務(wù)的今天,在網(wǎng)站上進(jìn)行Bingo游戲也是玩家的新選擇。
JavaScript是一種能給網(wǎng)頁創(chuàng)建動(dòng)態(tài)的用戶界面、控制瀏覽器、處理表單、設(shè)置cookie、即時(shí)構(gòu)建HTML頁面以及創(chuàng)建基于Web的應(yīng)用程序[2]。用JavaScript語言實(shí)現(xiàn)Bingo游戲可以更好地讓用戶體驗(yàn)到網(wǎng)站游戲的魅力。
首先,所有參加游戲的人購買一張或多張Bingo票。一張Bingo票是一張5格x5格的卡片,如圖1所示??ㄆ械?列分別對(duì)應(yīng)著“B”、“I”、“N”、“G”、“O”5個(gè)字母。每張卡片上隨機(jī)地分布著從1到75的24個(gè)號(hào)碼??ㄆ现虚g那個(gè)格為空白區(qū)域,稱作“Free Space”,可以代表“填充”或“不填充”,依參賽者的意愿而定[1]。
圖1 Bingo票示例
“B”列中的號(hào)碼取自從1到15的數(shù);“I”列中的號(hào)碼取自從16到30的數(shù);“N”列中的號(hào)碼取自從31到45的數(shù);“G”列中的號(hào)碼取自從46到60的數(shù);“O”列中的號(hào)碼取自從61到75的數(shù)。
游戲開始時(shí)由叫號(hào)員依次隨機(jī)地選取1到75的號(hào)碼,并念出來。如念出來的號(hào)碼出現(xiàn)在游戲玩家自己的Bingo卡片上,參賽者則將該號(hào)碼所在的格子涂黑(填充)。如果自己的某張卡片上涂黑的格子組成了規(guī)定的Bingo圖案中的任何一個(gè),則高喊“Bingo”!第一個(gè)正確地喊出“Bingo”的參賽者即為獲勝者。
不同的游戲比賽場(chǎng)所可以規(guī)定不同的Bingo圖案,如圖2所示為部分典型的Bingo圖案。
圖2 典型的Bingo圖案
用HTML的<table>、<tr>、<th>、<td>標(biāo)簽制作出Bingo卡片的框架,并為每個(gè)單元格設(shè)定id屬性,便于在程序中操縱單元格的內(nèi)容。
使用循環(huán)控制語句,將用隨機(jī)函數(shù)生成的從1到75的數(shù)字[3]依次填寫到卡片中。
為各列分配編號(hào),B列為0、I列為1、N列為2、G列為3、O列為4;
設(shè)定各列基數(shù)為列編號(hào)*15,則B列基數(shù)為0、I列基數(shù)為15、N列基數(shù)為30、G列基數(shù)為45、O列基數(shù)為60;
用隨機(jī)函數(shù)生成從1到15的數(shù)字,再加上單元格所在的列基數(shù),就得到符合規(guī)則的數(shù)字,即B列為1到15的數(shù),I列為16到30的數(shù),N列為31到45的數(shù),G列為46到60的數(shù),O列為61到75的數(shù)。
多次調(diào)用隨機(jī)函數(shù)可能會(huì)計(jì)算出相同的結(jié)果,而卡片中不能出現(xiàn)重復(fù)的數(shù)字。采用數(shù)組[3]記錄1到75個(gè)數(shù)字的使用狀態(tài),每計(jì)算出一個(gè)數(shù)字,就在數(shù)組中查詢其狀態(tài),如果已經(jīng)使用了,就再調(diào)用隨機(jī)函數(shù)重新計(jì)算一個(gè),如果還沒使用過,就將其填入卡片的單元格并在數(shù)組中記錄下新狀態(tài)。
當(dāng)瀏覽器加載HTML頁面時(shí),程序運(yùn)行生成卡片,同時(shí),還允許用戶點(diǎn)擊頁面上的鏈接來重新運(yùn)行程序。這樣就可以在瀏覽器中由用戶控制生成卡片,不會(huì)產(chǎn)生額外的服務(wù)器負(fù)載。
首先查明被用戶點(diǎn)擊的格子,將該單元格的背景色改為紅色,表示已經(jīng)選中該單元格;如果用戶點(diǎn)擊了紅色的單元格,則將單元格背景色恢復(fù)為白色,表示取消對(duì)該單元格的選擇。這里使用預(yù)設(shè)的CSS樣式文件來實(shí)現(xiàn)單元格樣式的應(yīng)用。
檢查用戶選中的單元格是否構(gòu)成獲勝的Bingo圖案,如果確認(rèn)獲勝,則頁面閃爍。
獲勝圖案中被選中的單元格用1標(biāo)識(shí),空白的單元格用0標(biāo)識(shí),將單元格從右下角向左上角依次記下其01序列,如圖2中獲勝圖案(a)的編碼是:00000000000000000011111,即十進(jìn)制數(shù)31。將用戶的圖案也用同樣的標(biāo)識(shí)代替,用戶圖案的編碼與獲勝圖案的編碼進(jìn)行按位與運(yùn)算[3],結(jié)果與獲勝圖案的編碼相同,則可判定用戶獲勝。
JavaScript是用于Web應(yīng)用程序開發(fā)的主要腳本語言。它與HTML、CSS結(jié)合起來,可以在一個(gè)網(wǎng)頁中鏈接多個(gè)對(duì)象,實(shí)現(xiàn)與網(wǎng)絡(luò)客戶的交互作用。
用JavaScript實(shí)現(xiàn)的Bingo游戲,界面友好,交互便捷,不占用服務(wù)器資源。
如果再增加登錄入口、叫號(hào)員叫號(hào)、獲勝信息上傳等模塊,就可以實(shí)現(xiàn)多用戶的實(shí)時(shí)Bingo游戲。
[1]撲克論壇 http://www.preferpoker7.com/forum/read.php? tid=25787
[2]Tom Negrino.JavaScript基礎(chǔ)教程作者[M].北京:人民郵電出版社,2009.
[3]趙增敏.JavaScript動(dòng)態(tài)網(wǎng)頁編程[M].北京:電子工業(yè)出版社,2010.