黃道燚,李星活
(汕尾職業(yè)技術(shù)學(xué)院,廣東 汕尾516600)
本文介紹了一款天降豆豆的小游戲機(jī),游戲操作簡(jiǎn)單,可單人游戲,也可雙人對(duì)戰(zhàn),可在掌上玩耍,它具備實(shí)質(zhì)感,具有燈光,可玩性強(qiáng),只需4節(jié)5號(hào)電池就可以使用。同時(shí),其成本低廉,只需20元左右即可自己組裝,如果批量生產(chǎn)可做兒童小玩具或其他較大產(chǎn)品的推銷贈(zèng)品。
游戲機(jī)由主機(jī)和兩個(gè)游戲操作鍵構(gòu)成。主機(jī)表面上設(shè)有游戲顯示屏幕,由8×8點(diǎn)陣組成單雙人模式,分別如圖 1(a)、圖 1(b)所示;每個(gè)游戲操作鍵上都設(shè)有游戲開(kāi)始按鍵、游戲方向按鍵等3個(gè)微動(dòng)按鈕開(kāi)關(guān)組成,其中一個(gè)是單人游戲操作鍵,另一個(gè)是雙人游戲操作鍵,兩個(gè)完全相同,如圖1(c)所示。
硬件電路由顯示子電路、按鍵子電路、單片機(jī)最小系統(tǒng)等幾個(gè)模塊組成。
1.2.1 顯示子電路設(shè)計(jì)
圖1 產(chǎn)品結(jié)構(gòu)圖
顯示子電路由 8×8點(diǎn)陣、8個(gè) 9012驅(qū)動(dòng)三極管及R1~R8(270 Ω)和 R9~R16(4.7 kΩ)限流電阻組成,它們受單片機(jī)的P0、P2口控制,點(diǎn)陣的顯示采用動(dòng)態(tài)逐點(diǎn)掃描[1],P2和P0口分別控制點(diǎn)陣的行與列。圖2為 8×8點(diǎn)陣顯示子電路,8×8點(diǎn)陣就是游戲機(jī)的顯示屏幕。
圖2 顯示子電路
1.2.2 控制器子電路與單片機(jī)最小系統(tǒng)電路
控制器子電路與單片機(jī)最小系統(tǒng)子電路如圖3所示,它由6個(gè)微動(dòng)開(kāi)關(guān)組成,并制作為兩個(gè)控制器,分別為玩家1控制器、玩家2控制器。其中每個(gè)控制器各含3個(gè)按鍵,分別為開(kāi)始、左移、右移按鍵,按鍵連接單片機(jī)P1口,檢測(cè)低電平時(shí)為按鍵按下。圖3中 S2、S3、S4為玩家1控制器按鍵,功能分別為左移、右移、開(kāi)始;S5、S6、S7為玩家 2控制器按鍵,功能相同。
圖3 按鍵與單片機(jī)最小系統(tǒng)子電路圖
單片機(jī)最小系統(tǒng)是本設(shè)計(jì)的主電路,它由單片機(jī)AT89S52及外圍元件 12 MHz晶振、電源開(kāi)關(guān) S1、電阻、電容組成,其中S2~S7按鍵為兩組游戲操作鍵,其主要功能:(1)控制點(diǎn)陣電路的顯示;(2)處理按鍵的接收信號(hào);
(3)完成心跳動(dòng)畫(huà)、游戲、結(jié)果顯示等。
本產(chǎn)品軟件主要設(shè)計(jì)總流程圖如圖4所示。
圖4 主要軟件設(shè)計(jì)總流程圖
系統(tǒng)啟動(dòng)之后開(kāi)始進(jìn)行初始化,包括:(1)定時(shí)器的初始化、開(kāi)啟中斷、定時(shí)器0工作方式設(shè)置、定時(shí)數(shù)初始值設(shè)置等;(2)游戲生命、速度初始化;(3)游戲接豆槽位置初始化、單雙人狀態(tài)位初始化等。
(1)點(diǎn)陣逐點(diǎn)掃描:本設(shè)計(jì)點(diǎn)陣采用逐點(diǎn)掃描的方式,靈活性強(qiáng),單片機(jī)P0、P2分別對(duì)點(diǎn)陣的行、列進(jìn)行控制,其中P0口接點(diǎn)陣的陰極端,P2通過(guò)驅(qū)動(dòng)三極管控制點(diǎn)陣的陽(yáng)極端。由于三極管的倒相性[2],當(dāng)P0口和P2口的某個(gè)位同時(shí)為同低電平時(shí),點(diǎn)亮點(diǎn)陣上對(duì)應(yīng)的發(fā)光二極管。在點(diǎn)陣上,圖像由點(diǎn)構(gòu)成,顯示屏由程序控制其發(fā)光二極管逐點(diǎn)點(diǎn)亮,由于掃描時(shí)間短,利用人眼的惰性[3],從而感覺(jué)圖像各點(diǎn)同時(shí)亮。
(2)心跳動(dòng)畫(huà):心跳動(dòng)畫(huà)模擬人體心臟的跳動(dòng),其由3幅圖像構(gòu)成,分別是大心形、中心形、小心形。動(dòng)畫(huà)過(guò)程為大心形-中心形-大心形-小心形,一幅圖像持續(xù)顯示時(shí)間為0.5 s左右,整個(gè)過(guò)程循環(huán)顯示,效果近似心臟跳動(dòng)。
(3)按鍵檢測(cè):設(shè)置在延時(shí)中,單片機(jī)如檢測(cè)到其按鍵則停止心跳動(dòng)畫(huà),進(jìn)入游戲。
游戲程序的流程圖如圖5所示。
圖5 游戲程序流程圖
(1)游戲參數(shù)初始化:包括游戲生命值、速度初始化,開(kāi)啟定時(shí)器。
(2)顯示程序:采用逐點(diǎn)掃描,顯示的內(nèi)容包括接豆槽、豆豆及生命點(diǎn)。在顯示過(guò)程中,為了顯示的方便和圖像移動(dòng)的靈活,采用了坐標(biāo)函數(shù)把點(diǎn)陣上各點(diǎn)轉(zhuǎn)化為平面坐標(biāo)。
(3)按鍵掃描和按鍵處理程序:對(duì)玩家1和玩家2的方向鍵進(jìn)行按鍵掃描,發(fā)現(xiàn)低電平為對(duì)應(yīng)按鍵按下。如按鍵按下則執(zhí)行相對(duì)應(yīng)的按鍵處理程序,包括左移函數(shù)和右移函數(shù)。左移函數(shù)對(duì)接豆槽各點(diǎn)的橫坐標(biāo)進(jìn)行減1,顯示效果接豆槽向左移動(dòng)一格;右移函數(shù)對(duì)接豆槽各點(diǎn)的橫坐標(biāo)進(jìn)行加1,顯示效果接豆槽向右移動(dòng)一格。
(4)掉豆程序流程圖如圖6所示。掉豆程序主要完成3項(xiàng)任務(wù):產(chǎn)生豆、豆下降、生命值控制。
圖6 掉豆程序流程圖
①產(chǎn)生豆:在判斷屏幕沒(méi)豆情況下,掉豆程序控制在屏幕的最上行隨機(jī)列數(shù)位置產(chǎn)生1豆。本設(shè)計(jì)采用rand()函數(shù)[4]取得隨機(jī)列數(shù)值。
②豆下降:如果屏幕上有豆,則控制豆的縱坐標(biāo)減1,屏幕上顯示效果為豆下降。豆下降的時(shí)刻受定時(shí)器累加次數(shù)閾值的控制,在游戲開(kāi)始時(shí)閾值較大,經(jīng)歷時(shí)間較長(zhǎng),豆的下降慢;隨著游戲時(shí)間的增加,閾值減少,經(jīng)歷的時(shí)間減短,豆的下降速度變快。所以隨著游戲時(shí)間的增長(zhǎng),豆下降的速度越來(lái)越快。
③生命值控制:在豆下降同時(shí)判斷豆是否掉到最低一行。如果掉到最低一行,則比較其坐標(biāo)與接豆槽的中心點(diǎn)坐標(biāo)是否相等,如相等則判定為接住豆,不相等則判定為沒(méi)接住。如沒(méi)接住豆則生命值減1,同時(shí)判斷生命值是否為0,為0則游戲結(jié)束,游戲結(jié)束狀態(tài)位置1,同時(shí)根據(jù)定時(shí)器中斷累加次數(shù)給出成績(jī),累加次數(shù)大說(shuō)明游戲時(shí)間長(zhǎng),成績(jī)好,次數(shù)小則相反。成績(jī)分為3個(gè)等次:優(yōu)秀、中等、差。優(yōu)秀則進(jìn)入大心形圖像顯示函數(shù),代表玩家游戲技術(shù)好,具備大心臟;中等進(jìn)入中心形圖像顯示函數(shù),代表玩家游戲技術(shù)普通,具備中等心臟;差則為小心臟。
(5)雙人模式:如果判定按下的開(kāi)始鍵是控制器2的開(kāi)始鍵,則進(jìn)入雙人模式。在雙人模式下,程序結(jié)構(gòu)與上面單人模式相似,區(qū)別在于:一方面在屏幕的上方增加第二個(gè)接豆槽,掉豆程序增加一個(gè)從底行上升的豆,增加第二個(gè)生命值和判斷程序;另一方面,成績(jī)圖像的修改不再按照游戲時(shí)間進(jìn)行判定,而是按照兩個(gè)生命值中哪個(gè)先減為零來(lái)進(jìn)行判斷。先減為零的玩家則會(huì)在其相對(duì)應(yīng)的半個(gè)屏幕顯示一個(gè) “小”,代表挑戰(zhàn)失敗,小心臟;另一玩家則顯示一個(gè)“大”,代表獲勝,大心臟。
(1)開(kāi)機(jī)之時(shí),游戲屏幕會(huì)顯示一個(gè)跳動(dòng)的小心臟,按下游戲控制器1上的開(kāi)始按鍵,即可進(jìn)行單人游戲。
(2)游戲時(shí),游戲控制器上有兩個(gè)方向控制鍵,分別是控制接豆槽向左移動(dòng)和向右移動(dòng)。屏幕上方會(huì)隨機(jī)產(chǎn)生一個(gè)豆豆并下降,豆豆的下降速度會(huì)隨游戲時(shí)間而變快,玩家需要控制接豆槽在豆豆下降到底部時(shí)接住豆豆,否則會(huì)扣掉1個(gè)生命值。初始生命值為3,扣完則游戲結(jié)束。
(3)接豆游戲結(jié)束時(shí),游戲機(jī)會(huì)根據(jù)玩家的成績(jī)給出結(jié)果:游戲成績(jī)優(yōu)異的玩家將會(huì)獲得一個(gè)大心臟心跳動(dòng)畫(huà)的獎(jiǎng)勵(lì),表示這個(gè)玩家擁有高超的技巧和大心臟;游戲成績(jī)中等的玩家會(huì)獲得一個(gè)中等心跳動(dòng)畫(huà)的心臟,表示該玩家處在普通的水平;游戲成績(jī)差則會(huì)獲得一顆小心跳動(dòng)畫(huà)的心臟。
(4)如果在開(kāi)機(jī)之后,按下游戲控制器2上的開(kāi)始按鍵,則可以進(jìn)行雙人對(duì)戰(zhàn)接豆游戲。只不過(guò)雙人游戲時(shí),兩個(gè)玩家需要面對(duì)面,游戲屏幕上下各有一個(gè)接豆槽,屏幕的上下方各隨機(jī)產(chǎn)生豆豆,玩家需要控制各自的接豆槽接住豆豆。當(dāng)任一方生命值扣完游戲結(jié)束,勝利的一方會(huì)獲得一個(gè)“大”,代表大心臟;失敗的一方獲得一個(gè)“小”,代表小心臟。
利用單片機(jī)制作的小游戲機(jī)與計(jì)算機(jī)制作的小游戲相比,具備有成本低廉、便攜性、實(shí)質(zhì)感等優(yōu)點(diǎn),適合作為兒童玩具。雖然單片機(jī)的應(yīng)用非常多,但是在制作電子游戲方面偏少,本設(shè)計(jì)的游戲操作簡(jiǎn)單,并且具備單雙人模式,趣味性強(qiáng),是一個(gè)很不錯(cuò)的兒童玩具電子產(chǎn)品,也適合作為電子愛(ài)好者練習(xí)焊接的套件。其軟件設(shè)計(jì)部分因篇幅關(guān)系在此省略。
[1]閻石.數(shù)字電子技術(shù)[M].北京:高等教育出版社,2006.
[2]胡宴如.模擬電子技術(shù)[M].北京:高等教育出版社,2008.
[3]李華.MCS-51系列單片機(jī)實(shí)用接口技術(shù)[M].北京:北京航天航空大學(xué)出版社,2007.
[4]楊黎.基于C語(yǔ)言的單片機(jī)應(yīng)用技術(shù)與Proteus仿真 [M].長(zhǎng)沙:中南大學(xué)出版社,2012.