版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1/ 22貪吃蛇游戲本實(shí)驗(yàn)以設(shè)計(jì)貪吃蛇游戲?yàn)檎n題。最終結(jié)果是以 8*8 點(diǎn)陣作為本游戲的顯示界面,通過按鍵 BTN1BTN2BTN3BTN4 分別控制蛇點(diǎn)表示老鼠,當(dāng)蛇頭吃到老鼠時(shí),老鼠則在點(diǎn)陣上改變位置,也就是時(shí),就自動(dòng)加一分,并在數(shù)碼管顯示。每隔五分鐘,在蛇沒有吃到老味性和難度性。8*8 點(diǎn)陣,貪吃蛇,數(shù)碼管,EPM7128SLC815數(shù)電實(shí)驗(yàn)開發(fā)板88 4 個(gè)排成一蛇游戲,蛇撞“墻”、邊或者游戲時(shí)間到,則游戲結(jié)束。1. 老鼠出現(xiàn)的地方是隨機(jī)的,在某個(gè)地點(diǎn)出現(xiàn)的時(shí)間是5 秒鐘,如果5 秒鐘之內(nèi)沒有被吃掉,它就會(huì)在其它地方出現(xiàn);2. 用數(shù)碼管顯示得分情況和游戲的剩余時(shí)間,每吃掉一只老鼠就加一
2、分;3. 游戲時(shí)間和速度可以手動(dòng)設(shè)置。4. 選做:增加游戲難度或自擬其它功能。當(dāng)開啟電源時(shí),初始化EPM7128SLC815 數(shù)電實(shí)驗(yàn)開發(fā)板。8*88*8 次點(diǎn)亮六個(gè)蛇身和一個(gè)老鼠所對應(yīng)的點(diǎn),由于掃描頻率是 1MHz(遠(yuǎn)BTN1,BTN2BTN3BTN4 七段數(shù)碼管上顯示得分情況,每當(dāng)蛇吃到一個(gè)老鼠時(shí)則自動(dòng)加一分,并在數(shù)碼管上顯示出當(dāng)前得分。設(shè)置一個(gè)控件 SW1 來對得分進(jìn)行復(fù)位,即每當(dāng)SW1有效時(shí),則得分清零。初始化 8*8 點(diǎn)陣 號通 過 控 件, 輸入蛇的運(yùn)號2/ 22通過比較決定否是沒 有 吃 到 內(nèi)蛇還沒老鼠自動(dòng)改 時(shí) 鐘 蛇的運(yùn)動(dòng)方向 snake_m 設(shè)置為兩位二進(jìn)制的變量:假設(shè)“
3、00”011011控制方向dir 0001”1011則蛇運(yùn)動(dòng)方向的狀態(tài)轉(zhuǎn)移圖如下:3/ 22”00”11”“01” ”按照系統(tǒng)的設(shè)計(jì)思路其流程圖如下:4/ 22啟 動(dòng)游戲結(jié)束5/ 22在本課題中最主要的是如何讓蛇在 8*8點(diǎn)陣上顯示并且讓蛇身 snake_x和 snake_y變量定義為wordword數(shù)據(jù)類型是我自己定義的(type word isarray (1 to 7)of std_logic_vector(2 downto 0)snake_x和 snake_y 1到 7 3位的二進(jìn)制變量(從“000”到“111上,即 snake_m=00 dir=“如下:if (snake_m=00)
4、 thenif (dir=10) thensnake_m=10;if (snake_m=10)and(snake_x(1)=000) then -左,snake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake
5、_x(1)=111;elsif (snake_m=10) thensnake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);6/ 22snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_x(1)=snake_x(1)-1;這就解決了蛇的移動(dòng)問題,另外對于顯示
6、模塊和控制模塊比較簡單,在分塊電路設(shè)計(jì)中將分別介紹。控制方向模塊:通過按鍵BTN1,BTN2,BTN3,BTN4如下:process(clk)beginif (clkevent)and(clk=0) then-shang,xia zou ,youif (key=1000) then -shangdir=00;elsif (key=0100) then-xiadir=01;elsif (key=0010) then- zoudir=10;elsif (key=0001) then-youdir=11;end if;end if;end process;時(shí)鐘分頻模塊:由于系統(tǒng)所用的晶振為1MHZ,
7、而要求是蛇1S移動(dòng)一次,這就要1MHZ晶振進(jìn)行分頻,采用 10e6分頻,是分頻得到的時(shí)鐘 CLK2周期為 1S,其設(shè)計(jì)源代碼如下:P0:process(clk)beginif (clkevent and clk=1) thenif count=1000000 thencount=0;7/ 22clk1=not clk1;elsecount=count+1;end if;end if;掃描顯示模塊:掃描顯示時(shí)每來一個(gè)時(shí)鐘就對整個(gè)8*8點(diǎn)陣上的點(diǎn)亮的條件是行為高電平0時(shí),則對應(yīng)的點(diǎn)就被點(diǎn)亮,其源代碼如下:process(clk)- 顯示部分beginif (clkevent and clk=1)
8、thenif count1=8 thencount1=1;else count1 rown rown rown rown rown rown rown rown rown coln coln coln coln coln coln coln coln coln=11111111;end if;col=coln;8/ 22row=rown;end process;蛇身移動(dòng)模塊:蛇身移動(dòng)時(shí)首先判斷蛇的移動(dòng)方向 snake_m,然后和控制方向dirprocess(clk1)-蛇的運(yùn)動(dòng)beginif (clk1event and clk1=1) thenif (snake_m=10)and(snake
9、_x(1)=000) then -左,snake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_x(1)=111;elsif (snake_m=10) thensnake_x(6)=snake_x(5);s
10、nake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_x(1)=snake_x(1)-1;elsif (snake_m=00)and(snake_y(1)=111) then -上snake_x(6)=snake_x(5);snake_x(5)=s
11、nake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);9/ 22snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_y(1)=000;elsif (snake_m=00) thensnake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake
12、_x(3)=snake_x(2);snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_y(1)=snake_y(1)+1;elsif (snake_m=11)and(snake_x(1)=111) then -右snake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake
13、_x(2);snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_x(1)=000;elsif (snake_m=11) thensnake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);snake_x(2)=snake_x(1);snake_y(6)=sna
14、ke_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_x(1)=snake_x(1)+1;elsif (snake_m=01)and(snake_y(1)=000) then -下snake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);10/ 22snake_x(2)=snake_x(1);snake_y(6)=snake_y(
15、5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_y(1)=111;elsif (snake_m=01) thensnake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_
16、y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_y(1)=snake_y(1)-1;end if;end if;end process;老鼠隨機(jī)顯示模塊及計(jì)分模塊:在老鼠顯示模塊中,有三項(xiàng)功能:第一項(xiàng),當(dāng)SW1有效時(shí),這時(shí)對計(jì)分進(jìn)行清零;第二項(xiàng),當(dāng) 5s到來,而蛇沒有吃到老鼠,則改變老鼠的位置,當(dāng)蛇吃到老鼠,改變蛇的位置;第三項(xiàng),在七段數(shù)碼管上顯示得分情況,其中還設(shè)置six這個(gè)輸入變量對數(shù)碼進(jìn)行片選。其相關(guān)源代碼如下:process(clk)beginif (clkevent and clk=1) thenif sw1=1 then
17、seven=1111110;else if count2=5000000 thencount=1;snake_x(7)=snake_y(3)+1;snake_y(7)=snake_x(4)-1;else count2=count2+1;11/ 22end if;else ifsnake_x(1)=snake_x(7) and snake_y(1)=snake_y(7)thenscore=score+1;snake_x(7)=snake_y(3)+1;snake_y(7)sevensevensevensevensevensevensevensevensevensevensevensevensev
18、ensevensevensevenseven=0000000;end case;six=011111;end if;end process;1、2、3、4、5、蛇可以在點(diǎn)陣上自動(dòng)移動(dòng);可以通過控件控制蛇的移動(dòng)方向;可以在七段數(shù)碼管上顯示當(dāng)前游戲者的得分;可以通過復(fù)位鍵來對當(dāng)前得分清零;可以在蛇沒有吃到老鼠而且時(shí)間已過 5S 時(shí)對蛇的位置進(jìn)行自動(dòng)改變。12/ 22本實(shí)驗(yàn)中開始時(shí)遇到的最大問題時(shí)如何讓蛇在在 8*8 點(diǎn)陣上顯顯示原理,于是設(shè)計(jì)了蛇的移動(dòng)和顯示。就這樣過了兩周時(shí)間,真正序調(diào)試的過程中都得以解決,其中遇到一個(gè)比較多的問題是 if 語句要時(shí)由于過多的使用 ifcase 等一系列語句造成的
19、,故在程序設(shè)計(jì)施下完成所要求的任務(wù)??偨Y(jié)和結(jié)論:在本次試驗(yàn)中,所有的步驟,從實(shí)驗(yàn)設(shè)計(jì)到最后將所有的代碼以解決時(shí)是快樂,特別是的當(dāng)蛇在點(diǎn)陣上跑動(dòng)時(shí),心里只能用happy取,其中首先想到的是計(jì)分模塊,這個(gè)模塊很快就解決,接下來我又占有邏輯宏單元為99%,系統(tǒng)一共有128 個(gè)邏輯宏單元,而我已經(jīng)使用了 127 個(gè)。后來,我發(fā)現(xiàn)通過簡化某些程序段,特別是簡化if 語13/ 22句的使用可以騰出一些邏輯宏單元出來,接著我又將在每隔 5S游戲樣驗(yàn)收程序的時(shí)間到了,雖然算不上perfect,但畢竟在發(fā)現(xiàn)問題和能力,一種思路的設(shè)計(jì),發(fā)現(xiàn)問題,解決問題的能力。硬件:EPM7128SLC815數(shù)字電路實(shí)驗(yàn)開發(fā)板計(jì)
20、算機(jī)軟件:ALTER公司開發(fā)的quartus II 7.1版本Adobe ReaderOffice wordlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity snake is-shi tiport(clk:in std_logic;-shi zhong duankou-fu wei duankou-kong zhi fangxiangsw1:in std_logic;key:in std_logic_vector(3 downto 0);duankoucol:out std_logic
21、_vector(7 downto 0); -lie zuobiaorow:out std_logic_vector(7 downto 0); -hang zuobiaosix:out std_logic_vector( 5 downto 0); -qi duan shu ma guan depian xuanseven:out std_logic_vector(6 downto 0) -qi duan shu ma guan);14/ 22end entity snake;architecture behav of snake is-jie gou tisignal dir: std_logi
22、c_vector (1 downto 0); -kong zhi she yi dongde fang xiangsignal rown:std_logic_vector(7 downto 0); -hang xin haosignal coln:std_logic_vector(7 downto 0); -lie xinhaotype word is array (1 to 7)of std_logic_vector(2 downto 0);-dingyiword shuju leixingsignal snake_y:word;signal snake_x:word;-dingyi zon
23、g zuobiao- dingyi heng zuibiao-10e6 fen pin xinhao-1miao shi zhongsignal count:integer range 0 to 1000000;signal clk1:std_logic;signal clk2:std_logic;signal count1:integer range 1 to 7;-5miao shi zhong-sheshen he laoshusignal count2:integer range 1 to 5000000; -5*10e6 fen pinsignal snake_m: std_logi
24、c_vector (1 downto 0);-she yidong defangxiangsignal score:std_logic_vector(3 downto 0); -jisuan defenbeginP0:process(clk)-10e6 fenpinbeginif (clkevent and clk=1) thenif count=1000000 thencount=0;clk1=not clk1;elsecount=count+1;end if;end if;end process;p1:process(clk)shixianbegin-kongzhi fangxiang d
25、eif (clkevent)and(clk=0) then -shang,xia zou ,youif (key=1000) thendir=00;-shang-xia-zou-youelsif (key=0100) thendir=01;elsif (key=0010) thendir=10;elsif (key=0001) thendir=11;end if;15/ 22end if;end process;p2:process(clk)fangxiangbegin-she xia yibu de yidongif (clkevent)and(clk=0) thenif (snake_m=
26、00) thenif (dir=00) thensnake_m=00;elsif (dir=01) thensnake_m=00;elsif (dir=10) thensnake_m=10;elsif (dir=11) thensnake_m=11;end if;elsif (snake_m=01) thenif (dir=00) thensnake_m=01;elsif (dir=01) thensnake_m=01;elsif (dir=10) thensnake_m=10;elsif (dir=11) thensnake_m=01;end if;elsif (snake_m=10) th
27、enif (dir=00) thensnake_m=00;elsif (dir=01) thensnake_m=01;elsif (dir=10) thensnake_m=10;elsif (dir=11) thensnake_m=11;end if;elsif (snake_m=11) thenif (dir=00) thensnake_m=00;elsif (dir=01) thensnake_m=01;elsif (dir=10) thensnake_m=11;16/ 22elsif (dir=11) thensnake_m=11;end if;end if;end if;end pro
28、cess;p3:process(clk)sheshenbegin-zai dianzhen shang xianshiif (clkevent and clk=1) thenif count1=8 thencount1=1;else count1 rown rown rown rown rown rown rown rown rown coln coln coln coln coln coln coln coln coln=11111111;end if;col=coln;row=rown;end process;p4: process(clk)laoshu he jufen mokuai-c
29、hangsheng suiji17/ 22beginif (clkevent and clk=1) thenif sw1=1 thenseven=1111110;else if count2=5000000 thencount=1;snake_x(7)=snake_y(3)+1;snake_y(7)=snake_x(4)-1;else count2=count2+1;end if;else if snake_x(1)=snake_x(7) and snake_y(1)=snake_y(7)thenscore=score+1;snake_x(7)=snake_y(3)+1;snake_y(7)s
30、evensevensevensevensevensevensevensevensevensevensevensevensevensevensevensevenseven=0000000;end case;six=011111;end if;end process;p5: process(clk1)mokuaibegin-sheshen yudongif (clk1event and clk1=1) thenif (snake_m=10)and(snake_x(1)=000) then -zuo18/ 22snake_x(6)=snake_x(5);snake_x(5)=snake_x(4);s
31、nake_x(4)=snake_x(3);snake_x(3)=snake_x(2);snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_x(1)=111;elsif (snake_m=10) thensnake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2)
32、;snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_x(1)=snake_x(1)-1;elsif (snake_m=00)and(snake_y(1)=111) then -shangsnake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);snake_
33、x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_y(1)=000;elsif (snake_m=00) thensnake_x(6)=snake_x(5);snake_x(5)=snake_x(4);snake_x(4)=snake_x(3);snake_x(3)=snake_x(2);snake_x(2)=snake_x(1);snake_y(6)=snake_y(5);snake_y(5)=snake_y(4);snake_y(4)=snake_y(3);19/ 22snake_y(3)=snake_y(2);snake_y(2)=snake_y(1);snake_y(1)=snake_y(1)+1;elsif (snake_m=11)and(snake_x(1)=111) then -yousnake_x(6)=snake_x(5);sn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車模型工春節(jié)假期安全告知書
- 鎢酸銨溶液制備工春節(jié)假期安全告知書
- 民航地面安全檢查操作手冊
- 安全用電管理制度
- 2025年黑龍江省建筑安全員《B證》考試題庫及答案
- 2025護(hù)士甲亢考試題目及答案
- 建筑工程管理專業(yè)中級職稱理論考試題庫及解析(2026年)
- 2025年安全教育培訓(xùn)試題附答案(奪分金卷)
- 2025年銀行招聘之銀行招聘綜合知識題庫檢測試卷A卷附答案
- 2024廣東女子職業(yè)技術(shù)學(xué)院教師招聘考試真題及答案
- 運(yùn)輸人員教育培訓(xùn)制度
- 升降貨梯買賣安裝與使用說明書合同
- 河南豫能控股股份有限公司及所管企業(yè)2026屆校園招聘127人考試備考題庫及答案解析
- 房地產(chǎn)公司2025年度總結(jié)暨2026戰(zhàn)略規(guī)劃
- 物業(yè)管家客服培訓(xùn)課件
- 虛假貿(mào)易十不準(zhǔn)培訓(xùn)課件
- 中央空調(diào)多聯(lián)機(jī)施工安全管理方案
- 【初中 地理】2025-2026學(xué)年人教版七年級上冊地理期末復(fù)習(xí)提綱
- 2026年撫順師范高等??茖W(xué)校單招職業(yè)技能測試題庫附答案
- GB/T 46692.2-2025工作場所環(huán)境用氣體探測器第2部分:有毒氣體探測器的選型、安裝、使用和維護(hù)
- 2025人機(jī)共育向善而為:AI時(shí)代的教育變革探索指南
評論
0/150
提交評論