




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于JSSE的漢諾塔游戲設(shè)計(jì)與實(shí)現(xiàn)作者:康多全(合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,安徽省合肥市合肥學(xué)院(南區(qū)) 郵編230601)摘要:對(duì)漢諾塔游戲問(wèn)題進(jìn)行了研究,發(fā)現(xiàn)了對(duì)漢諾塔游戲用遞歸算法實(shí)現(xiàn)符合問(wèn)題邏輯結(jié)構(gòu)。設(shè)計(jì)了基于JSSE的遞歸算法實(shí)現(xiàn)了手動(dòng)移盤(pán)和自動(dòng)移盤(pán)的游戲功能。關(guān)鍵詞:漢諾塔 河內(nèi)塔 盤(pán)子問(wèn)題 游戲設(shè)計(jì) 遞歸問(wèn)題The Design and Realization of Hanoi Tower Game Based on JSSEKANG Duoquan(HEFEI UNIVERSITY HEFEI ANHUI )Abstract: Carried on a research to
2、the problem of Hanoi Tower Game , discovered that the realization using a return calculate way matches the logic structure of the Hanoi Tower Game.Designed the return calculate way to carry out the function of the game to move the dish automatically or move by hand based on JSSE.Key words: Hanoi Tow
3、er The problem of the dish Design for game1 引言:相傳在古印度的布拉瑪婆羅門(mén)圣廟的僧侶在進(jìn)行一種被稱(chēng)為漢諾塔的游戲,其裝置是一塊銅板,上面有三根桿(編號(hào)A、B、C),A桿上自下而上、由大到小按順序串上64個(gè)金盤(pán)。游戲的目標(biāo)是把 A桿上的金盤(pán)全部移到C桿上,并仍原有順序疊好。條件是每次只能移動(dòng)一個(gè)盤(pán),并且在每次移動(dòng)都不允許大盤(pán)移到小盤(pán)之上。僧侶們說(shuō)游戲結(jié)束的時(shí)候就是世界末日。現(xiàn)要求利用遞歸調(diào)用技術(shù)把N個(gè)盤(pán)從A桿移到C桿的移動(dòng)過(guò)程演示出來(lái)。2問(wèn)題分析: 這是一個(gè)著名的問(wèn)題,幾乎所有的教材上都有這個(gè)問(wèn)題。由于條件是一次只能移動(dòng)一個(gè)盤(pán),且
4、不允許大盤(pán)放在小盤(pán)上面,所以64個(gè)盤(pán)的移動(dòng)次數(shù)是: 18,446,744,073,709,551,615 這是一個(gè)天文數(shù)字,若每一微秒可能計(jì)算(并不輸出)一次移動(dòng),那么也需要幾乎一百萬(wàn)年。我們僅能找出問(wèn)題的解決方法并解決較小N值時(shí)的漢諾塔,但很難用計(jì)算機(jī)解決64層的漢諾塔。分析問(wèn)題,找出移動(dòng)盤(pán)子的正確算法。這個(gè)移動(dòng)過(guò)程很復(fù)雜與煩瑣,但規(guī)律性卻很強(qiáng)。使用遞歸調(diào)用技術(shù)來(lái)解決這個(gè)移動(dòng)過(guò)程,先得找到一個(gè)遞歸調(diào)用模型。想要得到漢諾塔問(wèn)題的簡(jiǎn)單解法,著眼點(diǎn)應(yīng)該是移動(dòng)A桿最底部的大盤(pán),而不是其頂部的小盤(pán)。不考慮64個(gè)盤(pán)而考慮N個(gè)盤(pán)的一般情況。要想將A桿上的N個(gè)盤(pán)移至C桿,我們可以這樣設(shè)想
5、: 1.以C盤(pán)為臨時(shí)桿,從A桿將1至N-1號(hào)盤(pán)移至B桿。2.將A桿中剩下的第N號(hào)盤(pán)移至C桿。3.以A桿為臨時(shí)桿,從B桿將1至N-1號(hào)盤(pán)移至C桿。我們看到,步驟2只需移動(dòng)一次就可以完成;步驟1與3的操作則完全相同, 唯一區(qū)別僅在于各桿的作用有所不同。這樣,原問(wèn)題被轉(zhuǎn)換為與原問(wèn)題相同性質(zhì)的、規(guī)模小一些的新問(wèn)題。 這就是需要找的遞歸調(diào)用模型。3 遞歸算法設(shè)計(jì)根據(jù)以上分析,在三個(gè)柱子中選擇一個(gè)作為臨時(shí)桿,可得到基本遞歸算法如下:public class TowersOfHanoi /實(shí)現(xiàn)遞歸算法的類(lèi)private int totalDisks;public TowersOfHano
6、i(int disks)totalDisks=disks;public void solve()moveTower (totalDisks,1,3,2);privatevoid moveTower(int numDisks,int start,int end,int temp)if(numDisks=1)moveOneDisk(start,end);elsemoveTower(numDisks-1,start,temp,end);moveOneDisk(start,end);moveTower(numDisks-1,temp,end,start);privatevoid moveOneDisk
7、(int start,int end)System.out.println("Move one disk from"+start+"to"+end);4 游戲界面設(shè)計(jì)4.1 布局設(shè)計(jì)在Java的GUI界面設(shè)計(jì)中,布局控制是通過(guò)為容器設(shè)置布局編輯器來(lái)實(shí)現(xiàn)的。java.awt包中共定義了五種布局編輯類(lèi),每個(gè)布局編輯類(lèi)對(duì)應(yīng)一種布局編輯策略,分別是FlowLayout、BorderLayout、CardLayout、GridLayout和GridBagLayout。當(dāng)一個(gè)容器選定一種布局編輯策略時(shí),它應(yīng)該創(chuàng)建該策略對(duì)應(yīng)的布局編輯類(lèi)的對(duì)象,并將此對(duì)象設(shè)置為自己的布
8、局編輯器。沒(méi)有設(shè)置布局編輯器的容器,其中的對(duì)象會(huì)互相覆蓋,影響使用,所以必須為每個(gè)容器設(shè)置一個(gè)合適的布局編輯器。本游戲界面采用BorderLayout布局編輯器實(shí)現(xiàn)布局控制,它把容器內(nèi)的空間簡(jiǎn)單地劃分為東、西、南、北、中五個(gè)區(qū)域,每加入一個(gè)組件都應(yīng)該指明把這個(gè)組件加在哪個(gè)區(qū)域中。BorderLayout只能指定五個(gè)區(qū)域位置,如果容器中需要加入超過(guò)五個(gè)組件,就必須使用容器的嵌套或改用其他的布局策略。4.2 GUI組件設(shè)計(jì)4.2.1 容器設(shè)計(jì)容器組件的主要作用是包容其他組件并按一定的方式組織排列它們,同一個(gè)容器中的所有部件通??偸峭瑫r(shí)被顯示和同時(shí)被隱藏的。從AWT組件體系結(jié)構(gòu)中可以看出,所有的容器
9、組件都是Container類(lèi)的子類(lèi),而Container類(lèi)又是Component類(lèi)的子類(lèi)。作為Container子類(lèi)的容器可以分為三組:Panel和Applet一組的容器都是無(wú)邊框的;ScrollPane一組是可以自動(dòng)處理滾動(dòng)操作的容器;Windows、Frame、Dialog和FileDialog是一組大都含有邊框,可以移動(dòng)、放大、縮小、關(guān)閉,功能較強(qiáng)的容器。4.2.2 盤(pán)子組件設(shè)計(jì)游戲界面中的盤(pán)子類(lèi)繼承Button按鈕,按鈕一般都對(duì)應(yīng)一種特定的功能或操作,當(dāng)用戶(hù)鼠標(biāo)點(diǎn)擊按鈕時(shí),系統(tǒng)就執(zhí)行這個(gè)預(yù)先定義好的操作。本游戲中有手動(dòng)移盤(pán)的操作,故將盤(pán)子類(lèi)設(shè)計(jì)為按鈕Button類(lèi)的子類(lèi),以方便手工移動(dòng)
10、。另外為每個(gè)盤(pán)子設(shè)置唯一的編號(hào)以區(qū)別大小不同的盤(pán)子。最后為盤(pán)子類(lèi)設(shè)置屬性上方有盤(pán),以判斷每個(gè)盤(pán)子對(duì)象上面是否還有其他盤(pán)子。如果該屬性值為真,表示不能移動(dòng)該盤(pán)子。class Disk extends Button private static final long serialVersionUID = -6174681128406353175L;int number;boolean 上方有盤(pán) = false;public Disk(int number, HannoiTower con) this.number = number;setBackground(Color.blue);addMous
11、eMotionListener(con);addMouseListener(con);public boolean get上方有盤(pán)() return 上方有盤(pán);public void set上方有盤(pán)(boolean b) 上方有盤(pán) = b;public int getNumber() return number;4.2.3塔節(jié)點(diǎn)設(shè)計(jì)塔節(jié)點(diǎn)的功能是實(shí)現(xiàn)盤(pán)子在移動(dòng)過(guò)程中的定位。故應(yīng)為該類(lèi)的對(duì)象設(shè)置橫縱坐標(biāo)屬性。塔節(jié)點(diǎn)表示盤(pán)子放置的位置,還應(yīng)該設(shè)置一個(gè)布爾屬性表示該節(jié)點(diǎn)現(xiàn)在有沒(méi)有盤(pán)子,只有當(dāng)沒(méi)有盤(pán)子時(shí)才能放置。最后還要設(shè)置返回該屬性值的方法等。class TowerPoint int x, y;bo
12、olean 有盤(pán)子;Disk 盤(pán)子 = null;HannoiTower con = null;public TowerPoint(int x, int y, boolean boo) this.x = x;this.y = y;有盤(pán)子 = boo;public boolean 是否有盤(pán)子() return 有盤(pán)子;public void set有盤(pán)子(boolean boo) 有盤(pán)子 = boo;public int getX() return x;public int getY() return y;public void 放置盤(pán)子(Disk 盤(pán)子, HannoiTower con) th
13、is.con = con;con.setLayout(null);this.盤(pán)子 = 盤(pán)子;con.add(盤(pán)子);int w = 盤(pán)子.getBounds().width;int h = 盤(pán)子.getBounds().height;盤(pán)子.setBounds(x - w / 2, y - h / 2, w, h);有盤(pán)子 = true;con.validate();public Disk 獲取盤(pán)子() return 盤(pán)子;4.3 事件處理機(jī)制圖形用戶(hù)界面之所以能為廣大用戶(hù)所喜愛(ài)并最終成為事實(shí)上的標(biāo)準(zhǔn),很重要的一點(diǎn)就在與它可以用更靈活、簡(jiǎn)便的方式來(lái)接收用戶(hù)命令。用戶(hù)在圖形用戶(hù)界面中輸入命令是通過(guò)
14、移動(dòng)鼠標(biāo)對(duì)特定圖形界面元素單擊、雙擊鼠標(biāo)或擊鍵來(lái)實(shí)現(xiàn)的,為了能夠接受用戶(hù)命令,圖形用戶(hù)界面首先應(yīng)該能夠識(shí)別這些操作并做出相應(yīng)的響應(yīng)。通常每一個(gè)鍵盤(pán)或鼠標(biāo)操作會(huì)引發(fā)一個(gè)系統(tǒng)預(yù)先定義好的事件,用戶(hù)程序只須編制代碼定義每個(gè)特定事件發(fā)生時(shí)程序應(yīng)作出何種響應(yīng)即可。這些代碼會(huì)在它們對(duì)應(yīng)的事件發(fā)生時(shí)由系統(tǒng)自動(dòng)調(diào)用,這就是圖形用戶(hù)界面中事件和事件響應(yīng)的基本原理。如下代碼是鼠標(biāo)拖動(dòng)事件的處理:public void mouseDragged(MouseEvent e) Disk disk = null;if (e.getSource() instanceof Disk) disk = (Disk) e.getS
15、ource();move = true;e = SwingUtilities.convertMouseEvent(disk, e, this);if (e.getSource() = this) if (move && disk != null) x = e.getX();y = e.getY();if (disk.get上方有盤(pán)() = false)disk.setLocation(x - disk.getWidth() / 2, y- disk.getHeight() / 2);5游戲運(yùn)行演示:圖1 將1號(hào)盤(pán)子移到B柱圖2 將2號(hào)盤(pán)子移到C柱圖3 將1號(hào)盤(pán)子移到C柱圖4 將3號(hào)盤(pán)子移到B柱圖5 將1號(hào)盤(pán)子移到A柱 圖6 將2號(hào)盤(pán)子移到B柱圖7 將1號(hào)盤(pán)子移到B柱圖8 將4號(hào)盤(pán)子移到C柱圖9 將1號(hào)盤(pán)子移到C柱5 結(jié)束結(jié)一般的算法是很難解決這個(gè)問(wèn)題的,而用遞歸算法只用了幾個(gè)語(yǔ)句就解決了這個(gè)難題。不過(guò)要說(shuō)明的是,按照漢諾塔的移動(dòng)原則,將N個(gè)盤(pán)從A桿移動(dòng)到C 桿需要移動(dòng)盤(pán)的次數(shù)是 2 的 N 次冪減 1 , 那么 64 個(gè)盤(pán)移動(dòng)次數(shù)就是18446744073709511615,近19億億次。這是一個(gè)天文數(shù)字,即使一臺(tái)功能很強(qiáng)的現(xiàn)代計(jì)算機(jī)來(lái)解漢諾塔問(wèn)題,恐怕也需要
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年浙江藥科職業(yè)大學(xué)單招職業(yè)傾向性考試題庫(kù)完整
- 2025年杭州萬(wàn)向職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- 2025年正德職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)帶答案
- 2025年大連裝備制造職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)必考題
- 2025年汕尾職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案一套
- 2025年河北美術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)新版
- 2025年安徽醫(yī)學(xué)高等專(zhuān)科學(xué)校單招職業(yè)適應(yīng)性測(cè)試題庫(kù)一套
- 2025年安徽審計(jì)職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫(kù)及參考答案
- 2025年南開(kāi)大學(xué)濱海學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)含答案
- 2025年青海高等職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及答案1套
- 第5.3課《國(guó)家的兒子》-2023-2024學(xué)年中職高一語(yǔ)文新教材同步教學(xué)講堂(高教版2023·基礎(chǔ)模塊上冊(cè))
- 生態(tài)溝渠施工方案
- 華彩中國(guó)舞教案第八級(jí)分享
- 04設(shè)備設(shè)施安全檢查表
- 安全責(zé)任承諾書(shū)范本
- 四年級(jí)數(shù)學(xué)下冊(cè) 七 三角形、 平行四邊形和梯形 1 三角形的認(rèn)識(shí)課件 蘇教版 課件
- 武漢市城中村綜合改造掛牌出讓土地成本測(cè)算
- 員工請(qǐng)假管理制度-員工請(qǐng)假管理制度范文
- 帶小孩保姆合同協(xié)議書(shū)范本
- 初中趣味數(shù)學(xué)PPT課件
- MDI Jade 最完整教程(XRD分析)
評(píng)論
0/150
提交評(píng)論