新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)游戲設(shè)計(jì)之貪吃蛇用C語言也是有可能的

單片機(jī)游戲設(shè)計(jì)之貪吃蛇用C語言也是有可能的

作者: 時(shí)間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
單片機(jī)中,以往我看到前輩們學(xué)長(zhǎng)們做貪吃蛇的時(shí)候不是用匯編就是用FPGA語言編寫。那我就在想,C語言可是最簡(jiǎn)單的語言。怎么不用C語言寫呢。首先我們必須要知道。在設(shè)計(jì)單片機(jī)游戲時(shí)。我們要知道設(shè)計(jì)游戲的概念,對(duì)于大部分單片機(jī)+LCD的游戲設(shè)計(jì),基本采用前后臺(tái)方式,就是一個(gè)臺(tái)中斷,一個(gè)臺(tái)循環(huán) ,LCD部分基本是以固定點(diǎn)陣形式設(shè)計(jì),什么叫固定點(diǎn)陣??首先先明確,我們?cè)O(shè)計(jì)的游戲不是什 么魔獸爭(zhēng)霸或CS,而是黑白形式的固定點(diǎn)陣游戲,例如常見著名游戲貪吃蛇或俄羅斯方塊。他們的每個(gè)點(diǎn) 都是預(yù)先就固定下來的,而且是比較大的點(diǎn),這類專門的游戲機(jī)玻璃是經(jīng)過廠家開模出來 的,有固定的COM,SEG線,然后接到專門的單片機(jī)上,例如常用的6502指令集合的單片機(jī),常用的有stc和at系列的他們的資料你可以到www.51hei.com去查詢。對(duì)于業(yè)余設(shè)計(jì)的游戲,我們一般用如128*64的LCD來顯示,那么我們?cè)O(shè)計(jì)的時(shí)候首先應(yīng)該把 這個(gè)128*64的LCD分塊,也就是分出固定點(diǎn)陣出來。LCD的基本點(diǎn)陣是128*64,就是· ¥##¥總之就是好多個(gè)點(diǎn)啦,但我們事實(shí)上不一定要運(yùn)算這么多個(gè)點(diǎn),除非你做的游戲很 有看頭。例如你只用左邊64*64的地方來做貪吃蛇,那么你打算你的貪吃蛇的活動(dòng)空間是多 少呢?如果是8*8個(gè)點(diǎn)的話,算一下就是每個(gè)點(diǎn)64/8,64/8,也就是8*8個(gè)基本點(diǎn)陣,不過想好玩一點(diǎn),當(dāng)然就是要有16*16個(gè)點(diǎn)的活動(dòng)空間啦,那么每個(gè)固定點(diǎn)陣就要占4*4的基本 點(diǎn)陣了。要注意,這些4*4的東西在64*64LCD上共16*16個(gè),每個(gè)都要用來獨(dú)立運(yùn)算。

第二就是時(shí)鐘:這個(gè)其實(shí)是游戲的速度,對(duì)于一般的弱智類游戲機(jī),他也代表了難度,物體在每個(gè)時(shí)鐘到 達(dá)的時(shí)候就傳動(dòng)一次,例如俄羅斯方塊沒個(gè)時(shí)刻向下跑一層。賽車游戲每個(gè)時(shí)刻想前走一 步。一般這類時(shí)鐘的時(shí)間在0.X秒到1秒之間,物體有規(guī)律地勻速運(yùn)動(dòng),讓人看到感覺是連動(dòng)。

本文引用地址:http://m.butianyuan.cn/article/201611/323680.htm

第三運(yùn)動(dòng):在這里,我先介紹兩種比較普遍的弱智游戲機(jī)的物體運(yùn)動(dòng)規(guī)則:柔體傳動(dòng),剛體傳動(dòng)。 剛體傳動(dòng) 代表作是俄羅斯方塊,所謂剛體,就是硬硬的一個(gè)東東,運(yùn)動(dòng)的時(shí)候也不怎么旋轉(zhuǎn)(注 意,俄羅斯方塊是會(huì)旋轉(zhuǎn),但其實(shí)他是沒有經(jīng)過算法的旋轉(zhuǎn),純提取數(shù)組的方式,也就是 把一個(gè)放塊做成4個(gè)模式的點(diǎn)陣結(jié)構(gòu),其實(shí)就是4個(gè)方向,呵呵)對(duì)于剛體的傳動(dòng),在每個(gè) 時(shí)鐘到達(dá)的時(shí)候向一個(gè)方向(很可能是用戶輸入的)運(yùn)動(dòng)一個(gè)固定點(diǎn)陣。如果以坐標(biāo)來表 達(dá),就是物體的所有基本點(diǎn)陣同時(shí)向一個(gè)方向(X或Y)移動(dòng)一個(gè)單位。 柔體傳動(dòng)
代表作是貪吃蛇,貪吃蛇跑動(dòng)的時(shí)候并不是整條蛇向一個(gè)方向動(dòng)的(呵呵,蛇蛇身體僵硬 了),而是在每個(gè)時(shí)鐘的到來,物體由能量頭帶動(dòng)(如蛇頭),每個(gè)點(diǎn)的方向都向下一個(gè) 點(diǎn)傳播,然后自己向新的方向走動(dòng)一步,走動(dòng)后,下一個(gè)點(diǎn)由于得到了上一個(gè)點(diǎn)的方向并
同樣地運(yùn)動(dòng)一步,所以,他會(huì)馬上填補(bǔ)上一個(gè)點(diǎn)的地方,如此類推。 說的好象沒說,看不懂沒關(guān)系,因?yàn)閷?shí)際的算法可以簡(jiǎn)化(傻瓜才會(huì)一個(gè)個(gè)點(diǎn)來走的), 實(shí)際上在設(shè)計(jì)貪吃蛇的時(shí)候,只需要把蛇尾巴的那個(gè)點(diǎn)陣去掉,然后在蛇頭的新方向放一 個(gè)點(diǎn)陣就是了。期間需要記錄下每個(gè)蛇身的固定點(diǎn)陣的位置,并且在每個(gè)運(yùn)動(dòng)時(shí)刻過后刷 新一次每個(gè)點(diǎn)的位置。

第四顯示接口: 我們用的一般是點(diǎn)陣式LCD,就是一大片點(diǎn)點(diǎn),128*64,132*64,240*128等等等等啦,這 些又叫條屏,就是一寫就寫一條——8個(gè)點(diǎn)(有的也提供寫一個(gè)點(diǎn)的功能,但貴,至少我沒 有),那么如果你只想寫一個(gè)點(diǎn)怎么辦?那就得先把這個(gè)點(diǎn)所在的條讀出來,然后通過 與,或,的運(yùn)算后,再放回到LCD上,這時(shí)候就要涉及到一個(gè)讀LCD的問題了,有的LCD提供 讀的功能,你寫過什么在上面他記的很清楚,但有的便宜貨 就不行了,那么我們?cè)趺崔k?沒關(guān)系,你在內(nèi)存中提取出一片空間,虛擬一個(gè)LCD出來,每 次寫在真實(shí)LCD上面的時(shí)候,也同時(shí)寫到內(nèi)存的哪個(gè)虛擬LCD上,那么你要讀出LCD的值的時(shí) 候?qū)嶋H就是讀出虛擬LD上的數(shù)據(jù),然后與或后,再重新寫到LCD上,記得也要寫到虛擬LCD 上哦。你可以把這片緩沖叫做顯存,

第五。游戲流程:蛇向一個(gè)固定方向進(jìn)行柔體傳動(dòng),沒個(gè)運(yùn)動(dòng)時(shí)鐘到達(dá)要做:1。判斷食物標(biāo)志,沒有食物了 就放一個(gè),放的時(shí)候判斷,不能和蛇身重疊 2。得到用戶按鍵值,蛇走一步,并判斷是否 撞死了,沒撞死,再判斷是否吃到東西了,沒有吃到,就等下一個(gè)運(yùn)動(dòng)時(shí)鐘,吃了?就增 長(zhǎng)一點(diǎn)。置一個(gè)沒有食物的標(biāo)志。然后等待下一個(gè)時(shí)刻的來臨。 呵呵,其實(shí)程序就是這么簡(jiǎn)單,基本設(shè)計(jì)只有LCD部分和按鍵部分是和單片機(jī)有關(guān)的,其他 都是程序思維和算法。對(duì)于菜鳥來說,難度在于思維,而不是單片機(jī)。本程序源代碼可從http://www.51hei.com/bbs/dpj-18901-1.html處下載。

仿真效果如下:




評(píng)論


技術(shù)專區(qū)

關(guān)閉