java課程設(shè)計(jì)報(bào)告書_第1頁(yè)
java課程設(shè)計(jì)報(bào)告書_第2頁(yè)
java課程設(shè)計(jì)報(bào)告書_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余18頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、Java程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告2015 2016學(xué)年 第二學(xué)期設(shè)計(jì)題目:數(shù)字連連看學(xué)生:黃杰學(xué) 號(hào):專業(yè)班級(jí):軟件工程1402指導(dǎo)教師:國(guó)權(quán)2016年7 月2日目錄1. JAVA程序設(shè)計(jì)書 31.1簡(jiǎn)易連連看3具體要求 31.2本系統(tǒng)設(shè)計(jì)的知識(shí)點(diǎn)32. 功能設(shè)計(jì)32.1算法設(shè)計(jì) 32.2部分模塊流程圖 43. 代碼設(shè)計(jì)5144. 界面及運(yùn)行效果,測(cè)試工具與測(cè)試效果5. 設(shè)計(jì)總結(jié)165.1. 程序調(diào)試情況:165.2. 本人在程序設(shè)計(jì)中感想:166. 致 16主要參考文獻(xiàn) 16I.IJava程序課程設(shè)計(jì)任務(wù)書1.1簡(jiǎn)易連連看游戲本程序基本實(shí)現(xiàn)了小游戲連連看的功能,玩家找出游戲中2個(gè)相同圖案的方塊,

2、如果它們之間的連接線不多于3根直線,則將其連接起來(lái),就可以成功將圖案相 同的方塊消除,否則不會(huì)消失,當(dāng)游戲中已沒(méi)有滿足條件的圖案時(shí),點(diǎn)擊重列, 可重新排序,游戲結(jié)束會(huì)跳出所得分?jǐn)?shù),該游戲的特點(diǎn)是與自己競(jìng)爭(zhēng),超過(guò)自己 之前所創(chuàng)紀(jì)錄。具體要求(包括技術(shù)要求等):<1>.該游戲界面為方格類型,由縱 6橫7的直線平行垂直交叉組成,分別是 6 行5列方塊拼接,共有30格小方塊。方塊上隨機(jī)分布一些數(shù)字,數(shù)字的要至少 兩兩相同,位置隨機(jī)打亂。<2>.當(dāng)將相同數(shù)字的方塊連接,但要滿足只能至少單邊無(wú)阻礙呈直線趨勢(shì)連接, 否則無(wú)效,若連接一對(duì)成功就消失于界面,繼續(xù)游戲,直到游戲結(jié)束,并能返

3、回 所得分?jǐn)?shù)。<3>.重列按鈕(幫助)的功能:游戲過(guò)程中,遇到困難難以尋找下一符合要求 的一對(duì)數(shù)字,可按左下按鈕重置重新排列方可繼續(xù)游戲。<4>.退出按鈕:擊左下方的“退出游戲”按鈕,即可結(jié)束游戲。1.2本系統(tǒng)涉及的知識(shí)點(diǎn):循環(huán),javaGUI組件,函數(shù),數(shù)組,分支等2.功能設(shè)計(jì)2.1算法設(shè)計(jì)本系統(tǒng)需要實(shí)現(xiàn)的功能要求:數(shù)字按鈕:1.設(shè)計(jì)填有數(shù)字的按鈕2.設(shè)計(jì)放按鈕的界面圖一,數(shù)字按鈕功能模塊重列,結(jié)束,再來(lái)一局: 1對(duì)數(shù)據(jù)重新排列2結(jié)束游戲圖二,三個(gè)功能按鈕模塊數(shù)據(jù)記錄:輸出完成游戲所得分?jǐn)?shù)圖三,數(shù)據(jù)記錄模塊鼠標(biāo)操作1.操作數(shù)字之間的連接2.對(duì)已成功配對(duì)的進(jìn)行消除圖四,

4、鼠標(biāo)操作模塊2.2部分模塊流程圖:設(shè)計(jì)填有數(shù)字的按鈕3代碼設(shè)計(jì)package grame;/* lia nl ia nka n總體算法思路:由兩個(gè)確定的按鈕。若這兩個(gè)按鈕的數(shù)字相等,就開始找它們相連的路經(jīng)。這個(gè)找路經(jīng)*分3種情況:(從下面的這三種情況,我們可以知道,需要三個(gè)檢測(cè),這三個(gè)檢測(cè)分別檢測(cè)一條直路經(jīng)。這樣就會(huì)有*三條路經(jīng)。若這三條路經(jīng)上都是空按鈕,那么就剛好是三種直線(兩個(gè)轉(zhuǎn)彎點(diǎn))把兩個(gè)按鈕連接起來(lái)了)* 1.相鄰* 2.若不相鄰的先在第一個(gè)按鈕的同行找一個(gè)空按鈕。1).找到后看第二個(gè)按鈕橫向到這個(gè)空按鈕*所在的列是否有按鈕。2).沒(méi)有的話再看第一個(gè)按鈕到與它同行的

5、那個(gè)空按鈕之間是否有按鈕。3).沒(méi)有的話,再?gòu)?與第一個(gè)按鈕同行的那個(gè)空按鈕豎向到與第二個(gè)按鈕的同行看是否有按鈕。沒(méi)有的話路經(jīng)就通了 ,可以消了 .* 3.若2失敗后,再在第一個(gè)按鈕的同列找一個(gè)空按鈕。1).找到后看第二個(gè)按鈕豎向到這個(gè)空按鈕所在的行是否有按鈕。* 2).沒(méi)有的話,再看第一個(gè)按鈕到與它同列的那個(gè)空按鈕之間是否有按鈕。3).沒(méi)有的話,再?gòu)呐c第一個(gè)按鈕同列的*那個(gè)空按鈕橫向到與第二個(gè)按鈕同列看是否有按鈕。沒(méi)有的話路經(jīng)就通了,可以消了 *若以上三步都失敗,說(shuō)明這兩個(gè)按鈕不可以消去。*/import javax.swing.*;import java.awt.*;import java

6、.awt.event.*;public class LianLianKanimplements ActionListener JFrame mainFrame; / 主面板Container thisC on tai nerJPanelcenterPanel,southPanel, northPanel ;/ 子面板JButtondiamondsButton =new JButton65;/ 游戲按鈕數(shù)組JButtonexitButton,resetButton, newlyButton; / 退岀,重列,重新開始按鈕JLabel fractionLable= new JLabel( &quo

7、t;0"); / 實(shí)例化分?jǐn)?shù)標(biāo)簽,并初始化為"0”JButton firstButton, secondButton ; / 分別記錄兩次被選中的按鈕/儲(chǔ)存游戲按鈕位置(這里其實(shí)只要6行,5列。但是我們用了 8行,7列。是等于在這個(gè)面板按鈕的周圍還圍/ 了一層是0的按鈕,這樣就可以實(shí)現(xiàn)靠近面板邊緣的兩個(gè)按鈕可以消去)int grid = new int 87;staticboolea n press In formati on= false ; / 判斷是否有按鈕被選中int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0,second

8、Msg = 0, validateLV ; / 游戲按鈕的位置坐標(biāo)int i , j , k, n;/消除方法控制public void init()mainFrame = newJFrame( "JKJ 連連看 ”);/ 實(shí)例化thisContainer = mainFrame.getContentPane(); / 將thisContainer 放入 mainFrame的容窗口中 thisContainer .setLayout( new BorderLayout(); / 為 thisContainer 倉(cāng)U建 Borderlayout 布局管 理器centerPanel =

9、new JPanel(); / 實(shí)例化southPanel = new JPanel();/ 實(shí)例化northPanel = new JPanel();/ 實(shí)例化thisCo nta in er.add( cen terPa nel , "Ce nter" ); / 以下三行是為 thisCo nta in er容器添加不同方位的新的面板組件thisContainer.add( southPanel , "South");thisContainer.add( northPanel , "North");centerPanel .set

10、Layout( new GridLayout(6, 5);/ 為 centerPanel 面板設(shè)置網(wǎng)格式布局管理器(6行5列)的容納組建的網(wǎng)格for ( int cols = 0;cols < 6;cols +) for ( int rows = 0;rows < 5;rows +) diamondsButton cols rows = new JButton(String.valueOf (grid cols + 1 rows + 1); /將數(shù)組的行數(shù)與列數(shù)各自加一后對(duì)應(yīng)元素轉(zhuǎn)化為字符串類型并賦值給對(duì)應(yīng)的原始數(shù)組按鈕diamondsButton cols rows.addAct

11、ionListener(this ); / 為每個(gè)網(wǎng)格單元設(shè)置事件監(jiān)聽接口centerPanel .add( diamondsButton cols rows);exitButton = new JButton("退岀”);/實(shí)例特定按鈕并添加時(shí)間監(jiān)聽接口exitButton.addActionListener(this );resetButton= new JButton("重列");resetButton .addActionListener(this );newlyButton = new JButton("再來(lái)一局");newlyBut

12、ton .addActionListener(this );southPanel .add( exitButton ); /將三個(gè)特定接口添加到三個(gè)確定方位布局的面板組件容器中 southPanel .add( resetButton );southPanel .add( newlyButton );fractionLable.setText(String. valueOf (Integer.parseInt (fractionLable.getText();/嵌套,把整形對(duì)象Integer轉(zhuǎn)換成基本數(shù)據(jù)類型int (整數(shù))再轉(zhuǎn)化為字符串型。/設(shè)置主界面的大小EXIT_ON_CLOSEnort

13、hPanel .add( fractionLable);mainFrame.setBounds(280, 100, 500, 450); mainFrame.setVisible(true ); / 設(shè)置可見mainF rame.setDefaultCloseOperati on( JFrame.設(shè)置當(dāng)點(diǎn)擊后界面仍舊停留且不會(huì)退岀進(jìn)程public void randomBuild() / 隨機(jī)數(shù)intrandoms, cols , rows;for ( int twi ns = 1; twi ns <= 15; twins +) / 一共 15對(duì) butt on,30 個(gè) butt on

14、 上的數(shù)字 randoms = ( int ) (Math. random() * 25 + 1);/強(qiáng)制轉(zhuǎn)換隨機(jī)函數(shù)產(chǎn)生的數(shù)值,并進(jìn)行必要運(yùn)算避免“ 0”for ( int alike = 1; alike <= 2; alike +) cols= (int)(Math.random() * 6 +1);/隨機(jī)選取連連看中的單元網(wǎng)格rows= (int)(Math.random() * 5 +1);while( gridcols rows != 0) /等于0 說(shuō)明這個(gè)空格有了butt oncols = ( int ) (Math.random() * 6 + 1);rows= (in

15、t)(Math.random() * 5 +1);this . grid cols rows = randoms; public void fraction() fractionLable.setText(String. valueOf (Integer.parseInt (fractionLable100);.getText() +public void reload() int save = new int 30;int n = 0, cols , rows;int grid = new int 87;for( inti= 0;i<= 6;i +) for(intj= 0;j<

16、= 5;j +) if ( this . grid i j != 0) save n = this . grid i j ; / 記下每個(gè) button 的數(shù)字 n+; /有幾個(gè)沒(méi)有消去的 butt onn = n - 1;this . grid = gridwhile ( n >= 0) /把沒(méi)有消去的 button重新放一次cols = ( int ) (Math. rows = ( int ) (Math. while ( grid cols cols = ( int ) (Math. rows = ( int ) (Math.ran dom() * 6 + 1);ran dom(

17、) * 5 + 1); rows != 0) ran dom() * 6 + 1);ran dom() * 5 + 1);this . grid cols rows = save n;n-;mainFrame.setVisible( false ); press In formati on = false ; / ini t();for ( inti=0;i<6; i +) for ( intj=0;j<5; j +) if ( gridi+1j+1 = 0)diamondsButton ij.setVisible(這里一定要將按鈕點(diǎn)擊信息歸為初始false );public vo

18、id estimateEven(int placeX , int placeY , JButtonbz) if ( press In formati on= false ) x = placeX ;y = placeY ;sec on dMsg = grid x y;sec on dButt on = bz;press In formati on = true ; else x0 = x;yO = y;fristMsg = sec on dMsg;firstButt on= sec on dButt on ;x = placeX ;y = placeY ;sec on dMsg = grid

19、x y;sec on dButt on = bz;if ( fristMsg = sec on dMsg && sec on dButt on 匸 firstButt on) xiao();public void xiao() /相同的情況下能不能消去。if ( x0 = x && ( y0 = y + 1 | y0 = y - 1)| ( x0 = x + 1 | x0 = x - 1) && (y0 = y) /判斷是否相鄰remove。;else for ( j = 0; j < 7; j +) if ( grid x0 j = 0)

20、 /判斷和第一個(gè)按鈕同行的哪個(gè)按鈕為空/如果找到一個(gè)為空的,就按列值的三種情況比較第二個(gè)按鈕與空按鈕的位置if ( y > j) /第二個(gè)按鈕在空按鈕右邊f(xié)or ( i = y - 1; i >= j ; i -) /檢測(cè)從第二個(gè)按鈕橫向左邊到空格所在列為止是否全是空格if ( grid x i != 0) k = 0;break ;/存在非空格的就退岀,這一退岀就不可能k=2了,所以就會(huì)到下而 215行岀同理的判斷列 else k = 1; / K=1說(shuō)明全是空格通過(guò)了第一次驗(yàn)證,也就是從第二個(gè)按鈕橫向左邊到空格所在列為止全是 空格if ( k = 1) linePassOne(

21、);/進(jìn)入第二次驗(yàn)證,也就是從第一個(gè)按鈕到它同行的空格之間的空格判斷if ( y < j) /第二個(gè)按鈕在空按鈕左邊f(xié)or (i = y + 1; i <= j ; i +) /檢測(cè)從第二個(gè)按鈕橫向右邊到空格所在列為止是否全是空格if ( grid x i != 0) k = 0;break ; else k = 1;if ( k = 1) lin ePassO ne();if ( y = j ) /第二個(gè)按鈕和空按鈕同列l(wèi)in ePassO ne();/第三次檢測(cè),檢測(cè)確定為空的第j列的那個(gè)按鈕豎向到第二個(gè)按鈕,看是不是有按鈕if ( k = 2) if ( x0 = x) /第

22、一,二按鈕在同行remove();if ( x0 < x) /第一按鈕在第二按鈕下邊f(xié)or ( n = x0; n <= x - 1;n +) /從空按鈕豎向到第二個(gè)按鈕所在行是否有按鈕if ( grid n j != 0) k = 0;break ;/沒(méi)有按鈕,說(shuō)明這條路經(jīng)就通了if ( grid n j = 0 && n = x - 1) remove();if ( x0 > x) /第一按鈕在第二按鈕上邊f(xié)or (n = x0; n >= x + 1;n -) if ( grid n j != 0) k = 0;break ;if ( grid n

23、 j = 0 && n = x + 1) remove();/當(dāng)上面的檢測(cè)與第一個(gè)按鈕同行的空格按鈕失敗后(不能找到與第二個(gè)按鈕的相連路經(jīng)),下面就執(zhí)行/檢測(cè)與第一個(gè)按鈕同列的空格按鈕for ( i = 0; i < 8; i +) if ( grid i y0 = 0) /判斷和第一個(gè)按鈕同列的哪個(gè)按鈕為空if (x > i) /第二個(gè)按鈕在這個(gè)空按鈕的下面for ( j = x - 1; j >= i ; j -) if ( grid j y != 0) k = 0;break ; else k = 1;if ( k = 1) rowPass On e()

24、;if ( x < i) /第二個(gè)按鈕在這個(gè)空按鈕的上面for ( j = x + 1; j <= i ; j +) if ( grid j y != 0) k = 0;break ; else k = 1;if ( k = 1) rowPass On e();if ( x = i ) /第二個(gè)按鈕與這個(gè)空按鈕同行rowPass On e();if ( k = 2) if ( y0 = y) /第二個(gè)按鈕與第一個(gè)按鈕同列remove();if ( y0 < y) /第二個(gè)按鈕在第一個(gè)按鈕右邊f(xié)or (n = yO; n <= y - 1;n+) if ( grid i

25、n != 0) k = 0;break ;if ( grid i n = 0 && n = y - 1) remove。; if ( y0 > y) /第二個(gè)按鈕在第一個(gè)按鈕左邊f(xié)or (n = y0; n >= y + 1; n _) if ( grid i n != 0) k = 0;break ;if ( grid i n = 0 && n = y + 1) remove();/for/else/xiao public void lin ePass On e() if ( y0 > j ) /第一按鈕同行空按鈕在左邊f(xié)or ( i = y

26、0 - 1; i >= j ; i -) /判斷第一按鈕同左側(cè)空按鈕之間有沒(méi)按鈕if ( grid x0 i != 0) k = 0;break ; else k = 2; / K=2說(shuō)明通過(guò)了第二次驗(yàn)證if ( y0 < j ) /第一按鈕同行空按鈕在右邊f(xié)or ( i = y0 + 1; i <= j ; i +) if ( grid x0 i != 0) k = 0;break ; else k = 2;public void rowPassOne() if ( x0 > i ) /第一個(gè)按鈕在與它同列的那個(gè)空格按鈕下面for ( j = x0 - 1; j &g

27、t;= i ; j -) if ( grid j yO != 0) k = 0;break ; else k = 2;if ( x0 < i ) /第一個(gè)按鈕在與它同列的那個(gè)空格按鈕上面for ( j = x0 + 1; j <= i ; j +) if ( grid j y0 != 0) k = 0;break ; else k = 2; public void remove。firstButton.setVisible( false );sec on dButt on .setVisible( false ); fractio n();press In formati on=

28、false ;k = 0;grid x0 y0 = 0;grid x y = 0;e) /對(duì)按鈕事件發(fā)生后的定義/具體的消去容,并將已消去的按鈕值賦值為“0”public void acti on Performed(Acti on Eve nt if ( e.getSource() =newlyButton ) int grid = new int 87;this . grid = grid ;ran domBuild();mainFrame.setVisible( false );press In formati on= false ;ini t();if ( e.getSource()

29、=exitButton)System. exit (0);if ( e.getSource() =resetButton )reload();for ( int cols = 0;cols < 6;cols +) for ( int rows = 0;rows < 5;rows +) if ( e.getSource() =diamondsButton cols rows)estimateEve n( cols + 1, rows + 1,diam on dsButt on cols rows);public static void main(Stringargs ) / 主函數(shù),調(diào)用。Lia nLia nKanllk = new Lia nLia nKan();llk .randomBuild();llk .init();4. 界面及運(yùn)行效果、測(cè)試工具與測(cè)試效果電"« ETH&

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論