版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Java程序設(shè)計課程設(shè)計報告20152016學(xué)年 第二學(xué)期設(shè)計題目: 數(shù)字連連看 學(xué)生姓名: 黃杰 學(xué) 號: 311409060212 專業(yè)班級: 軟件工程1402 指導(dǎo)教師: 姜國權(quán) 2016 年 7 月 2 日目錄1.JAVA程序設(shè)計書31.1簡易連連看31.1.1具體要求31.2本系統(tǒng)設(shè)計的知識點32.功能設(shè)計32.1算法設(shè)計32.2部分模塊流程圖43.代碼設(shè)計54.界面及運行效果,測試工具與測試效果 145.設(shè)計總結(jié) 165.1.程序調(diào)試情況:165.2.本人在程序設(shè)計中感想:166.致謝 16主要參考文獻(xiàn)16:1.1Java程序課程設(shè)計任務(wù)書1.1簡易連連看游戲 本程序基本實現(xiàn)了小游
2、戲連連看的功能,玩家找出游戲中2個相同圖案的方塊,如果它們之間的連接線不多于3根直線,則將其連接起來,就可以成功將圖案相同的方塊消除,否則不會消失,當(dāng)游戲中已沒有滿足條件的圖案時,點擊重列,可重新排序,游戲結(jié)束會跳出所得分?jǐn)?shù),該游戲的特點是與自己競爭,超過自己之前所創(chuàng)紀(jì)錄。1.1.1具體要求(包括技術(shù)要求等):<1>. 該游戲界面為方格類型,由縱6橫7的直線平行垂直交叉組成,分別是6行5列方塊拼接,共有30格小方塊。方塊上隨機分布一些數(shù)字,數(shù)字的要求是至少兩兩相同,位置隨機打亂。<2>. 當(dāng)將相同數(shù)字的方塊連接,但要滿足只能至少單邊無阻礙呈直線趨勢連接,否則無效,若連接
3、一對成功就消失于界面,繼續(xù)游戲,直到游戲結(jié)束,并能返回所得分?jǐn)?shù)。<3>. 重列按鈕(幫助)的功能:游戲過程中,遇到困難難以尋找下一符合要求的一對數(shù)字,可按左下按鈕重置重新排列 方可繼續(xù)游戲。<4>. 退出按鈕:擊左下方的 “退出游戲”按鈕,即可結(jié)束游戲。1.2本系統(tǒng)涉及的知識點:循環(huán),javaGUI組件,函數(shù),數(shù)組,分支等2功能設(shè)計2.1算法設(shè)計本系統(tǒng)需要實現(xiàn)的功能要求:數(shù)字按鈕:1. 設(shè)計填有數(shù)字的按鈕2. 設(shè)計放按鈕的界面圖一,數(shù)字按鈕功能模塊重列,結(jié)束,再來一局:1.對數(shù)據(jù)重新排列2.結(jié)束游戲圖二,三個功能按鈕模塊數(shù)據(jù)記錄:輸出完成游戲所得分?jǐn)?shù)圖三,數(shù)據(jù)記錄模塊鼠
4、標(biāo)操作1. 操作數(shù)字之間的連接2. 對已成功配對的進(jìn)行消除圖四,鼠標(biāo)操作模塊2.2部分模塊流程圖:連連看游戲系統(tǒng)數(shù)據(jù)記錄鼠標(biāo)操作數(shù)字按鈕重列,結(jié)束,再來一局操作數(shù)字間的鏈接(配對)對成功配對的數(shù)字進(jìn)行消除輸出完成游戲所得分?jǐn)?shù)結(jié)束游戲?qū)?shù)據(jù)重新排列設(shè)計鋪放按鈕的界面設(shè)計填有數(shù)字的按鈕3代碼設(shè)計package grame;/* lianliankan總體算法思路:由兩個確定的按鈕。若這兩個按鈕的數(shù)字相等,就開始找它們相連的路經(jīng)。這個找路經(jīng)* 分3種情況:(從下面的這三種情況,我們可以知道,需要三個檢測,這三個檢測分別檢測一條直路經(jīng)。這樣就會有* 三條路經(jīng)。若這三條路經(jīng)上都是空按
5、鈕,那么就剛好是三種直線(兩個轉(zhuǎn)彎點)把兩個按鈕連接起來了)* 1.相鄰* 2. 若不相鄰的先在第一個按鈕的同行找一個空按鈕。1).找到后看第二個按鈕橫向到這個空按鈕* 所在的列是否有按鈕。2).沒有的話再看第一個按鈕到與它同行的那個空按鈕之間是否有按鈕。3).沒有的話,再從* 與第一個按鈕同行的那個空按鈕豎向到與第二個按鈕的同行看是否有按鈕。沒有的話路經(jīng)就通了,可以消了.* 3.若2失敗后,再在第一個按鈕的同列找一個空按鈕。1).找到后看第二個按鈕豎向到這個空按鈕所在的行是否有按鈕。* 2).沒有的話,再看第一個按鈕到與它同列的那個空按鈕之間是否有按鈕。3).沒有的話,再從與第一個按鈕同列的
6、* 那個空按鈕橫向到與第二個按鈕同列看是否有按鈕。沒有的話路經(jīng)就通了,可以消了。* 若以上三步都失敗,說明這兩個按鈕不可以消去。*/import javax.swing.*;import java.awt.*;import java.awt.event.*;public class LianLianKan implements ActionListener JFrame mainFrame; / 主面板Container thisContainer;JPanel centerPanel, southPanel, northPanel; / 子面板JButton diamondsButton =
7、 new JButton65;/ 游戲按鈕數(shù)組JButton exitButton, resetButton, newlyButton; / 退出,重列,重新開始按鈕 JLabel fractionLable = new JLabel("0"); / 實例化分?jǐn)?shù)標(biāo)簽,并初始化為“0”JButton firstButton, secondButton; / 分別記錄兩次被選中的按鈕/ 儲存游戲按鈕位置(這里其實只要6行,5列。但是我們用了8行,7列。是等于在這個面板按鈕的周圍還圍/了一層是0的按鈕,這樣就可以實現(xiàn)靠近面板邊緣的兩個按鈕可以消去) int grid = new
8、int87;static boolean pressInformation = false; / 判斷是否有按鈕被選中int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0, secondMsg = 0, validateLV; / 游戲按鈕的位置坐標(biāo)int i, j, k, n;/ 消除方法控制public void init()mainFrame = new JFrame("JKJ連連看");/實例化thisContainer = mainFrame.getContentPane();/將thisContainer放入mainFra
9、me的內(nèi)容窗口中thisContainer.setLayout(new BorderLayout();/為thisContainer創(chuàng)建Borderlayout布局管理器centerPanel = new JPanel();/實例化southPanel = new JPanel();/實例化northPanel = new JPanel();/實例化thisContainer.add(centerPanel, "Center");/以下三行是為thisContainer容器添加不同方位的新的面板組件thisContainer.add(southPanel, "So
10、uth");thisContainer.add(northPanel, "North");centerPanel.setLayout(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+) diamondsButtoncolsrows = new JButton(String.valueOf(gridcols + 1rows + 1);/將數(shù)組的行
11、數(shù)與列數(shù)各自加一后對應(yīng)元素轉(zhuǎn)化為字符串類型并賦值給對應(yīng)的原始數(shù)組按鈕diamondsButtoncolsrows.addActionListener(this);/為每個網(wǎng)格單元設(shè)置事件監(jiān)聽接口centerPanel.add(diamondsButtoncolsrows);exitButton = new JButton("退出");/實例特定按鈕并添加時間監(jiān)聽接口exitButton.addActionListener(this);resetButton = new JButton("重列");resetButton.addActionListener
12、(this);newlyButton = new JButton("再來一局");newlyButton.addActionListener(this);southPanel.add(exitButton);/將三個特定接口添加到三個確定方位布局的面板組件容器中southPanel.add(resetButton);southPanel.add(newlyButton);fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText();/嵌套,把整形對象Integer轉(zhuǎn)換成基本數(shù)據(jù)類型
13、int(整數(shù))再轉(zhuǎn)化為字符串型。northPanel.add(fractionLable);mainFrame.setBounds(280, 100, 500, 450);/設(shè)置主界面的大小mainFrame.setVisible(true);/設(shè)置可見mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /設(shè)置當(dāng)點擊后界面仍舊停留且不會退出進(jìn)程public void randomBuild() /隨機數(shù)int randoms, cols, rows;for (int twins = 1; twins <= 15; twins
14、+) /一共15對button,30個 button上的數(shù)字randoms = (int) (Math.random() * 25 + 1);/強制轉(zhuǎn)換隨機函數(shù)產(chǎn)生的數(shù)值,并進(jìn)行必要運算避免“0”for (int alike = 1; alike <= 2; alike+) cols = (int) (Math.random() * 6 + 1);/隨機選取連連看中的單元網(wǎng)格rows = (int) (Math.random() * 5 + 1);while (gridcolsrows != 0) /等于0說明這個空格有了button cols = (int) (Math.random(
15、) * 6 + 1);rows = (int) (Math.random() * 5 + 1);this.gridcolsrows = randoms;public void fraction() fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable .getText() + 100);public void reload() int save = new int30;int n = 0, cols, rows;int grid = new int87;for (int i = 0; i <= 6; i+)
16、 for (int j = 0; j <= 5; j+) if (this.gridij != 0) saven = this.gridij;/記下每個button的數(shù)字n+;/有幾個沒有消去的buttonn = n - 1;this.grid = grid;while (n >= 0) /把沒有消去的button重新放一次cols = (int) (Math.random() * 6 + 1);rows = (int) (Math.random() * 5 + 1);while (gridcolsrows != 0) cols = (int) (Math.random() * 6
17、 + 1);rows = (int) (Math.random() * 5 + 1);this.gridcolsrows = saven;n-;mainFrame.setVisible(false);pressInformation = false; / 這里一定要將按鈕點擊信息歸為初始init();for (int i = 0; i < 6; i+) for (int j = 0; j < 5; j+) if (gridi + 1j + 1 = 0)diamondsButtonij.setVisible(false);public void estimateEven(int pl
18、aceX, int placeY, JButton bz) if (pressInformation = false) x = placeX;y = placeY;secondMsg = gridxy;secondButton = bz;pressInformation = true; else x0 = x;y0 = y;fristMsg = secondMsg;firstButton = secondButton;x = placeX;y = placeY;secondMsg = gridxy;secondButton = bz;if (fristMsg = secondMsg &
19、& secondButton != firstButton) 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 (gridx0j = 0) / 判斷和第一個按鈕同行的哪個按鈕為空/如果找到一個為空的,就按列值的三種情況比較第二個按鈕與空按鈕的位置if (y >
20、j) /第二個按鈕在空按鈕右邊f(xié)or (i = y - 1; i >= j; i-) /檢測從第二個按鈕橫向左邊到空格所在列為止是否全是空格if (gridxi != 0) k = 0;break;/存在非空格的就退出,這一退出就不可能k=2了,所以就會到下而215行出同理的判斷列 else k = 1; / K=1說明全是空格通過了第一次驗證,也就是從第二個按鈕橫向左邊到空格所在列為止全是空格if (k = 1) linePassOne();/進(jìn)入第二次驗證,也就是從第一個按鈕到它同行的空格之間的空格判斷if (y < j) / 第二個按鈕在空按鈕左邊f(xié)or (i = y + 1
21、; i <= j; i+) /檢測從第二個按鈕橫向右邊到空格所在列為止是否全是空格if (gridxi != 0) k = 0;break; else k = 1;if (k = 1) linePassOne();if (y = j) /第二個按鈕和空按鈕同列l(wèi)inePassOne();/第三次檢測,檢測確定為空的第j列的那個按鈕豎向到第二個按鈕,看是不是有按鈕if (k = 2) if (x0 = x) /第一,二按鈕在同行remove();if (x0 < x) /第一按鈕在第二按鈕下邊f(xié)or (n = x0; n <= x - 1; n+) /從空按鈕豎向到第二個按鈕所
22、在行是否有按鈕if (gridnj != 0) k = 0;break;/沒有按鈕,說明這條路經(jīng)就通了if (gridnj = 0 && n = x - 1) remove();if (x0 > x) /第一按鈕在第二按鈕上邊f(xié)or (n = x0; n >= x + 1; n-) if (gridnj != 0) k = 0;break;if (gridnj = 0 && n = x + 1) remove();/當(dāng)上面的檢測與第一個按鈕同行的空格按鈕失敗后(不能找到與第二個按鈕的相連路經(jīng)),下面就執(zhí)行/檢測與第一個按鈕同列的空格按鈕for (i
23、= 0; i < 8; i+) if (gridiy0 = 0) / 判斷和第一個按鈕同列的哪個按鈕為空if (x > i) /第二個按鈕在這個空按鈕的下面for (j = x - 1; j >= i; j-) if (gridjy != 0) k = 0;break; else k = 1;if (k = 1) rowPassOne();if (x < i) /第二個按鈕在這個空按鈕的上面 for (j = x + 1; j <= i; j+) if (gridjy != 0) k = 0;break; else k = 1;if (k = 1) rowPass
24、One();if (x = i) /第二個按鈕與這個空按鈕同行 rowPassOne();if (k = 2) if (y0 = y) /第二個按鈕與第一個按鈕同列 remove();if (y0 < y) /第二個按鈕在第一個按鈕右邊 for (n = y0; n <= y - 1; n+) if (gridin != 0) k = 0;break;if (gridin = 0 && n = y - 1) remove();if (y0 > y) /第二個按鈕在第一個按鈕左邊f(xié)or (n = y0; n >= y + 1; n-) if (gridin
25、 != 0) k = 0;break;if (gridin = 0 && n = y + 1) remove();/-for/-else/-xiaopublic void linePassOne() if (y0 > j) / 第一按鈕同行空按鈕在左邊f(xié)or (i = y0 - 1; i >= j; i-) / 判斷第一按鈕同左側(cè)空按鈕之間有沒按鈕if (gridx0i != 0) k = 0;break; else k = 2; / K=2說明通過了第二次驗證if (y0 < j) / 第一按鈕同行空按鈕在右邊f(xié)or (i = y0 + 1; i <=
26、 j; i+) if (gridx0i != 0) k = 0;break; else k = 2;public void rowPassOne() if (x0 > i) /第一個按鈕在與它同列的那個空格按鈕下面for (j = x0 - 1; j >= i; j-) if (gridjy0 != 0) k = 0;break; else k = 2;if (x0 < i) /第一個按鈕在與它同列的那個空格按鈕上面for (j = x0 + 1; j <= i; j+) if (gridjy0 != 0) k = 0;break; else k = 2;public
27、void remove() firstButton.setVisible(false);secondButton.setVisible(false);fraction();pressInformation = false;k = 0;gridx0y0 = 0;gridxy = 0;/具體的消去內(nèi)容,并將已消去的按鈕值賦值為“0”public void actionPerformed(ActionEvent e) /對按鈕事件發(fā)生后的定義if (e.getSource() = newlyButton) int grid = new int87;this.grid = grid;randomBui
28、ld();mainFrame.setVisible(false);pressInformation = false;init();if (e.getSource() = 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() = diamondsButtoncolsrows)estimateEven(cols + 1, rows + 1, diamondsButtoncolsrows); public static void main(String args) /主函數(shù),調(diào)用。LianLianKan
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度醫(yī)療設(shè)備銷售傭金分紅合同范本3篇
- 二零二五版電子商務(wù)知識產(chǎn)權(quán)保護(hù)合同簽署4篇
- 二手房購買定金協(xié)議:2024年標(biāo)準(zhǔn)版版B版
- 二零二五版網(wǎng)絡(luò)信息安全技術(shù)服務(wù)合同范本2篇
- 2025版新產(chǎn)品發(fā)布宣傳片制作服務(wù)協(xié)議2篇
- 2025年度個人之間房屋買賣合同爭議解決條款范本2篇
- 二零二五版月子中心嬰兒早教及產(chǎn)后恢復(fù)服務(wù)合同2篇
- 2025年度個人藝術(shù)品拍賣委托協(xié)議4篇
- 2025年度摩托車轉(zhuǎn)讓與賽車俱樂部賽事運營管理協(xié)議
- JF工程2024年山西建筑安裝協(xié)議范本版B版
- 光伏自發(fā)自用項目年用電清單和消納計算表
- 量子計算在醫(yī)學(xué)圖像處理中的潛力
- 阿里商旅整體差旅解決方案
- 浙江天臺歷史文化名城保護(hù)規(guī)劃說明書
- 邏輯思維訓(xùn)練500題
- 第八講 發(fā)展全過程人民民主PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 實體瘤療效評價標(biāo)準(zhǔn)RECIST-1.1版中文
- 企業(yè)新春茶話會PPT模板
- GB/T 19185-2008交流線路帶電作業(yè)安全距離計算方法
- DIC診治新進(jìn)展課件
- 公路工程施工現(xiàn)場安全檢查手冊
評論
0/150
提交評論