已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
JAVA程序設(shè)計(jì) 課程設(shè)計(jì)(論文)題目: Hannoi塔 遼 寧 工 業(yè) 大 學(xué) 課 程 設(shè) 計(jì) 說 明 書(論 文)目 錄第1章 課程設(shè)計(jì)的目的與要求11.1 課程設(shè)計(jì)目的11.2 課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境11.3 課程設(shè)計(jì)的預(yù)備知識11.4 課程設(shè)計(jì)要求1第2章 課程設(shè)計(jì)內(nèi)容22.1課程設(shè)計(jì)主要內(nèi)容22.2概要設(shè)計(jì)22.2.1自定義類說明22.4詳細(xì)設(shè)計(jì)42.4測試分析142.4.1程序運(yùn)行情況14圖2.4.1-2游戲勝利時界面152.4.2程序異常處理15參考資料17第1章 課程設(shè)計(jì)的目的與要求1.1 課程設(shè)計(jì)目的JAVA程序設(shè)計(jì)是計(jì)算機(jī)相關(guān)專業(yè)的必修專業(yè)基礎(chǔ)課程,其實(shí)踐性、應(yīng)用性很強(qiáng)。實(shí)踐教學(xué)環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。本課程的程序設(shè)計(jì)專題實(shí)際是計(jì)算機(jī)相關(guān)專業(yè)學(xué)生學(xué)習(xí)完JAVA程序設(shè)計(jì)課程后,進(jìn)行的一次全面的綜合訓(xùn)練,JAVA程序設(shè)計(jì)的設(shè)計(jì)目的是加深對理論教學(xué)內(nèi)容的理解和掌握,使學(xué)生較系統(tǒng)地掌握程序設(shè)計(jì)及其在網(wǎng)絡(luò)開發(fā)中的廣泛應(yīng)用,基本方法及技巧,為學(xué)生綜合運(yùn)用所學(xué)知識,利用軟件工程為基礎(chǔ)進(jìn)行軟件開發(fā)、并在實(shí)踐應(yīng)用方面打下一定基礎(chǔ)。1.2 課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境硬件要求能運(yùn)行Windows 9.X操作系統(tǒng)的微機(jī)系統(tǒng)。JAVA程序設(shè)計(jì)語言及相應(yīng)的集成開發(fā)環(huán)境,J2SDK和ECLIPSE開發(fā)工具。1.3 課程設(shè)計(jì)的預(yù)備知識熟悉JAVA語言及ECLIPSE開發(fā)工具。1.4 課程設(shè)計(jì)要求按課程設(shè)計(jì)指導(dǎo)書提供的課題,要求學(xué)生在自行完成各個操作環(huán)節(jié),并能實(shí)現(xiàn)且達(dá)到舉一反三的目的,完成一個項(xiàng)目解決一類問題。要求學(xué)生能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、設(shè)計(jì)和解答類似問題;對此能夠較好地理解和掌握,能夠進(jìn)行簡單分析和判斷;能編寫出具有良好風(fēng)格的程序;掌握J(rèn)AVA程序設(shè)計(jì)的基本技能和面向?qū)ο蟮母拍詈头椒?;了解多線程、安全和網(wǎng)絡(luò)等編程技術(shù)。同時培養(yǎng)學(xué)生進(jìn)行分析問題、解決問題的能力;培養(yǎng)學(xué)生進(jìn)行設(shè)計(jì)分析、設(shè)計(jì)方法、設(shè)計(jì)操作與測試、設(shè)計(jì)過程的觀察、理解和歸納能力的提高。第2章 課程設(shè)計(jì)內(nèi)容2.1課程設(shè)計(jì)主要內(nèi)容我設(shè)計(jì)的Hannoi塔,除了要編寫的6個java文件所給出的類外,還需要java系統(tǒng)提供的一些重要的類,如JButton,JCheckBox等。漢諾塔中有三個座,名字分別為A,B,C。剛開始的時候A塔上有3個大小不等的盤子,這些盤子從座底到座頂按著大小順序依次擺放在A座上。用戶可以用鼠標(biāo)選中盤子,然后通過拖動鼠標(biāo)來移動盤子。釋放鼠標(biāo)來放置該盤子。程序要求用戶在移動盤子的過程中,不允許吧大盤子放置在小盤子的上面,用戶最終要完成的是把A座上的全部盤子移動到B座或C座上。用戶可以通過Hannoi塔界面的提供的改變盤子數(shù)目功能來改變盤子的數(shù)目,同時可以改變盤子的大小以及改變盤子和界面的背景顏色,而且還可以選擇控制背景音樂的播放。用戶可以通過單擊Hannoi塔界面上提供的按鈕,讓程序自動完成把A座上的盤子全部移動到C座上。用戶在移動盤子的過程中,可以隨時單擊Hannoi塔界面上提供的按鈕,重新開始。2.2概要設(shè)計(jì)主要要實(shí)現(xiàn)的功能有: 完成漢諾塔的“手工移動演示”;完成漢諾塔的“自動移動演示”;增加計(jì)時功能,即顯示用戶完成移動盤子所花費(fèi)的時間;用戶可以設(shè)置最大和最小盤子的大小;用戶可以選擇播放和暫停背景音樂;用戶可以設(shè)置盤子的數(shù)目;用戶可以設(shè)置盤子的顏色以及背景顏色;用戶可以將自動移動盤子的文本信息保存到文件;2.2.1自定義類說明* * 類名: JButton* * 作用: 自定義主類, 實(shí)現(xiàn)圓盤的類Disc繼承JButton類* 繼承的父類: Disc類 * * 實(shí)現(xiàn)的接口: 沒有 * * 表1-成員變量表表2.1 JButton成員變量成員變量描述變量類型名稱控制盤子數(shù)目StringJLabel重新開始Stringrenew.setText開始游戲Stringrenew.setText背景顏色Stringbgcolor盤子顏色Stringpzcolor表2-方法表表2 Chesspad方法方法名功能備注fillRect()繪制出矩形區(qū)域構(gòu)造方法g.fillOval()繪制相同數(shù)目點(diǎn)構(gòu)造方法drawString()繪制出A、B、C座構(gòu)造方法setBackground()設(shè)置背景顏色和盤子顏色構(gòu)造方法Timer(int a,Object b)創(chuàng)建一個計(jì)時器構(gòu)造方法stop()停止計(jì)時器計(jì)時接口方法write保存文件接口方法actionPerformed事件處理evaluate評估2.4詳細(xì)設(shè)計(jì)HannoiWindow.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.Timer;import sun.audio.*;import java.util.*;import java.util.Date;import java.io.*;public class HannoiWindow extends JFrame implements ActionListener,ItemListener Tower tower=null; int amountOfDisc=3; char towerName=A,B,C; JButton renew=null; JButton autoButton=null; Timer t; JTextField timeShow,w11,h11,w22,h22; JPanel panel1,panel2; JSplitPane rightPanel,leftPanel; TowerPoint pointD; TowerPoint pointE; JPanel center=new JPanel(); long time1=0,leftTime,leftHour,leftMinute,leftSecond; FlowLayout flow; JComboBox li; JButton bt1,bt2; JPanel max,min; JLabel shumu; JPanel yanse; JButton bgcolor,pzcolor; JCheckBox yinyue; ContinuousAudioDataStream cas; HannoiWindow() tower=new Tower(towerName); tower.setAmountOfDisc(amountOfDisc); tower.setMaxDiscWidth(120); tower.setMinDiscWidth(50); tower.setDiscHeight(16); tower.putDiscOnTower(); t=new Timer(1000,this); t.setInitialDelay(1000); timeShow=new JTextField(10); timeShow.setHorizontalAlignment(SwingConstants.RIGHT); timeShow.setEditable(false); panel1=new JPanel(); panel1.add(new JLabel(用時:); panel1.add(timeShow); panel1.setBorder(BorderFactory.createTitledBorder(計(jì)時器); li=new JComboBox(); li.addItem(3); li.addItem(4); li.addItem(5); li.addItem(6); li.addItem(7); li.addItem(8); li.addItem(9); li.addItem(10); li.addItem(11); li.addItem(12); li.addItem(13); li.addItem(14); li.addItem(15); bt1=new JButton(確定); bt2=new JButton(取消); bt1.addActionListener(this); bt2.addActionListener(this); panel2=new JPanel(); panel2.setLayout(null); shumu=new JLabel(盤子數(shù)目:); panel2.add(shumu); panel2.add(li); panel2.add(bt1); panel2.add(bt2); shumu.setBounds(5,0,80,35); li.setBounds(80,5,80,25); bt1.setBounds(20,290,60,25); bt2.setBounds(90,290,60,25); max=new JPanel(); max.setLayout(null); max.setBorder(BorderFactory.createTitledBorder(最大盤子大小); JLabel w1=new JLabel(寬度:); JLabel h1=new JLabel(高度:); w11=new JTextField(10); h11=new JTextField(10); max.add(w1); max.add(h1); max.add(w11); max.add(h11); w1.setBounds(10,10,50,40); h1.setBounds(10,40,50,35); w11.setBounds(70,20,90,20); h11.setBounds(70,50,90,20); min=new JPanel(); min.setLayout(null); min.setBorder(BorderFactory.createTitledBorder(最小盤子大小); JLabel w2=new JLabel(寬度:); JLabel h2=new JLabel(高度:); w22=new JTextField(10); h22=new JTextField(10); min.add(w2); min.add(h2); min.add(w22); min.add(h22); w2.setBounds(10,10,50,40); h2.setBounds(10,40,50,35); w22.setBounds(70,20,90,20); h22.setBounds(70,50,90,20); panel2.add(max); panel2.add(min); max.setBounds(0,40,185,80); min.setBounds(0,120,185,80); h22.setEditable(false); yanse=new JPanel(); yanse.setLayout(null); yanse.setBorder(BorderFactory.createTitledBorder(顏色); bgcolor=new JButton(背景顏色); pzcolor=new JButton(盤子顏色); bgcolor.addActionListener(this); pzcolor.addActionListener(this); yanse.add(bgcolor); yanse.add(pzcolor); bgcolor.setBounds(40,20,100,25); pzcolor.setBounds(40,50,100,25); panel2.add(yanse); yanse.setBounds(0,200,185,85); JScrollPane spanel=new JScrollPane(panel2); spanel.setBorder(BorderFactory.createTitledBorder(設(shè)置選項(xiàng)); rightPanel=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,spanel,panel1); rightPanel.setDividerLocation(345); tower.setBorder(BorderFactory.createTitledBorder(Hannoi塔); leftPanel=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,rightPanel,tower); leftPanel.setDividerLocation(185); add(leftPanel,BorderLayout.CENTER); renew=new JButton(開始游戲); renew.addActionListener(this); autoButton=new JButton(自動演示); autoButton.addActionListener(this); flow=new FlowLayout(); flow.setAlignment(FlowLayout.LEFT); flow.setHgap(30); yinyue=new JCheckBox(背景音樂,true); yinyue.addItemListener(this); JPanel north=new JPanel(); north.setLayout(flow); north.add(renew); north.add(autoButton); String mess=將全部盤子從+towerName0+座搬運(yùn)到+towerName1+ 座或+towerName2+座; JLabel hintMess=new JLabel(mess,JLabel.CENTER); north.add(hintMess); north.add(yinyue); add(north,BorderLayout.NORTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try FileInputStream fileau = new FileInputStream(beijing.WAV);/背景音樂 AudioStream as = new AudioStream(fileau); AudioData data = as.getData(); cas = new ContinuousAudioDataStream (data); AudioPlayer.player.start(cas); catch (Exception e1) setVisible(true); setBounds(60,60,640,500); validate(); public boolean panduan() boolean b=true; pointD=tower.getpointC(); for(int i=0;ipointD.length;i+) if(pointDi.isHaveDisc()=false) b=true; break; else b=false; return b; public boolean panduan1() boolean b=true; pointE=tower.getpointB(); for(int i=0;ipointE.length;i+) if(pointEi.isHaveDisc()=false) b=true; break; else b=false; return b; public void itemStateChanged(ItemEvent e) if(yinyue.isSelected() AudioPlayer.player.start(cas); else AudioPlayer.player.stop(cas); public void actionPerformed(ActionEvent e) if(e.getSource()=t) boolean b,b1,b2; b=panduan(); b1=panduan1(); if(b=true&b1=false) b2=false; else if(b=false&b1=true) b2=false; else b2=true; if(b2) time1=time1+1000; leftTime=time1/1000; leftHour=leftTime/3600; leftMinute=(leftTime-leftHour*3600)/60; leftSecond=leftTime%60; timeShow.setText(+leftHour+小時+leftMinute+分+leftSecond+秒); else t.stop(); time1=0; String s=恭喜你!你完成了,用時:+leftHour+小時+leftMinute+分+leftSecond+秒; JOptionPane.showMessageDialog(this,s,對話框,JOptionPane.PLAIN_MESSAGE); timeShow.setText(); if(e.getSource()=bgcolor) Color newColor=JColorChooser.showDialog(this,調(diào)色板,bgcolor.getBackground(); if(newColor!=null) tower.setBackground(newColor); if(e.getSource()=pzcolor) Color newColor=JColorChooser.showDialog(this,調(diào)色板,pzcolor.getBackground(); if(newColor!=null) tower.setBG(newColor); if(e.getSource()=bt1) int w1,w2,h; renew.setText(開始游戲); amountOfDisc=Integer.parseInt(String)li.getSelectedItem(); String s=(String)w11.getText(); String s1=(String)w22.getText(); String s2=(String)h11.getText(); if(s.equals() w1=120; else w1=Integer.parseInt(s); if(s1.equals() w2=50; else w2=Integer.parseInt(s1); if(s2.equals() h=16; else h=Integer.parseInt(s2); tower.setMaxDiscWidth(w1); tower.setMinDiscWidth(w2); tower.setDiscHeight(h); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); if(e.getSource()=bt2) w11.setText(); w22.setText(); h11.setText(); else if(e.getSource()=renew) if(renew.getText()=開始游戲) t.start(); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); renew.setText(重新開始); time1=0; t.restart(); else if(e.getSource()=autoButton) time1=0; t.stop(); timeShow.setText(); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); int x=this.getBounds().x+this.getBounds().width; int y=this.getBounds().y; tower.getAutoMoveDisc().setLocation(x,y); tower.getAutoMoveDisc().setSize(350,this.getBounds().height); tower.getAutoMoveDisc().setVisible(true); validate(); 2.4測試分析2.4.1程序運(yùn)行情況圖2.4.1-1 Hannoi塔開始主界面圖2.4.1-2游戲勝利時界面2.4.2程序異常處理當(dāng)大盤子試圖往小盤子上移動的時候,將拋出一個規(guī)則違類異常對象,具體如下: if(pointEi.isHaveDisc()=false) b=true; break; else b=false; return b;第3章 課程設(shè)計(jì)總結(jié)通過著為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度場營銷分公司智慧城市項(xiàng)目合作協(xié)議3篇
- 二零二五版商業(yè)街區(qū)場地租賃合作協(xié)議書6篇
- 2025年度高新技術(shù)產(chǎn)業(yè)常年法律顧問聘用協(xié)議3篇
- 二零二五年度企業(yè)稅收籌劃與稅收籌劃實(shí)施合同3篇
- 二零二五年度出口退稅證明開具及國際金融服務(wù)合同3篇
- 二零二五年度港口碼頭租賃及港口貨物裝卸、倉儲及配送服務(wù)協(xié)議8篇
- 二零二五年度土地承包經(jīng)營權(quán)糾紛調(diào)解合同-@-2
- 2025草原禁牧與水資源保護(hù)管理協(xié)議合同3篇
- 2025年度個人個人借款合同信用評估標(biāo)準(zhǔn)3篇
- 二零二五食用油產(chǎn)品包裝設(shè)計(jì)與印刷合同
- 中考模擬考試化學(xué)試卷與答案解析(共三套)
- 新人教版五年級小學(xué)數(shù)學(xué)全冊奧數(shù)(含答案)
- 風(fēng)電場升壓站培訓(xùn)課件
- 收納盒注塑模具設(shè)計(jì)(論文-任務(wù)書-開題報告-圖紙)
- 博弈論全套課件
- CONSORT2010流程圖(FlowDiagram)【模板】文檔
- 腦電信號處理與特征提取
- 高中數(shù)學(xué)知識點(diǎn)全總結(jié)(電子版)
- GB/T 10322.7-2004鐵礦石粒度分布的篩分測定
- 2023新譯林版新教材高中英語必修一重點(diǎn)詞組歸納總結(jié)
- 蘇教版四年級數(shù)學(xué)下冊第3單元第2課時“常見的數(shù)量關(guān)系”教案
評論
0/150
提交評論