基於FPGA的漢諾塔遊戲

2021-10-09 18:55:39 字數 3273 閱讀 1092

漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

漢諾塔遊戲規則簡單,對外部要求不高,不僅能增強思維能力,而且能提高智力,在休閒中使自己得到真正的長進。

使用verilog hdl 以及vhdl語言,運用fpga中的vga顯示原理以及鍵盤控制原理,開發漢諾塔簡易遊戲,力爭使程式短小精悍,簡潔明瞭,遊戲介面美觀,容易操作,功能豐富,趣味性強。

首先,需要為這個遊戲建立乙個「地圖」,確定底座、塔、圓盤以及確認點的位置,這個地圖實際就是乙個座標系,為了方便,我們使用了固定(640*480)的地圖。分析計算後,通過畫素點的座標確認好每個元素的位置以及所有可能出現的情況。比如,乙個指定區域本來顯示乙個圓盤,然而當人為控制其向上、向下、向左或向右移動後,就要轉換成空地,各個狀態之間的轉移關係並不複雜,在這裡不再一一贅述。

其次,需要記錄每乙個圓盤的當前座標和鍵盤的資訊,因為地圖上每塊區域的改變都是由鍵盤控制圓盤的移動引起的,故而需要記錄其位置。除此之外,還需要乙個控制點用來指定當前需要移動圓盤所在塔的位置。

最後,我們考慮了整個介面如何被顯示出來。實際上這個問題非常簡單,只要顯示模組將指定的座標資料讀出來,將不同的顏色分配到指定的區域,轉換成vga訊號,並在顯示器的相應位置顯示出來就可以了。

經過以上分析,整個遊戲的邏輯結構已經基本上清晰了,下面我們將根據這個來進行系統的設計。

1.詳細設計程式

輸入輸出訊號:

2.功能描述

接收濾波鍵盤產生的資料,提取掃瞄碼,對接收來的資料區分是通碼還是斷碼,並向訊號轉換模組傳送。

3.模組封裝

1.詳細設計程式

輸入輸出訊號:

2.功能描述

接受訊號輸入模組傳送來的鍵盤通碼或斷碼,對其判斷當前操作是向左?向?向上?還是向下?將操作訊號轉換為訊號kb(「1」表示鍵盤向上,「2」表示鍵盤向下,「3」表示鍵盤向左,「4」表示鍵盤向右),並將訊號kb傳送給核心控制模組。

3.模組封裝

1.詳細設計程式

輸入輸出訊號:

2.功能描述

接收的訊號kb判斷鍵盤的操作(上下左右),根據當前操作改變指定圓盤的位置,並將位置訊號傳遞給vga顯示模組。

3.模組封裝

1.詳細設計程式

輸入輸出訊號:

圓盤顯示程式:

begin

if ((xpos>=pointx1)&&(xpos<=pointx2)&&(ypos>=pointy1)&&(ypos<=pointy2)) begin//圓點

r=pointr;

g=pointg;

b=pointb;

endelse if ((xpos>=towerax1)&&(xpos<=towerax2)&&(ypos>=toweray1)&&(ypos<=toweray2)) begin//塔a

r=towerar;

g=towerag;

b=towerab;

endelse if ((xpos>=towerbx1)&&(xpos<=towerbx2)&&(ypos>=towerby1)&&(ypos<=towerby2)) begin//塔b

r=towerbr;

g=towerbg;

b=towerbb;

endelse if ((xpos>=towercx1)&&(xpos<=towercx2)&&(ypos>=towercy1)&&(ypos<=towercy2)) begin//塔c

r=towercr;

g=towercg;

b=towercb;

endelse if ((xpos>=28)&&(xpos<=612)&&(ypos>=420)&&(ypos<=480)) begin//底座

r=fundr;

g=fundg;

b=fundb;

endelse if ((xpos>=145)&&(xpos<=161)&&(ypos>=80)&&(ypos<=420)) begin//l柱子

r=fundr;

g=fundg;

b=fundb;

endelse if ((xpos>=310)&&(xpos<=326)&&(ypos>=80)&&(ypos<=420)) begin//m柱子

r=fundr;

g=fundg;

b=fundb;

endelse if ((xpos>=478)&&(xpos<=494)&&(ypos>=80)&&(ypos<=420)) begin//r柱子

r=fundr;

g=fundg;

b=fundb;

endelse begin//背景全黑

r=8'b00000000;

g=8'b00000000;

b=8'b00000000;

endend

2.功能描述

從核心控制模組接收圓盤的位置訊號,利用vga顯示影象原理轉為rgb三色的訊號以及畫素點座標,連線顯示器顯示當前狀態。

3.模組封裝

漢諾塔遊戲

漢諾塔 於印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從下往上按大小順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一回只能移動乙個圓盤。要想玩轉漢諾塔,需要先理解遞迴。如果乙個問題可以不斷地...

漢諾塔遊戲

題目描述 在a b c三根柱子上,有n個不同大小的圓盤 設半徑分別為1 n 一開始他們都疊在a上,你的目標是在最少的合法移動步數內將所有盤子從a塔移動到c塔。遊戲中的每一步規則如下 1 每一步只允許移動乙個盤子 從一根柱子最上方到另乙個柱子的最上方 2 移動的過程中,你必須保證大的盤子不能在小的盤子...

python 漢諾塔 Python漢諾塔

import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...