連連看-JAVA課程設(shè)計(jì)報(bào)告.doc

上傳人:good****022 文檔編號:116526702 上傳時(shí)間:2022-07-05 格式:DOC 頁數(shù):16 大小:1.07MB
收藏 版權(quán)申訴 舉報(bào) 下載
連連看-JAVA課程設(shè)計(jì)報(bào)告.doc_第1頁
第1頁 / 共16頁
連連看-JAVA課程設(shè)計(jì)報(bào)告.doc_第2頁
第2頁 / 共16頁
連連看-JAVA課程設(shè)計(jì)報(bào)告.doc_第3頁
第3頁 / 共16頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《連連看-JAVA課程設(shè)計(jì)報(bào)告.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《連連看-JAVA課程設(shè)計(jì)報(bào)告.doc(16頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、 課程設(shè)計(jì)2013 2014學(xué)年第二學(xué)期設(shè)計(jì)題目 連連看游戲程序 院(系) 專 業(yè) 軟件工程 班 級 學(xué)號 學(xué)生姓名 設(shè)計(jì)時(shí)間 2014年6月24日2014年6月27日指導(dǎo)教師 提交日期 2014年6月27日 目錄目錄21. 課程設(shè)計(jì)的目的與要求31.1課程設(shè)計(jì)目的與要求31.2課程設(shè)計(jì)內(nèi)容31.3課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境31.4課程設(shè)計(jì)的預(yù)備知識(shí)42.系統(tǒng)模塊結(jié)構(gòu)圖42.1 模塊設(shè)計(jì)52.1.1 菜單控制模塊52.1.2 算法模塊62.1.3 界面顯示模塊83.詳細(xì)設(shè)計(jì)83.1總體算法思路83.2代碼實(shí)現(xiàn)94.小結(jié)181. 課程設(shè)計(jì)的目的與要求1.1課程設(shè)計(jì)目的與要求1.掌握J(rèn)AVA語言中面向?qū)ο?/p>

2、的概念,并能在程序中熟練運(yùn)用。2. 了解面向?qū)ο蟪绦蛟O(shè)計(jì)(JAVA)的基本概念以及運(yùn)用面向?qū)ο蠹夹g(shù)進(jìn)行程序設(shè)計(jì)的基本思想。 3. 能正確編寫和調(diào)試JAVA程序。4. 了解在JAVA環(huán)境下進(jìn)行程序設(shè)計(jì)的基本思想和方法。1.2課程設(shè)計(jì)內(nèi)容1.設(shè)計(jì)一個(gè)連連看的游戲程序。2.在JAVA環(huán)境下,將上述程序使用GUI、數(shù)據(jù)結(jié)構(gòu)等內(nèi)容完成3.設(shè)計(jì)思路:(1)界面設(shè)計(jì)1)初始測試界面可以考慮使用簡單的按鈕來代表連連看游戲中的圖標(biāo)。2)布局可以考慮使用GRID方式。3)設(shè)計(jì)菜單選擇連連看難度等內(nèi)容,具體可參照QQ連連看,也可自定義。4)考慮完善界面,例如動(dòng)畫等。(2)代碼設(shè)計(jì)1)本設(shè)計(jì)的核心為練練看算法的設(shè)計(jì),

3、可以考慮數(shù)據(jù)結(jié)構(gòu)中的圖的遍歷章節(jié),合理設(shè)計(jì)算法,將界面中各按鈕的分布映射入數(shù)學(xué)矩陣進(jìn)行路徑規(guī)劃。(可以上網(wǎng)搜索相關(guān)算法)。2)完成連連看游戲的圖形、算法等代碼的設(shè)計(jì)。4.實(shí)驗(yàn)步驟(包括操作方法、數(shù)據(jù)處理)(1)界面設(shè)計(jì)(2)算法設(shè)計(jì)(3)代碼設(shè)計(jì)1.3課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境硬件要求能運(yùn)行Windows xp/7操作系統(tǒng)的微機(jī)系統(tǒng)。JAVA程序設(shè)計(jì)語言及相應(yīng)的集成開發(fā)環(huán)境, ECLIPSE開發(fā)工具。1.4課程設(shè)計(jì)的預(yù)備知識(shí)熟悉JAVA語言及ECLIPSE開發(fā)工具。2.系統(tǒng)模塊結(jié)構(gòu)圖根據(jù)對“連連看”游戲的分析,該游戲可分為三個(gè)模塊:算法模塊、界面顯示模塊、控制模塊。如下圖3-1所示: 連連看游戲界面顯

4、示模塊控制模塊算法模塊2.1 模塊設(shè)計(jì)2.1.1控制模塊(1). 開始游戲 (2). 游戲結(jié)束后重新開始 (3). 提示 (4). 不能操作后自動(dòng)洗牌如下圖3-5所示消圖提示洗牌結(jié)束判斷開始游戲2.1.2 算法模塊在檢驗(yàn)兩個(gè)方塊能否消掉的時(shí)候,我們要讓兩個(gè)方塊同時(shí)滿足兩個(gè)條件才行,就是兩者配對并且連線成功。如圖4-3所示分 3 種情況:從下面的這三種情況,我們可以知道,需要三個(gè)檢測,這三個(gè)檢測分別檢測一條直路經(jīng)。這樣就會(huì)有三條路經(jīng)。若這三條路經(jīng)上都是空按鈕,那么就剛好是三種直線(兩個(gè)轉(zhuǎn)彎點(diǎn))把兩個(gè)按鈕連接起來了。 (1)、相鄰 (2)、兩個(gè)按鈕分別橫向延伸,如果有一條縱向線能將延伸區(qū)相連則可消

5、除(3)、若(2)失敗兩個(gè)按鈕分別縱向延伸,如果有一條橫向線能將延伸區(qū)相連則可消除若以上三步都失敗,說明這兩個(gè)按鈕不可以消去。具體判斷流程見下圖(4)、圖片成對加載并打亂將圖片成對的顯示在場景中,并打亂主要用的是Map類。在該類中,用了一個(gè)數(shù)組以數(shù)字標(biāo)記的形式來記錄加載的圖片是哪種圖片,在每次加載圖片的時(shí)候是一張圖片連續(xù)加載四次,以保證加載圖片成兩對。然后用數(shù)組的隨機(jī)方法將數(shù)組打亂。 (5)、判斷兩圖是否能夠相連兩圖能相連的所有情況: 2.1.3 界面顯示模塊1、提示2、統(tǒng)計(jì)分?jǐn)?shù)3、提示是否進(jìn)行下一局或者退出3.詳細(xì)設(shè)計(jì)3.1總體算法思路由兩個(gè)確定的按鈕。若這兩個(gè)按鈕的數(shù)字相等,就開始找它們相

6、連的路經(jīng)。這個(gè)找路經(jīng) * 分3種情況:(從下面的這三種情況,我們可以知道,需要三個(gè)檢測,這三個(gè)檢測分別檢測一條直路經(jīng)。這樣就會(huì)有 * 三條路經(jīng)。若這三條路經(jīng)上都是空按鈕,那么就剛好是三種直線(兩個(gè)轉(zhuǎn)彎點(diǎn))把兩個(gè)按鈕連接起來了) * 1.相鄰 * * 2. 若不相鄰的先在第一個(gè)按鈕的同行找一個(gè)空按鈕。1).找到后看第二個(gè)按鈕橫向到這個(gè)空按鈕 * 所在的列是否有按鈕。2).沒有的話再看第一個(gè)按鈕到與它同行的那個(gè)空按鈕之間是否有按鈕。3).沒有的話,再從 * 與第一個(gè)按鈕同行的那個(gè)空按鈕豎向到與第二個(gè)按鈕的同行看是否有按鈕。沒有的話路經(jīng)就通了,可以消了. * * 3.若2失敗后,再在第一個(gè)按鈕的同列

7、找一個(gè)空按鈕。1).找到后看第二個(gè)按鈕豎向到這個(gè)空按鈕所在的行是否有按鈕。 * 2).沒有的話,再看第一個(gè)按鈕到與它同列的那個(gè)空按鈕之間是否有按鈕。3).沒有的話,再從與第一個(gè)按鈕同列的 * 那個(gè)空按鈕橫向到與第二個(gè)按鈕同列看是否有按鈕。沒有的話路經(jīng)就通了,可以消了。 * * 若以上三步都失敗,說明這兩個(gè)按鈕不可以消去。 *3.2代碼實(shí)現(xiàn)1、MainFrame.javajbPrompt.addActionListener(new ActionListener()/提示按鈕增加行為監(jiān)聽Overridepublic void actionPerformed(ActionEvent arg0) po

8、int sp = new point();point ep = new point();game.Tip(sp, ep);jlbsp.x-1sp.y-1.setBorder(BorderFactory.createLineBorder(Color.black);jlbep.x-1ep.y-1.setBorder(BorderFactory.createLineBorder(Color.black); /每提示一次減10分game.deleteScore(10); ); class event implements ActionListener/消除兩個(gè)相同的圖片,若相同,則分?jǐn)?shù)加20分;若不同

9、,不作反應(yīng) Overridepublic void actionPerformed(ActionEvent arg0) /重寫接口方法/獲取點(diǎn)擊位置myJButton jlbNext = (myJButton) arg0.getSource(); /輸出坐標(biāo)System.out.println(+jlbNext.xPoint+,+jlbNext.yPoint+); if(flag)if(game.linkOK(jlbFront.xPoint+1,jlbFront.yPoint+1,jlbNext.xPoint+1,jlbNext.yPoint+1)if(game.needRandom()gam

10、e.random(); /通過needRandom()調(diào)用,實(shí)現(xiàn)抖動(dòng),并且重置界面for(int i=0;i10;i+)for(int j=0;j10;j+)if(game.getMyMap()i+1j+1!=0)jlbij.setIcon(imageIcongame.getMyMap()i+1j+1-1); if(game.isWin()/贏的時(shí)候,提示按鈕功能被屏蔽jbPrompt.setEnabled(false); int n =JOptionPane.showConfirmDialog(null, 你的分?jǐn)?shù)是+game.getScore()+是否想再來一局?,提示,JOptionPa

11、ne.YES_NO_OPTION); /再來一局if(n = JOptionPane.YES_OPTION)MainFrame f = new MainFrame();f.setTitle(連連看);f.setVisible(true);f.setSize(800, 850); class myJButton extends JButton/實(shí)現(xiàn)按鈕和圖片的比例吻合的功能/* * */private static final long serialVersionUID = 1L;public int xPoint;public int yPoint;public myJButton(Scale

12、Icon imageIcon)super(imageIcon);public void setPoint(int x,int y)xPoint = x;yPoint = y;class ScaleIcon implements Icon/初始化圖標(biāo)的大小 /private BufferedImage i = null; private Icon icon = null; public ScaleIcon(Icon icon) this.icon = icon; Override public int getIconHeight() return icon.getIconHeight(); Ov

13、erride public int getIconWidth() return icon.getIconWidth(); public void paintIcon(Component c, Graphics g, int x, int y) float wid = c.getWidth(); float hei = c.getHeight(); int iconWid = icon.getIconWidth(); int iconHei = icon.getIconHeight(); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(

14、RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.scale(wid / iconWid, hei / iconHei); icon.paintIcon(c, g2d, 0, 0); 2、Game.javapublic boolean startGame()for(i=0;isizeX*sizeY;i+)int x = (int) (Math.random()*100);int a = savei;savei = savex;savex = a;/產(chǎn)生100張圖片for(i=0

15、;isizeX*sizeY;i+)mapi = savei;/把圖片的坐標(biāo)信息放入map里for(i=1;i=sizeX;i+)for(j=1;j=sizeY;j+)myMapij=map(i-1)*sizeY+(j-1);/把圖片的坐標(biāo)信息放入map里return true;public boolean canLink(int startX,int startY,int endX,int endY,int step,int di)/判斷能否消除int ss;for(int i=0;i4;i+) /橫向搜索int x = startX + dir0i; /縱向搜索int y = startY

16、+ dir1i; /若沒搜索到,則跳出if(xsizeX+1|ysizeY+1)continue;ss = step;if(i!=di)ss = step +1;if(ss =3)continue;if(x=endX&y=endY)return true;elseif(myMapxy = 0 & usedxy != true)usedxy = true;if(canLink(x,y,endX,endY,ss,i)return true;usedxy = false;elsecontinue;return false; public boolean linkOK(int startX,int s

17、tartY,int endX,int endY)/是否能消掉圖片for(int i=0;iused.length;i+)for(int j=0;jusedi.length;j+)usedij=false;/初始時(shí),定義所有圖片都沒用過usedstartXstartY = true;if(myMapstartXstartY!=myMapendXendY)return false;if(canLink(startX,startY,endX,endY,-1,-1)myMapstartXstartY = 0;myMapendXendY = 0;GameScore += 20;return true;e

18、lsereturn false; public boolean Tip(point sp,point ep)/實(shí)現(xiàn)提示功能for(sp.x=1;sp.xsizeX;sp.x+)for(sp.y=1;sp.y=sizeY;sp.y+)for(ep.x=1;ep.x=sizeX;ep.x+)for(ep.y=1;ep.y=sizeY;ep.y+)for(int i=0;iused.length;i+)for(int j=0;jusedi.length;j+)usedij=false;/初始時(shí),定義所有圖片都沒用過usedsp.xsp.y = true;/改變圖片的used屬性,說明此圖片已經(jīng)消除掉

19、了if(myMapsp.xsp.y=0|myMapep.xep.y=0|(sp.x=ep.x&sp.y=ep.y)|myMapsp.xsp.y!=myMapep.xep.y)continue;/若地圖里myMapsp.xsp.y或者myMapsp.xsp.y沒有圖片,則跳出當(dāng)前循環(huán)if(canLink(sp.x,sp.y,ep.x,ep.y,-1,-1)return true;/如果能消除,則返回truereturn false;public void random()/實(shí)現(xiàn)抖動(dòng)重置功能 for(int i=1;i=sizeX;i+) for(int j=1;jsizeY;j+) if (my

20、Mapij!=0) myMapij = save-k; public boolean needRandom()/判斷是否需要抖動(dòng)重置,如果無法通過提示功能消除圖片,則就需要抖動(dòng)重置/point startPoint = null;/point endPoint = null;if(Tip(new point(),new point()return false;return true; 3、Point.javapackage game;public class point public int x,y;4.小結(jié)以上介紹了連連看游戲的設(shè)計(jì)代碼及代碼實(shí)現(xiàn),游戲任務(wù)不設(shè)定限定實(shí)際。所有的圖標(biāo)均采用數(shù)組的形式組織。由于時(shí)間有限,這個(gè)程序還有需要改進(jìn)的地方,比如:添加聲音,圖案比較單一,并且還可以增加一些功能,例如:設(shè)定限定時(shí)間,暫停,重來一局,等。這次實(shí)訓(xùn)讓我學(xué)到了許多東西,不僅在理論上對JAVA有了全新的認(rèn)識(shí),在實(shí)踐方面也有了一定的提高。理論與實(shí)踐相結(jié)合,真正做到學(xué)以致用,這次實(shí)訓(xùn)對我以后學(xué)習(xí),找工作有重大意義。相信這些寶貴經(jīng)驗(yàn)會(huì)成為我以后的重要基石。這次實(shí)訓(xùn)讓我明白了團(tuán)隊(duì)合作的重要性,保證了效率和準(zhǔn)確性。 16 / 16

展開閱讀全文
溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!