


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Java程序設計課程設計報告2015 2016學年 第二學期設計題目:數字連連看學生:黃杰學 號:專業班級:軟件工程1402指導教師:國權2016年7 月2日目錄1. JAVA程序設計書 31.1簡易連連看3具體要求 31.2本系統設計的知識點32. 功能設計32.1算法設計 32.2部分模塊流程圖 43. 代碼設計5144. 界面及運行效果,測試工具與測試效果5. 設計總結165.1. 程序調試情況:165.2. 本人在程序設計中感想:166. 致 16主要參考文獻 16I.IJava程序課程設計任務書1.1簡易連連看游戲本程序基本實現了小游戲連連看的功能,玩家找出游戲中2個相同圖案的方塊,
2、如果它們之間的連接線不多于3根直線,則將其連接起來,就可以成功將圖案相 同的方塊消除,否則不會消失,當游戲中已沒有滿足條件的圖案時,點擊重列, 可重新排序,游戲結束會跳出所得分數,該游戲的特點是與自己競爭,超過自己 之前所創紀錄。具體要求(包括技術要求等):<1>.該游戲界面為方格類型,由縱 6橫7的直線平行垂直交叉組成,分別是 6 行5列方塊拼接,共有30格小方塊。方塊上隨機分布一些數字,數字的要至少 兩兩相同,位置隨機打亂。<2>.當將相同數字的方塊連接,但要滿足只能至少單邊無阻礙呈直線趨勢連接, 否則無效,若連接一對成功就消失于界面,繼續游戲,直到游戲結束,并能返
3、回 所得分數。<3>.重列按鈕(幫助)的功能:游戲過程中,遇到困難難以尋找下一符合要求 的一對數字,可按左下按鈕重置重新排列方可繼續游戲。<4>.退出按鈕:擊左下方的“退出游戲”按鈕,即可結束游戲。1.2本系統涉及的知識點:循環,javaGUI組件,函數,數組,分支等2.功能設計2.1算法設計本系統需要實現的功能要求:數字按鈕:1.設計填有數字的按鈕2.設計放按鈕的界面圖一,數字按鈕功能模塊重列,結束,再來一局: 1對數據重新排列2結束游戲圖二,三個功能按鈕模塊數據記錄:輸出完成游戲所得分數圖三,數據記錄模塊鼠標操作1.操作數字之間的連接2.對已成功配對的進行消除圖四,
4、鼠標操作模塊2.2部分模塊流程圖:設計填有數字的按鈕3代碼設計package grame;/* lia nl ia nka n總體算法思路:由兩個確定的按鈕。若這兩個按鈕的數字相等,就開始找它們相連的路經。這個找路經*分3種情況:(從下面的這三種情況,我們可以知道,需要三個檢測,這三個檢測分別檢測一條直路經。這樣就會有*三條路經。若這三條路經上都是空按鈕,那么就剛好是三種直線(兩個轉彎點)把兩個按鈕連接起來了)* 1.相鄰* 2.若不相鄰的先在第一個按鈕的同行找一個空按鈕。1).找到后看第二個按鈕橫向到這個空按鈕*所在的列是否有按鈕。2).沒有的話再看第一個按鈕到與它同行的
5、那個空按鈕之間是否有按鈕。3).沒有的話,再從*與第一個按鈕同行的那個空按鈕豎向到與第二個按鈕的同行看是否有按鈕。沒有的話路經就通了 ,可以消了 .* 3.若2失敗后,再在第一個按鈕的同列找一個空按鈕。1).找到后看第二個按鈕豎向到這個空按鈕所在的行是否有按鈕。* 2).沒有的話,再看第一個按鈕到與它同列的那個空按鈕之間是否有按鈕。3).沒有的話,再從與第一個按鈕同列的*那個空按鈕橫向到與第二個按鈕同列看是否有按鈕。沒有的話路經就通了,可以消了 *若以上三步都失敗,說明這兩個按鈕不可以消去。*/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;/ 游戲按鈕數組JButtonexitButton,resetButton, newlyButton; / 退岀,重列,重新開始按鈕JLabel fractionLable= new JLabel( &quo
7、t;0"); / 實例化分數標簽,并初始化為"0”JButton firstButton, secondButton ; / 分別記錄兩次被選中的按鈕/儲存游戲按鈕位置(這里其實只要6行,5列。但是我們用了 8行,7列。是等于在這個面板按鈕的周圍還圍/ 了一層是0的按鈕,這樣就可以實現靠近面板邊緣的兩個按鈕可以消去)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 ; / 游戲按鈕的位置坐標int i , j , k, n;/消除方法控制public void init()mainFrame = newJFrame( "JKJ 連連看 ”);/ 實例化thisContainer = mainFrame.getContentPane(); / 將thisContainer 放入 mainFrame的容窗口中 thisContainer .setLayout( new BorderLayout(); / 為 thisContainer 倉U建 Borderlayout 布局管 理器centerPanel =
9、new JPanel(); / 實例化southPanel = new JPanel();/ 實例化northPanel = new JPanel();/ 實例化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 面板設置網格式布局管理器(6行5列)的容納組建的網格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); /將數組的行數與列數各自加一后對應元素轉化為字符串類型并賦值給對應的原始數組按鈕diamondsButton cols rows.addAct
11、ionListener(this ); / 為每個網格單元設置事件監聽接口centerPanel .add( diamondsButton cols rows);exitButton = new JButton("退岀”);/實例特定按鈕并添加時間監聽接口exitButton.addActionListener(this );resetButton= new JButton("重列");resetButton .addActionListener(this );newlyButton = new JButton("再來一局");newlyBut
12、ton .addActionListener(this );southPanel .add( exitButton ); /將三個特定接口添加到三個確定方位布局的面板組件容器中 southPanel .add( resetButton );southPanel .add( newlyButton );fractionLable.setText(String. valueOf (Integer.parseInt (fractionLable.getText();/嵌套,把整形對象Integer轉換成基本數據類型int (整數)再轉化為字符串型。/設置主界面的大小EXIT_ON_CLOSEnort
13、hPanel .add( fractionLable);mainFrame.setBounds(280, 100, 500, 450); mainFrame.setVisible(true ); / 設置可見mainF rame.setDefaultCloseOperati on( JFrame.設置當點擊后界面仍舊停留且不會退岀進程public void randomBuild() / 隨機數intrandoms, cols , rows;for ( int twi ns = 1; twi ns <= 15; twins +) / 一共 15對 butt on,30 個 butt on
14、 上的數字 randoms = ( int ) (Math. random() * 25 + 1);/強制轉換隨機函數產生的數值,并進行必要運算避免“ 0”for ( int alike = 1; alike <= 2; alike +) cols= (int)(Math.random() * 6 +1);/隨機選取連連看中的單元網格rows= (int)(Math.random() * 5 +1);while( gridcols rows != 0) /等于0 說明這個空格有了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 ; / 記下每個 button 的數字 n+; /有幾個沒有消去的 butt onn = n - 1;this . grid = gridwhile ( n >= 0) /把沒有消去的 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(這里一定要將按鈕點擊信息歸為初始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、 /判斷和第一個按鈕同行的哪個按鈕為空/如果找到一個為空的,就按列值的三種情況比較第二個按鈕與空按鈕的位置if ( y > j) /第二個按鈕在空按鈕右邊for ( i = y - 1; i >= j ; i -) /檢測從第二個按鈕橫向左邊到空格所在列為止是否全是空格if ( grid x i != 0) k = 0;break ;/存在非空格的就退岀,這一退岀就不可能k=2了,所以就會到下而 215行岀同理的判斷列 else k = 1; / K=1說明全是空格通過了第一次驗證,也就是從第二個按鈕橫向左邊到空格所在列為止全是 空格if ( k = 1) linePassOne(
21、);/進入第二次驗證,也就是從第一個按鈕到它同行的空格之間的空格判斷if ( y < j) /第二個按鈕在空按鈕左邊for (i = y + 1; i <= j ; i +) /檢測從第二個按鈕橫向右邊到空格所在列為止是否全是空格if ( grid x i != 0) k = 0;break ; else k = 1;if ( k = 1) lin ePassO ne();if ( y = j ) /第二個按鈕和空按鈕同列lin ePassO ne();/第三次檢測,檢測確定為空的第j列的那個按鈕豎向到第二個按鈕,看是不是有按鈕if ( k = 2) if ( x0 = x) /第
22、一,二按鈕在同行remove();if ( x0 < x) /第一按鈕在第二按鈕下邊for ( n = x0; n <= x - 1;n +) /從空按鈕豎向到第二個按鈕所在行是否有按鈕if ( grid n j != 0) k = 0;break ;/沒有按鈕,說明這條路經就通了if ( grid n j = 0 && n = x - 1) remove();if ( x0 > x) /第一按鈕在第二按鈕上邊for (n = x0; n >= x + 1;n -) if ( grid n j != 0) k = 0;break ;if ( grid n
23、 j = 0 && n = x + 1) remove();/當上面的檢測與第一個按鈕同行的空格按鈕失敗后(不能找到與第二個按鈕的相連路經),下面就執行/檢測與第一個按鈕同列的空格按鈕for ( i = 0; i < 8; i +) if ( grid i y0 = 0) /判斷和第一個按鈕同列的哪個按鈕為空if (x > i) /第二個按鈕在這個空按鈕的下面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) /第二個按鈕在這個空按鈕的上面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 ) /第二個按鈕與這個空按鈕同行rowPass On e();if ( k = 2) if ( y0 = y) /第二個按鈕與第一個按鈕同列remove();if ( y0 < y) /第二個按鈕在第一個按鈕右邊for (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) /第二個按鈕在第一個按鈕左邊for (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 ) /第一按鈕同行空按鈕在左邊for ( i = y
26、0 - 1; i >= j ; i -) /判斷第一按鈕同左側空按鈕之間有沒按鈕if ( grid x0 i != 0) k = 0;break ; else k = 2; / K=2說明通過了第二次驗證if ( y0 < j ) /第一按鈕同行空按鈕在右邊for ( i = y0 + 1; i <= j ; i +) if ( grid x0 i != 0) k = 0;break ; else k = 2;public void rowPassOne() if ( x0 > i ) /第一個按鈕在與它同列的那個空格按鈕下面for ( j = x0 - 1; j &g
27、t;= i ; j -) if ( grid j yO != 0) k = 0;break ; else k = 2;if ( x0 < i ) /第一個按鈕在與它同列的那個空格按鈕上面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) /對按鈕事件發生后的定義/具體的消去容,并將已消去的按鈕值賦值為“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 ) / 主函數,調用。Lia nLia nKanllk = new Lia nLia nKan();llk .randomBuild();llk .init();4. 界面及運行效果、測試工具與測試效果電"« ETH&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 神經網絡在金融領域洞察生成的應用研究-洞察闡釋
- 2024年南充市順慶區考調工作人員真題
- 提價通知函范本
- 河南鄭州白求恩醫學專修學院招聘筆試真題2024
- 深圳市大鵬新區區屬公辦中小學招聘教師筆試真題2024
- 2025年鼻咽癌的術后護理試題
- 漢語教案課時教學設計
- 制造業大宗原材料品類管理策略
- 實踐報告模板及范文
- 2025至2030年中國手持式血氧測試儀行業投資前景及策略咨詢報告
- 法律文化-形考作業4-國開(ZJ)-參考資料
- DB34-T 4010-2021 水利工程外觀質量評定規程-高清現行
- 教育信息化工作領導小組會議記錄
- (完整版)裝飾裝修工程監理規劃
- 鏈板回轉式格柵除污機出廠檢驗報告(LF型)
- 汽油柴油一書一簽
- IBMDS存儲的配置步驟
- 北京自住房家庭購房申請表
- 籃球行進間體前變向換手運球說課
- 更換法蘭閥門操作
- 招商工作外資存在問題及下步措施3頁
評論
0/150
提交評論