Java專業(yè)課程設(shè)計(jì)方案報(bào)告漢諾塔_第1頁
Java專業(yè)課程設(shè)計(jì)方案報(bào)告漢諾塔_第2頁
Java專業(yè)課程設(shè)計(jì)方案報(bào)告漢諾塔_第3頁
Java專業(yè)課程設(shè)計(jì)方案報(bào)告漢諾塔_第4頁
Java專業(yè)課程設(shè)計(jì)方案報(bào)告漢諾塔_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

東華理工大學(xué)Java課程設(shè)計(jì)匯報(bào)題目:漢諾塔所在院系:理學(xué)院學(xué)生姓名:漆俊、朱學(xué)曼、顏瑤專業(yè):信息和計(jì)算科學(xué)班級(jí):1223201-2指導(dǎo)老師:黃國(guó)輝12月29日目錄概述題目概述題目分析課程設(shè)計(jì)1.課程設(shè)計(jì)目標(biāo)2.課程設(shè)計(jì)內(nèi)容3.課程設(shè)計(jì)環(huán)境4.課程設(shè)計(jì)要求三.系統(tǒng)需求分析1.系統(tǒng)目標(biāo)2.主體功效3.開發(fā)環(huán)境四.系統(tǒng)概要設(shè)計(jì)1.系統(tǒng)功效模塊劃分2.步驟圖3.自定義類說明五.系統(tǒng)具體設(shè)計(jì)六.測(cè)試測(cè)試方案測(cè)試結(jié)果七.小結(jié)八.參考文件程序代碼一.概述題目概述:Hannoi塔:

設(shè)計(jì)GUI界面Hannoi塔,用戶能夠經(jīng)過拖動(dòng)鼠標(biāo)移動(dòng)各個(gè)塔上盤子,程序也能夠自動(dòng)演示盤子移動(dòng)過程。

設(shè)計(jì)要求

1.有三個(gè)表示塔對(duì)象,分別命名為A、B和C。A塔上有若干個(gè)盤子,盤子大小不等,并按著大小次序依次擺放在A塔上,大盤在下,小盤在上。用戶能夠用鼠標(biāo)拖動(dòng)盤子,把A

塔上盤子全部移動(dòng)到另外兩個(gè)塔中任何一個(gè)塔上。要求每次只能移動(dòng)一個(gè)盤子,在任何時(shí)候不許可大盤壓在小盤上面。

2.用戶也能夠選擇讓程序自動(dòng)演示。選擇自動(dòng)演示后,程序?qū)⒁詣?dòng)畫形式演示把A塔上盤子全部移到C塔過程,并將移動(dòng)過程以文本形式顯示在一個(gè)文本區(qū)中。2.題目分析:(1)在窗口中畫出初始時(shí)塔和碟子狀態(tài)。(2)能夠以自動(dòng)或手動(dòng)兩種方法搬移碟子。(3)自動(dòng)搬移能夠經(jīng)過定時(shí)器或多線程方法,每一次移動(dòng)時(shí)間間隔能夠自定,以人眼觀察比較舒適為宜,每一次移動(dòng)過程如能實(shí)現(xiàn)動(dòng)畫最好。(4)定義塔描述類和碟子描述類。(5)在程序中,碟子數(shù)目及每次移動(dòng)時(shí)間間隔能夠經(jīng)過對(duì)話框設(shè)置(也應(yīng)該有默認(rèn)值)。(6)支持暫停功和繼續(xù)功效(在自動(dòng)搬移過程中能夠暫停,并繼續(xù))。(7)暫停后,能夠?qū)⒛壳盃顟B(tài)保留(碟子和塔組合關(guān)系)。(8)能夠從7中保留文件中讀出某個(gè)狀態(tài),并繼續(xù)移動(dòng)。二.課程設(shè)計(jì)1.課程設(shè)計(jì)目標(biāo)《JAVA程序設(shè)計(jì)》是計(jì)算機(jī)相關(guān)專業(yè)選修專業(yè)基礎(chǔ)課程,其實(shí)踐性、應(yīng)用性很強(qiáng)。實(shí)踐教學(xué)步驟是必不可少一個(gè)關(guān)鍵步驟。本課程程序設(shè)計(jì)專題實(shí)際是計(jì)算機(jī)相關(guān)專業(yè)學(xué)生學(xué)習(xí)完《JAVA程序設(shè)計(jì)》課程后,進(jìn)行一次全方面綜合訓(xùn)練,JAVA程序設(shè)計(jì)設(shè)計(jì)目標(biāo)是加深對(duì)理論教學(xué)內(nèi)容了解和掌握,使學(xué)生較系統(tǒng)地掌握程序設(shè)計(jì)及其在網(wǎng)絡(luò)開發(fā)中廣泛應(yīng)用,基礎(chǔ)方法及技巧,為學(xué)生綜合利用所學(xué)知識(shí),利用軟件工程為基礎(chǔ)進(jìn)行軟件開發(fā)、并在實(shí)踐應(yīng)用方面打下一定基礎(chǔ)。課程設(shè)計(jì)內(nèi)容我設(shè)計(jì)Hannoi塔,除了要編寫6個(gè)java文件所給出類外,還需要java系統(tǒng)提供部分關(guān)鍵類,如JButton,JCheckBox等。漢諾塔中有三個(gè)座,名字分別為A,B,C。剛開始時(shí)候A塔上有3個(gè)大小不等盤子,這些盤子從座底到座頂按著大小次序依次擺放在A座上。用戶能夠用鼠標(biāo)選中盤子,然后經(jīng)過拖動(dòng)鼠標(biāo)來移動(dòng)盤子。釋放鼠標(biāo)來放置該盤子。程序要求用戶在移動(dòng)盤子過程中,不許可吧大盤子放置在小盤子上面,用戶最終要完成是把A座上全部盤子移動(dòng)到B座或C座上。用戶能夠經(jīng)過Hannoi塔界面提供改變盤子數(shù)目功效來改變盤子數(shù)目,同時(shí)能夠改變盤子大小和改變盤子和界面背景顏色,而且還能夠選擇控制背景音樂播放。用戶能夠經(jīng)過單擊Hannoi塔界面上提供按鈕,讓程序自動(dòng)完成把A座上盤子全部移動(dòng)到C座上。用戶在移動(dòng)盤子過程中,能夠隨時(shí)單擊Hannoi塔界面上提供按鈕,重新開始。課程設(shè)計(jì)環(huán)境硬件要求能運(yùn)行Windows9.X操作系統(tǒng)微機(jī)系統(tǒng)。JAVA程序設(shè)計(jì)語言及對(duì)應(yīng)集成開發(fā)環(huán)境,J2SDK和ECLIPSE開發(fā)工具。課程設(shè)計(jì)要求按課程設(shè)計(jì)指導(dǎo)書提供課題,要求學(xué)生在自行完成各個(gè)操作步驟,并能實(shí)現(xiàn)且達(dá)成舉一反三目標(biāo),完成一個(gè)項(xiàng)目處理一類問題。要求學(xué)生能夠全方面、深入了解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、設(shè)計(jì)和解答類似問題;對(duì)此能夠很好地了解和掌握,能夠進(jìn)行簡(jiǎn)單分析和判定;能編寫出含有良好風(fēng)格程序;掌握J(rèn)AVA程序設(shè)計(jì)基礎(chǔ)技能和面向?qū)ο蟾拍詈头椒?;了解多線程、安全和網(wǎng)絡(luò)等編程技術(shù)。同時(shí)培養(yǎng)學(xué)生進(jìn)行分析問題、處理問題能力;培養(yǎng)學(xué)生進(jìn)行設(shè)計(jì)分析、設(shè)計(jì)方法、設(shè)計(jì)操作和測(cè)試、設(shè)計(jì)過程觀察、了解和歸納能力提升。三.系統(tǒng)需求分析系統(tǒng)目標(biāo)所設(shè)計(jì)代碼能夠正常運(yùn)行程序,而且根據(jù)設(shè)計(jì)目標(biāo)預(yù)想完成具體功效。主體功效(1)設(shè)計(jì)GUI界面Hannoi塔。Hannoi塔中有三個(gè)座,名字分別是A、B和C。初始狀態(tài)是A座上有五個(gè)大小不等盤子,這些盤子從座底到座頂按著大小次序依次擺放在A座上。用戶能夠用鼠標(biāo)選中盤子,然后經(jīng)過拖動(dòng)鼠標(biāo)來移動(dòng)該盤子、釋放鼠標(biāo)來放置該盤子。(2)程序要求用戶在移動(dòng)盤子過程中,不許可把大盤子放在小盤子上面,用戶最終要完成是把A座上全部盤子移動(dòng)到B座或C座上。(3)用戶能夠經(jīng)過單擊Hannoi塔界面上提供按鈕,讓程序自動(dòng)完成把A座上盤子全部移動(dòng)到B座或C座上。(4)用戶在移動(dòng)盤子過程中,能夠隨時(shí)單擊Hannoi塔界面上提供按鈕,重新開始游戲。3.開發(fā)環(huán)境JAVA程序設(shè)計(jì)語言及對(duì)應(yīng)集成開發(fā)環(huán)境,JDK1.6。四.系統(tǒng)概要設(shè)計(jì)關(guān)鍵要實(shí)現(xiàn)功效有:完成漢諾塔“手工移動(dòng)演示”;完成漢諾塔“自動(dòng)移動(dòng)演示”;增加計(jì)時(shí)功效,即顯示用戶完成移動(dòng)盤子所花費(fèi)時(shí)間;用戶能夠設(shè)置最大和最小盤子大小;用戶能夠選擇播放和暫停背景音樂;用戶能夠設(shè)置盤子數(shù)目;用戶能夠設(shè)置盤子顏色和背景顏色;用戶能夠?qū)⒆詣?dòng)移動(dòng)盤子文本信息保留到文件。系統(tǒng)功效模塊劃分(1)Tower.java(主類)Tower類負(fù)責(zé)創(chuàng)建Hannoi塔主窗口,該類含有main方法,Hannoi塔從類開始實(shí)施。Tower類組員變量中有兩種關(guān)鍵類型對(duì)象:一個(gè)int基礎(chǔ)型數(shù)據(jù)和一個(gè)char型數(shù)組。兩種類型對(duì)象分別是:HannoiTower和Button對(duì)象。(2)HannoiTower.javaHannoiTower類是javax.swing包中JPanel容器子類,創(chuàng)建容器被添加到Tower窗口中心。HannoiTower類組員變量有兩種關(guān)鍵類型對(duì)象、一個(gè)int基類型數(shù)據(jù)和一個(gè)char型數(shù)組。兩種類型對(duì)象分別是:Disk、TowerPoint。(3)TowerPoint.javaTowerPoint類負(fù)責(zé)在HannoiTower中創(chuàng)建表示位置塔點(diǎn)對(duì)象。(4)Disk.javaDisk類是Button一個(gè)子類,創(chuàng)建對(duì)象是HannoiTower容器中一個(gè)按鈕,用來表示HannoiTower中盤子。步驟圖(圖4-1)自定義類說明(1)自定義類類名:JButton作用:自定義主類,實(shí)現(xiàn)圓盤類Disc繼承JButton類繼承父類:Disc類實(shí)現(xiàn)接口:沒有(2)組員變量JButton組員變量組員變量描述變量類型名稱控制盤子數(shù)目StringJLabel重新開始Stringrenew.setText開始游戲Stringrenew.setText背景顏色Stringbgcolor盤子顏色Stringpzcolor(3)方法表Chesspad方法方法名功效備注fillRect()繪制出矩形區(qū)域結(jié)構(gòu)方法g.fillOval()繪制相同數(shù)目點(diǎn)結(jié)構(gòu)方法drawString()繪制出A、B、C座

結(jié)構(gòu)方法setBackground()設(shè)置背景顏色和盤子顏色結(jié)構(gòu)方法Timer(inta,Objectb)創(chuàng)建一個(gè)計(jì)時(shí)器

結(jié)構(gòu)方法stop()停止計(jì)時(shí)器計(jì)時(shí)

接口方法write保留文件

接口方法actionPerformed事件處理

evaluate評(píng)定

五.系統(tǒng)具體設(shè)計(jì)Tower類Tower類是javax.swing包中Frame一個(gè)子類,標(biāo)明該類關(guān)鍵組員變量和方法:組員變量tower是HannoiTower創(chuàng)建對(duì)象。tower對(duì)象是一個(gè)容器,刻畫了Hannoi塔結(jié)構(gòu),該對(duì)象被添加到窗口中心。盤子數(shù)目是int型數(shù)據(jù),它默認(rèn)值是5。盤子數(shù)目標(biāo)值是用來確定tower對(duì)象中“盤子”數(shù)目。towerName是char型數(shù)組,長(zhǎng)度為3,其三個(gè)單元默認(rèn)取值依次是A、B和C。towerName數(shù)組單元值用來確定tower中三個(gè)塔名字。renew和auto是Button創(chuàng)建按鈕對(duì)象,名字依次為“重新開始”和“自動(dòng)演示搬盤子”,renew和auto全部將目前窗口注冊(cè)為自己ActionEvent事件監(jiān)視器。方法取消起始塔定義,并將塔頂盤設(shè)為黃色取消起始塔定義,并將塔頂盤設(shè)為黃色是否自動(dòng)搬移退出開始是否正在移動(dòng)退出是否點(diǎn)中某個(gè)塔退出是否已定義起始塔塔上是否有盤退出定義目前塔為起始塔,并將塔頂盤設(shè)為藍(lán)色是否起始塔消息框報(bào)錯(cuò)退出該塔頂盤是否比欲移動(dòng)盤大消息框報(bào)錯(cuò)退出定義為目標(biāo)塔,調(diào)MovePlate函數(shù),將起始塔頂金盤移動(dòng)到目標(biāo)塔頂。退出是否是否否是是否退出否是是否否是圖4-1Tower()是結(jié)構(gòu)方法,負(fù)責(zé)完成窗口初始化。main方法是Hannoi塔程序運(yùn)行入口方法。actionPerformed(ActionEvent)方法是HannoiTower類實(shí)現(xiàn)ActionListener接口中方法。HannoiTower創(chuàng)建窗口是renew和auto兩個(gè)按鈕ActionEvent事件監(jiān)視器。當(dāng)用戶單擊按鈕時(shí),窗口將實(shí)施actionPerformed(ActionEvent)方法進(jìn)行對(duì)應(yīng)操作。當(dāng)用戶單擊renew按鈕時(shí),actionPerformed(ActionEvent)方法所進(jìn)行操作是保持目前盤子數(shù)目標(biāo)值,并讓tower對(duì)象依據(jù)盤子數(shù)目標(biāo)值設(shè)置其初始狀態(tài)。當(dāng)用戶單擊auto按鈕時(shí),actionPerformed(ActionEvent)方法所進(jìn)行操作是讓tower對(duì)象返回其中AutoMoveDisc對(duì)象,該對(duì)象是一個(gè)對(duì)話框,用戶能夠經(jīng)過對(duì)話框讓程序自動(dòng)地移動(dòng)“盤子”。六.測(cè)試1.測(cè)試方案本程序初始狀態(tài)是A塔上有五個(gè)大小不等盤子,這些盤子從座底到座頂按著大小次序依次擺放在A塔上。用戶能夠用鼠標(biāo)選中盤子,然后經(jīng)過拖動(dòng)鼠標(biāo)來移動(dòng)該盤子、釋放鼠標(biāo)來放置該盤子。程序要求用戶在移動(dòng)盤子過程中,不許可把大盤子放在小盤子上面,用戶最終要完成是把A塔上全部盤子移動(dòng)到B塔或C塔上。用戶能夠經(jīng)過單擊Hannoi塔界面上提供按鈕,讓程序自動(dòng)完成把A塔上盤子全部移動(dòng)到B塔或C塔上。用戶在移動(dòng)盤子過程中,能夠隨時(shí)單擊Hannoi塔界面上提供按鈕,重新開始游戲。2.測(cè)試結(jié)果七.小結(jié)經(jīng)過著為期兩天時(shí)間,我學(xué)到了很多,自然在這期間碰到困難數(shù)不勝數(shù),開始最讓我沒轍是題目不知道該訂什么好,想過很多個(gè)題目但往往跟其它同學(xué)反復(fù)了,為了避免做出來東西雷同了,只能繼續(xù)想其它方面,想過去做些復(fù)雜,但實(shí)在是能力有限,,最終我們小組最終決定做這個(gè)Hannoi塔游戲.這個(gè)Hannoi塔游戲就是在原有程序基礎(chǔ)上增加了改變盤子數(shù)目功效、改變盤子大小功效、改變背景顏色功效、改變盤子顏色功效、計(jì)時(shí)器功效和保留信息到文件功效,因?yàn)槭窃谠谢A(chǔ)上修改,即使理論上那個(gè)來講這應(yīng)該很簡(jiǎn)單,不會(huì)太難,但當(dāng)我真正著手做起來得時(shí)候才發(fā)覺,原來自己還是太嫩,剛開始什么全部不懂,于是我們就去網(wǎng)上參閱了大量資料,也不停向同學(xué)們請(qǐng)教,最終逐步讓我從剛開始連怎樣運(yùn)行程序,甚至類作用等部分罪基礎(chǔ)東西全部不清楚到最終經(jīng)過努力最終把這個(gè)程序成功搞定.自然這期間除了辛勞也讓我明白了很多,有些小問題也是不容忽略,就如公共類只能有一個(gè),而且必需要有.及類名必需要同公共類名相同.不然程序就無法運(yùn)行.經(jīng)過編寫這個(gè)Hannoi塔游戲,我們認(rèn)識(shí)到應(yīng)該注意細(xì)節(jié)問題,即使是很小問題,但能夠提升自己編程能力,而且還能夠培養(yǎng)自己編程嚴(yán)謹(jǐn)性,同時(shí)還能夠?yàn)橐院缶幊谭e累經(jīng)驗(yàn)。除此之外讓我們對(duì)java變成語言又有了更深一步了解,曾經(jīng)對(duì)于部分類名似是而非,現(xiàn)在經(jīng)過編寫這個(gè)程序讓我逐步變得明朗部分了,最少能夠分清父類子類,和部分類和方法用途,當(dāng)然這些全部離不開小組組員分工合作,總而言之經(jīng)過這次課程設(shè)計(jì),我們真學(xué)到了很多.八.參考文件[1]蘇仕民.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)北京:機(jī)械工業(yè)出版社.參考書:[2]SartajSahni.DataStructure,Algorithms,andApplicationinC++.TheMcGraw-HillCompanyInc.1998[M](第一版)(數(shù)據(jù)結(jié)構(gòu)、算法和應(yīng)用——C++語言描述.北京:機(jī)械工業(yè)出版社.1999[3]WillanFord,WillianTopp.DataStructureswithC++.NewJersey:PrenticeHallInc,AdivisionSimon&SchusterCompany,1996[M](第一版)(數(shù)據(jù)結(jié)構(gòu)——C++語言描述.北京:清華大學(xué)出版社,1997[4]徐孝凱.數(shù)據(jù)結(jié)構(gòu)實(shí)用教程(C/C++描述)[M].(第一版)北京:清華大學(xué)出版社.1999[5]陳慧南.數(shù)據(jù)結(jié)構(gòu)(使用C++語言描述)[M].(第一版)南京:東南大學(xué)出版社.[6]殷人昆,陶永雷,謝若陽等.數(shù)據(jù)結(jié)構(gòu)(用面向?qū)ο蠓椒ê虲++描述)[M].(第一版)北京:清華大學(xué)出版社.1999九.程序代碼1.主類/***@(#)Tower.java***@author*@version1.00/12/29*/importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassTowerextendsFrameimplementsActionListener,Runnable{HannoiTowertower=null;Buttonrenew,auto=null;chartowerName[]={'A','B','C'};int盤子數(shù)目,盤寬,盤高;Threadthread;TextArea信息條=null;publicTower(){thread=newThread(this);盤子數(shù)目=5;盤寬=80;盤高=18;信息條=newTextArea(12,12);信息條.setText(null);tower=newHannoiTower(盤子數(shù)目,盤寬,盤高,towerName,信息條);renew=newButton("重新開始");auto=newButton("自動(dòng)演示搬盤子");renew.addActionListener(this);auto.addActionListener(this);add(tower,BorderLayout.CENTER);add(renew,BorderLayout.SOUTH);add(auto,BorderLayout.NORTH);add(信息條,BorderLayout.EAST);addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0);}});setVisible(true);setBounds(60,20,670,540);validate();}publicvoidactionPerformed(ActionEvente){if(e.getSource()==renew){if(!(thread.isAlive())){this.remove(tower);信息條.setText(null);tower=newHannoiTower(盤子數(shù)目,盤寬,盤高,towerName,信息條);add(tower,BorderLayout.CENTER);validate();}else{}}if(e.getSource()==auto){if(!(thread.isAlive())){thread=newThread(this);}try{thread.start();}catch(Exceptioneee){}}}publicvoidrun(){this.remove(tower);信息條.setText(null);tower=newHannoiTower(盤子數(shù)目,盤寬,盤高,towerName,信息條);add(tower,BorderLayout.CENTER);validate();tower.自動(dòng)演示搬運(yùn)盤子(盤子數(shù)目,towerName[0],towerName[1],towerName[2]);}publicstaticvoidmain(Stringargs[]){newTower();}}2./***@(#)HannoiTower.java***@author*@version1.00/12/29*/importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassHannoiTowerextendsJPanelimplementsMouseListener,MouseMotionListener{TowerPointpoint[];intx,y;booleanmove=false;Disk盤子[];intstartX,startY;intstartI;int盤子數(shù)目=0;intwidth,height;chartowerName[]={'A','B','C'};TextArea信息條=null;publicHannoiTower(intnumber,intw,inth,char[]name,TextAreatext){towerName=name;盤子數(shù)目=number;width=w;height=h;信息條=text;setLayout(null);addMouseListener(this);addMouseMotionListener(this);盤子=newDisk[盤子數(shù)目];point=newTowerPoint[3*盤子數(shù)目];intspace=20;for(inti=0;i<盤子數(shù)目;i++){point[i]=newTowerPoint(40+width,100+space,false);space=space+height;}space=20;for(inti=盤子數(shù)目;i<2*盤子數(shù)目;i++){point[i]=newTowerPoint(160+width,100+space,false);space=space+height;}space=20;for(inti=2*盤子數(shù)目;i<3*盤子數(shù)目;i++){point[i]=newTowerPoint(280+width,100+space,false);space=space+height;}inttempWidth=width;intsub=(int)(tempWidth*0.2);for(inti=盤子數(shù)目-1;i>=0;i--){盤子[i]=newDisk(i,this);盤子[i].setSize(tempWidth,height);tempWidth=tempWidth-sub;}for(inti=0;i<盤子數(shù)目;i++){point[i].放置盤子(盤子[i],this);if(i>=1)盤子[i].set上方有盤(true);}}publicvoidpaintComponent(Graphicsg){super.paintComponent(g);g.drawLine(point[0].getX(),point[0].getY(),point[盤子數(shù)目-1].getX(),point[盤子數(shù)目-1].getY());g.drawLine(point[盤子數(shù)目].getX(),point[盤子數(shù)目].getY(),point[2*盤子數(shù)目-1].getX(),point[2*盤子數(shù)目-1].getY());g.drawLine(point[2*盤子數(shù)目].getX(),point[2*盤子數(shù)目].getY(),point[3*盤子數(shù)目-1].getX(),point[3*盤子數(shù)目-1].getY());g.drawLine(point[盤子數(shù)目-1].getX()-width,point[盤子數(shù)目-1].getY(),point[3*盤子數(shù)目-1].getX()+width,point[3*盤子數(shù)目-1].getY());intleftx=point[盤子數(shù)目-1].getX()-width;intlefty=point[盤子數(shù)目-1].getY();intw=(point[3*盤子數(shù)目-1].getX()+width)-(point[盤子數(shù)目-1].getX()-width);inth=height/2;g.setColor(Color.orange);g.fillRect(leftx,lefty,w,h);g.setColor(Color.red);intsize=4;for(inti=0;i<3*盤子數(shù)目;i++){g.fillOval(point[i].getX()-size/2,point[i].getY()-size/2,size,size);}g.drawString(""+towerName[0]+"塔",point[盤子數(shù)目-1].getX(),point[盤子數(shù)目-1].getY()+30);g.drawString(""+towerName[1]+"塔",point[2*盤子數(shù)目-1].getX(),point[盤子數(shù)目-1].getY()+30);g.drawString(""+towerName[2]+"塔",point[3*盤子數(shù)目-1].getX(),point[盤子數(shù)目-1].getY()+30);g.drawString("將全部盤子從"+towerName[0]+"塔搬運(yùn)到"+towerName[1]+"塔或"+towerName[2]+"塔",point[盤子數(shù)目-1].getX(),point[盤子數(shù)目-1].getY()+80);}publicvoidmousePressed(MouseEvente){Disk盤子=null;Rectanglerect=null;if(e.getSource()==this)move=false;if(move==false)if(e.getSource()instanceofDisk){盤子=(Disk)e.getSource();startX=盤子.getBounds().x;startY=盤子.getBounds().y;rect=盤子.getBounds();for(inti=0;i<3*盤子數(shù)目;i++){intx=point[i].getX();inty=point[i].getY();if(rect.contains(x,y)){startI=i;break;}}}}publicvoidmouseMoved(MouseEvente){}publicvoidmouseDragged(MouseEvente){Diskdisk=null;if(e.getSource()instanceofDisk){disk=(Disk)e.getSource();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上方有盤()==false)disk.setLocation(x-disk.getWidth()/2,y-disk.getHeight()/2);}}}publicvoidmouseReleased(MouseEvente){Diskdisk=null;move=false;Rectanglerect=null;if(e.getSource()instanceofDisk){disk=(Disk)e.getSource();rect=disk.getBounds();e=SwingUtilities.convertMouseEvent(disk,e,this);}if(e.getSource()==this){booleancontainTowerPoint=false;intx=0,y=0;intendI=0;if(disk!=null){for(inti=0;i<3*盤子數(shù)目;i++){x=point[i].getX();y=point[i].getY();if(rect.contains(x,y)){containTowerPoint=true;endI=i;break;}}}if(disk!=null&&containTowerPoint){if(point[endI].是否有盤子()==true){disk.setLocation(startX,startY);}else{if(endI==盤子數(shù)目-1||endI==2*盤子數(shù)目-1||endI==3*盤子數(shù)目-1){point[endI].放置盤子(disk,this);if(startI!=盤子數(shù)目-1&&startI!=2*盤子數(shù)目-1&&startI!=3*盤子數(shù)目-1){(point[startI+1].獲取盤子()).set上方有盤(false);point[startI].set有盤子(false);}else{point[startI].set有盤子(false);}}else{if(point[endI+1].是否有盤子()==true){DisktempDisk=point[endI+1].獲取盤子();if((tempDisk.getNumber()-disk.getNumber())>=1){point[endI].放置盤子(disk,this);if(startI!=盤子數(shù)目-1&&startI!=2*盤子數(shù)目-1&&startI!=3*盤子數(shù)目-1){(point[startI+1].獲取盤子()).set上方有盤(false);point[startI].set有盤子(false);tempDisk.set上方有盤(true);}else{point[startI].set有盤子(false);tempDisk.set上方有盤(true);}}else{disk.setLocation(startX,startY);}}else{disk.setLocation(startX,startY);}}}}if(disk!=null&&!containTowerPoint){disk.setLocation(startX,startY);}}}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmouseClicked(MouseEvente){}publicvoid自動(dòng)演示搬運(yùn)盤子(int盤子數(shù),charone,chartwo,charthree){if(盤子數(shù)==1){信息條.append(""+one+"到:"+three+"塔\n");Diskdisk=在塔中獲取最上面盤子(one);intstartI=在塔中獲取最上面盤子位置(one);intendI=在塔中獲取最上面盤子上方位置(three);if(disk!=null){point[endI].放置盤子(disk,this);point[startI].set有盤子(false);try{Thread.sleep(1000);}catch(Exceptionee){}}}else{自動(dòng)演示搬運(yùn)盤子(盤子數(shù)-1,one,three,two); 信息條.append(""+one+"到:"+three+"塔\n");Diskdisk=在塔中獲取最上面盤子(one);intstartI=在塔中獲取最上面盤子位置(one);intendI=在塔中獲取最上面盤子上方位置(three);if(disk!=null){point[endI].放置盤子(disk,this);point[startI].set有盤子(false);try{Thread.sleep(1000);}catch(Exceptionee){}} 自動(dòng)演示搬運(yùn)盤子(盤子數(shù)-1,two,one,three);}}publicDisk在塔中獲取最上面盤子(char塔名){Diskdisk=null;if(塔名==towerName[0]){for(inti=0;i<盤子數(shù)目;i++){if(point[i].是否有盤子()==true){disk=point[i].獲取盤子();break;}}}if(塔名==towerName[1]){for(inti=盤子數(shù)目;i<2*盤子數(shù)目;i++){if(point[i].是否有盤子()==true){disk=point[i].獲取盤子();break;}}}if(塔名==towerName[2]){for(inti=2*盤子數(shù)目;i<3*盤子數(shù)目;i++){if(point[i].是否有盤子()==true){disk=point[i].獲取盤子();break;}}}returndisk;}publicint在塔中獲取最上面盤子上方位置(char塔名){intposition=0;if(塔名==towerName[0]){inti=0;for(i=0;i<盤子數(shù)目;i++){if(point[i].是否有盤子()==true){position=Math.max(i-1,0);break;}}if(i==盤子數(shù)目){position=盤子數(shù)目-1;}}if(塔名==towerName[1]){inti=0;for(i=盤子數(shù)目;i<2*盤子數(shù)目;i++){if(point[i].是否有盤子()==true){position=Math.max(i-1,0);break;}}if(i==2*盤子數(shù)目){position=2*盤子數(shù)目-1;}}if(塔名==towerName[2]){inti=0;for(i=2*盤子數(shù)目;i<3*盤子數(shù)目;i++){if(point[i].是否有盤子()==true){position=Math.max(i-1,0);break;}}if(i==3*盤子數(shù)目){position=3*盤子數(shù)目-1;}}returnposition;}publicint在塔中獲取最上面盤子位置(char塔名){intposition=0;if(塔名==towerName[0]){inti=0;for(i=0;i<盤子數(shù)目;i++){if(point[i].是否有盤子()==true){position=i;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論