連連看課程設(shè)計(jì)_第1頁(yè)
連連看課程設(shè)計(jì)_第2頁(yè)
連連看課程設(shè)計(jì)_第3頁(yè)
連連看課程設(shè)計(jì)_第4頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第一章引言1.背景游戲 “連連看 ”顧名思義就是找出相關(guān)聯(lián)的東西, 這個(gè)連連看在網(wǎng)上基本是用在小游戲中,就是找出相同的兩樣?xùn)|西, 在一定的規(guī)則之內(nèi)可以做為相關(guān)聯(lián)處理。“連連看 ”的發(fā)展經(jīng)歷了從桌面游戲、在線游戲、社交游戲三個(gè)過(guò)程。游戲 “連連看 ”是源自臺(tái)灣的桌面小游戲, 自從流入大陸以來(lái)風(fēng)靡一時(shí), 也吸引眾多程序員開(kāi)發(fā)出多種版本的 “連連看 ”。這其中,顧方編寫的 “阿達(dá)連連看 ”以其精良的制作廣受好評(píng),這也成為顧方 “阿達(dá)系列軟件 ”的核心產(chǎn)品。并于 2004 年,取得了國(guó)家版權(quán)局的計(jì)算機(jī)軟件著作權(quán)登記證書。隨著 Flash 應(yīng)用的流行,網(wǎng)上出現(xiàn)了多種在線 Flash 版本 “連連看 ”。

2、如 “水晶連連看 ”、“果蔬連連看 ”等,流行的 “水晶連連看 ”以華麗界面吸引了一大批的女性玩家。2008 年,隨著社交網(wǎng)絡(luò)的普及和開(kāi)放平臺(tái)的興起,“連連看 ”被引入了社交網(wǎng)絡(luò)。 “連連看 ”與個(gè)人空間相結(jié)合,被快速的傳播,成為一款熱門的社交游戲,其中以開(kāi)發(fā)者 Jonevey 在 Manyou 開(kāi)放平臺(tái)上推出的 “寵物連連看 ”最為流行。網(wǎng)絡(luò)小游戲、 網(wǎng)頁(yè)游戲越來(lái)越受網(wǎng)民歡迎, 除了玩的方法簡(jiǎn)單外 (不像其他游戲還需要注冊(cè)下載繁瑣過(guò)程) ,很多游戲不乏經(jīng)典。連連看游戲就是典型。不管走到哪個(gè)網(wǎng)頁(yè)游戲網(wǎng)站,連連看游戲總是排在受玩家歡迎排名的前5位,休閑、趣味、益智是連連看玩不厭的精華,且不分男女

3、老少、工薪白領(lǐng),是一款適合大眾的經(jīng)典網(wǎng)絡(luò)、單機(jī)休閑小游戲。游戲連連看,只要將相同的兩張牌用三根以內(nèi)的直線連在一起就可以消除,規(guī)則簡(jiǎn)單容易上手。游戲速度節(jié)奏快,畫面清晰可愛(ài),適合細(xì)心的玩家。豐富的道具和公共模式的加入, 增強(qiáng)游戲的競(jìng)爭(zhēng)性。 多樣式的地圖, 使玩家在各個(gè)游戲水平都可以尋找到挑戰(zhàn)的目標(biāo),長(zhǎng)期地保持游戲的新鮮感。該游戲由 30 張不同的圖片組成,游戲開(kāi)始將會(huì)出現(xiàn)30 張隨機(jī)組合的圖片,在規(guī)則下點(diǎn)擊兩張相同的圖片后圖片將會(huì)消失。 圖片全部消完為游戲成功。 游戲還將設(shè)置退出,再來(lái)一局的按鈕,并實(shí)現(xiàn)該功能,方便用戶進(jìn)行操作。1.1 課程設(shè)計(jì)內(nèi)容( 1)游戲計(jì)分功能當(dāng)消去兩個(gè)相同的圖片后分?jǐn)?shù)將

4、增加 100 分。1( 2)退出功能該功能有一個(gè)“退出”按鈕,當(dāng)按下“退出”按鈕后,將直接退出游戲。( 3)成功完成任務(wù)時(shí)顯示的該功能有,恭喜成功,一個(gè)“再來(lái)一局”的按鈕,當(dāng)按下“再來(lái)一局”按鈕后,圖片將會(huì)重新排列,重新開(kāi)始游戲。( 4)游戲倒計(jì)時(shí)功能在游戲界面的上方有一個(gè)倒計(jì)時(shí)的進(jìn)度條, 增加游戲的難度, 激發(fā)玩家的挑戰(zhàn)興趣。2第二章系統(tǒng)介紹1.連連看游戲規(guī)則1.1 游戲基本規(guī)則用鼠標(biāo)左鍵點(diǎn)擊方塊, 將 2 個(gè)圖案相同的方塊用連線連接起來(lái), 連接線不多于 3 根直線,連接后方塊就會(huì)消失。在規(guī)定的時(shí)間內(nèi)將 30 張圖片全部消除。1.2 操作規(guī)則選擇一個(gè)圖片用鼠標(biāo)左鍵點(diǎn)擊, 圖片會(huì)變色, 然后點(diǎn)

5、擊另一個(gè)同樣圖片, 如果能夠連線就成功消失, 如果不能連線, 第一次選擇的圖片就會(huì)失效, 然后將繼續(xù)尋找符合規(guī)則的圖片。1.3 勝利和失敗把所有的圖片成功消除完畢,則認(rèn)為是本次游戲成功。選擇圖片時(shí)間是有限的, 在規(guī)定的時(shí)間內(nèi), 若未能將圖片全部消除, 則失敗,提醒是否再來(lái)一局。2.游戲流程圖分析流程圖分析如下圖2.1 所示:3開(kāi)始鼠標(biāo)點(diǎn)擊位置的確定判斷是否點(diǎn)擊在圖片方塊?判斷是否已選定一個(gè)方塊?選定第一個(gè)方塊選定第二個(gè)方塊判斷是否可以抵消方塊?抵消方塊消除選定方塊的記錄結(jié)束圖 2.1 游戲流程圖此次設(shè)計(jì)所使用的語(yǔ)言為Java。主要應(yīng)用到 Swing 組件, Java小程序,事4件及接口等。這些

6、接口為游戲的制作提供了便捷的條件, 本系統(tǒng)的主要特點(diǎn)就是運(yùn)用 Swing 組件和事件處理技術(shù), 進(jìn)行界面的繪制, 鼠標(biāo)的操作, 以及積分的顯示等功能。這次通過(guò)連連看的設(shè)計(jì)開(kāi)發(fā)將對(duì)理解 Swing 組件技術(shù)以及事件處理技術(shù)在游戲方面的應(yīng)用起到很大的幫助作用,同時(shí)為掌握 Java 編程技術(shù)及二維休閑游戲設(shè)計(jì)的一般方法打下堅(jiān)實(shí)的基礎(chǔ)。游戲程序設(shè)計(jì)一般都采用面向?qū)ο蟮脑O(shè)計(jì)模式, 提供了一個(gè)簡(jiǎn)單的圖像顯示接口,利用多文檔視圖結(jié)構(gòu)的面向?qū)ο笤O(shè)計(jì)模式。5第三章系統(tǒng)游戲設(shè)計(jì)1.系統(tǒng)分析1.1 游戲系統(tǒng)需求分析主要設(shè)計(jì)目標(biāo):使用 GUI 設(shè)計(jì)連連看,載入圖片信息,進(jìn)行正確分析系統(tǒng)的功能,總載入30 張圖片,且圖

7、片信息成對(duì)出現(xiàn),且可以偶數(shù)項(xiàng)刪除,并具有計(jì)時(shí)等功能游戲中將有“退出”功能,選擇退出命令后程序?qū)⒔K止執(zhí)行,關(guān)閉窗口。還將有“再來(lái)一局”功能,選擇再來(lái)一局命令后程序?qū)?duì)圖片重新排列,重新開(kāi)始游戲。 該游戲還有一個(gè)時(shí)間倒計(jì)時(shí)的進(jìn)度條, 提醒玩家剩余的時(shí)間, 增加游戲的難度。在界面的頂部有計(jì)分功能, 當(dāng)玩家消去圖片后就會(huì)贏得相應(yīng)的分?jǐn)?shù)。1.2 系統(tǒng)開(kāi)發(fā)及運(yùn)行環(huán)境硬件平臺(tái):本游戲?qū)τ布筝^低,基本都可以正常運(yùn)行。軟件平臺(tái):操作系統(tǒng): Windows 系列。開(kāi)發(fā)工具包:。1.3 系統(tǒng)功能主要要求1.系統(tǒng)采用圖片連連看方式.界面美觀 ,用戶使用靈活 ,方便快捷 .2.計(jì)分自動(dòng)完成,提高工作效率。3.用進(jìn)度

8、條進(jìn)行游戲界面的計(jì)時(shí)功能。4.可方便快捷地進(jìn)行下一盤游戲,并且兩盤的分?jǐn)?shù)在規(guī)定的時(shí)間內(nèi)會(huì)疊加起來(lái)。5.操作員可以隨時(shí)退出游戲。6.對(duì)用戶輸入的信息,系統(tǒng)進(jìn)行嚴(yán)格的信息檢驗(yàn),盡可能排除人為的錯(cuò)誤。7.系統(tǒng)最大限度地實(shí)現(xiàn)了易維護(hù)性和易操作性。8.系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。62.系統(tǒng)總體結(jié)構(gòu)連連看是基于 java 基本知識(shí)設(shè)置的一個(gè)小游戲,最中間有連連看的主體構(gòu)成連連看圖片,上面有計(jì)分、時(shí)間條,下面有退出、再來(lái)一局按鍵。一個(gè)標(biāo)準(zhǔn)的連連看系統(tǒng)應(yīng)該包括以下幾大功結(jié)構(gòu):1、鼠標(biāo)操作模塊;2、圖像處理模塊;3、菜單模塊;4、顯示模塊。3. 系統(tǒng)各模塊功能介紹系統(tǒng)各功能模塊實(shí)現(xiàn)的功能為鼠標(biāo)操作模塊: 玩家在玩游

9、戲時(shí)需要運(yùn)用鼠標(biāo)與游戲系統(tǒng)進(jìn)行交互, 這個(gè)模塊的實(shí)現(xiàn) 是運(yùn)用鼠標(biāo)事件觸發(fā)的,在連連看的游戲場(chǎng)景中運(yùn)用鼠標(biāo)進(jìn)行交互的事件主要有兩個(gè),一個(gè) 是用戶點(diǎn)擊游戲場(chǎng)景中的圖片時(shí)觸發(fā)的事件。另外一種是用戶點(diǎn)擊菜單欄上的菜單按鈕時(shí)說(shuō) 觸發(fā)的鼠標(biāo)事件。當(dāng)用戶點(diǎn)擊游戲場(chǎng)景中的圖像塊時(shí)就會(huì)響應(yīng)鼠標(biāo)的 OnLButtonDown 事件,然后進(jìn)行相應(yīng)的邏輯判斷。當(dāng)用戶點(diǎn)擊菜單欄上的菜單命令時(shí)就會(huì)觸發(fā)相應(yīng)的菜單命令對(duì)應(yīng)的相應(yīng)的事件。圖像處理模塊 : 程序運(yùn)行后,用戶通過(guò)游戲菜單的開(kāi)始命令進(jìn)入游戲,在這個(gè)模塊里要把資源文件中的圖片進(jìn)行處理然后加載到游戲場(chǎng)景中這在程序中是通過(guò) DrawMap() 方法實(shí)現(xiàn)的。其中用到的 AP

10、I 函數(shù)主要是是 BitBlt ,他的主要功能是將某一內(nèi)存塊的數(shù)據(jù)傳送到另一內(nèi)存塊,前一內(nèi)存塊被稱為 "源 ",后一內(nèi)存塊被稱為 "目標(biāo) "圖象程序開(kāi)發(fā)者使用 Blit 的函數(shù)在內(nèi)存中將某頁(yè)面上的一幅位圖經(jīng)過(guò)一定的變換轉(zhuǎn)移到另一個(gè)頁(yè)面上。菜單模塊 : 玩家在游戲游戲過(guò)程中隨時(shí)可以通過(guò)選擇不同的菜單命令來(lái)進(jìn)行相應(yīng)的操作,菜單的制作是通過(guò)MFC 框架中多文檔程序的菜單欄來(lái)添加的,菜單包含一下幾個(gè)部分 :(1)游戲菜單中的開(kāi)始、放棄和退出命令。界面顯示模塊 : 游戲場(chǎng)景中界面的顯示包括以下部分: 游戲計(jì)分,剩余時(shí)間、游戲主場(chǎng)景,游戲完成提示界面。這些顯示信息會(huì)

11、隨著游戲的進(jìn)行而動(dòng)態(tài)改變。在連連看游戲中。整個(gè)連連看游戲的系統(tǒng)是在 VC+6.0 開(kāi)發(fā)環(huán)境中進(jìn)行開(kāi)發(fā)的,開(kāi)發(fā)過(guò)程中大量的使用了微軟提供的 API 接口方法,減少了程序代碼的編寫量、提高了編程效率。7第四章系統(tǒng)的具體實(shí)現(xiàn)1.系統(tǒng)主要運(yùn)行界面1.1 運(yùn)行界面運(yùn)行界面如下圖 4.1 所示:圖 4.1 運(yùn)行界面1.2 執(zhí)行界面,進(jìn)入游戲正常運(yùn)行執(zhí)行界面如下圖 4.2 所示:8圖 4.2 執(zhí)行界面1.3 時(shí)間到界面時(shí)間到界面如下圖4.3 所示:9圖 4.3 時(shí)間到界面1.4 贏家界面游戲運(yùn)行成功界面如下圖4.4 所示:圖 4.4 游戲運(yùn)行成功界面101.5 進(jìn)度條界面程序運(yùn)行進(jìn)度條如下圖4.5 所示:圖

12、 4.5 程序運(yùn)行進(jìn)度條2.游戲?qū)崿F(xiàn)代碼2.1 主面板內(nèi)所需要的組件的聲明主面板內(nèi)所需要的組件的聲明代碼如下圖4.6 所示:圖 4.6 組件聲明2.2 填充一個(gè)矩形框,進(jìn)行顯示時(shí)間填充一個(gè)矩形框,進(jìn)行顯示時(shí)間代碼如下圖4.7 所示:圖 4.7 填充矩形框顯示時(shí)間112.3 主面板及各組件初始化主面板及各組件初始化如下圖4.8 所示:圖 4.8 主面板及各組件初始化2.4 創(chuàng)建時(shí)間對(duì)象,每隔100 毫秒刷新一次創(chuàng)建時(shí)間對(duì)象,每隔100 毫秒刷新一次代碼如下圖4.9 所示:圖 4.9 創(chuàng)建時(shí)間對(duì)象2.5 分?jǐn)?shù)代碼。每消除一對(duì)圖片,則分?jǐn)?shù)加上100。代碼如下圖 4.10 所示:12圖 4.10 分?jǐn)?shù)

13、代碼3.消除圖片具體情況當(dāng)點(diǎn)擊兩個(gè)按鈕的圖片一樣時(shí), 運(yùn)用消去算法來(lái)判斷是否可消去, 具體情況如下:3.1 兩次點(diǎn)擊相同圖片相鄰當(dāng)兩次點(diǎn)擊的相同圖片相鄰時(shí),如下圖 4.11 所示,則消去。圖 4.11 點(diǎn)擊圖片相鄰3.2 水平方向消去算法當(dāng)兩次點(diǎn)擊的相同圖片如下圖 4.12 所示,則在水平方向用循環(huán)算法 for (j = 0; j < 7; j+) 判斷,設(shè)第一次選中按鈕坐標(biāo)為 x0 , y0,第二次選中按鈕坐標(biāo)為 x , y,則先找到 grid(x0,j )為 0 的 j ,再判斷 x 水平方向 x 到 j 是否 grid( x,j )都為 0,若是則判斷 x0 水平方向 x0 到 j

14、 是否 grid( x0,j )都為 0,若是,則再判斷 x 和x0,若相等消去,若不等判斷在 j 豎直方向上是否 grid( n,j)(n 為 x 到 x0 之間的數(shù))都為 0,若是則消去。13圖 4.12 水平消去算法圖片3.3 豎直方向消去算法豎直方向消去算法。情況與水平方向基本相同,重點(diǎn)提一下圖片 4.13 所示的情況,其余情況不再重復(fù)描述。 出現(xiàn)下圖情況則會(huì)消去, 消去原理與水平方向消去算法相似。圖 4.13 豎直消去算法圖片14第五章程序清單package c02;class MyPanel extends JPanel int cnt = 0;public void paint(

15、Graphics g) super.paint(g);g.setColor(Color.red);g.fillRect(this.getWidth() - cnt,0, cnt, this.getHeight(); / 填充一個(gè)矩形區(qū)域public boolean isEnd() if (cnt+ > this.getWidth()return true;repaint();return false;public class LianLianKan implements ActionListener JFrame mainFrame; / 主面板MyPanel time;JPanel c

16、enterPanel, southPanel, northPanel; / 3 個(gè)子面板JButton diamondsButton = new JButton65;/ 游戲按鈕數(shù)組JButton exitButton, newlyButton; / 退出,重新開(kāi)始按鈕JLabel scoreLable; / 分?jǐn)?shù)標(biāo)簽 JButton firstButton, secondButton;/ 分別記錄兩次被選中的按鈕Timer timer;int grid = new int87;/ 儲(chǔ)存游戲按鈕位置static boolean pressInformation =false; / 判斷是否有按

17、鈕被選中int sum=0;int x0 = 0, y0 = 0, x = 0, y = 0,fristMsg = 0, secondMsg = 0; / 游戲按鈕的位置坐標(biāo)int i, j, k, n;/消除方法控制/ = 調(diào)用圖片=/private static Icon icons = new ImageIcon6 * 5; /靜態(tài)數(shù)組 icons【】用于存放圖片絕對(duì)地址private static final String imgDir ="f:/meng"static tryFile dir = newFile(imgDir);File imgFiles =dir

18、.listFiles(new FilenameFilter() / 獲取f:/meng 文件中的圖片public booleanaccept(File dir, String name) returnname.toLowerCase().endsWith(".jpg"););for (int i = 0; i < 6 * 5; i+)/獲取 f:/meng 文件中的圖片的絕對(duì)路徑放在icons 數(shù)組中 iconsi = newImageIcon(imgFilesi.getAbsolutePath();/"+iconsi); catch (Exception

19、e) e.printStackTrace();/ 異常處理public void init() /初始化面板mainFrame = new JFrame("JKJ 連連看 ");/ 設(shè)置主面板的名稱為 "JKJ 連連15看"mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/結(jié)束窗體所在的應(yīng)用程序mainFrame.setLayout(newBorderLayout();/ 設(shè)置為 BorderLayout()布局scoreLable= new JLabel("0");c

20、enterPanel = new JPanel();/設(shè)置面板southPanel = new JPanel();northPanel = new JPanel();northPanel.setLayout(newBorderLayout(); /設(shè)置時(shí)間分?jǐn)?shù)面板布局為邊界布局mainFrame.add(centerPanel,"Center");/ 添加組件mainFrame.add(southPanel,"South");mainFrame.add(northPanel,"North");centerPanel.setLayout

21、(newGridLayout(6, 5);/設(shè)置一個(gè)6*5 的網(wǎng)格布局for (int cols = 0; cols < 6;cols+) for (int rows = 0; rows < 5;rows+) / = 設(shè)置圖片 =/diamondsButtoncolsrows = new JButton(iconsgridcols + 1rows + 1);diamondsButtoncolsrows.addActionL istener(this);centerPanel.add(diamondsButtoncolsrows);exitButton = new JButton(&

22、quot; 退出 ");/ 退出按鈕exitButton.addActionListener(this);newlyButton = new JButton("再來(lái)一局 ");/再來(lái)一局按鈕newlyButton.addActionListener(this);southPanel.add(exitButton);/添加退出按鈕southPanel.add(newlyButton);/ 添加再來(lái)一局按鈕scoreLable.setText(String.valueOf(Intege r.parseInt(scoreLable.getText();time = ne

23、w MyPanel();northPanel.add(time,BorderLayout.CENTER);/時(shí)間 -分?jǐn)?shù)面板上在 CENTER 位置添加時(shí)間northPanel.add(scoreLable,BorderLayout.WEST);/時(shí)間 -分?jǐn)?shù)面板上在 WEST 位置添加分?jǐn)?shù) LablemainFrame.setSize(500, 450);/ 設(shè)置主面板的大小mainFrame.setLocationRelativeTo(null);/ 設(shè)置窗口在屏幕中間顯示mainFrame.setVisible(true);/設(shè)置窗口可見(jiàn)public void startt()timer

24、 = new Timer(10, this);/ 創(chuàng)建時(shí)間對(duì)象,每隔 100 毫秒計(jì)時(shí)一次。 init();timer.start();public void randomBuild() /初始化存放游戲按鈕位置的grid 數(shù)組(也就是icon【】下標(biāo) +1)int randoms, cols, rows; /變量定義16for (int twins = 1; twins <= 15;n+;twins+) randoms = (int)(Math.random() *24);for (int alike = 1; alike <=n = n - 1;2; alike+) this.

25、grid = grid; / this出現(xiàn)在cols = (int)實(shí)例方法中,表示使用該方法的當(dāng)前對(duì)象(Math.random() * 6 + 1);while (n >= 0) / while循環(huán)rows = (int)(Math.random() * 5 + 1);cols = (int) (Math.random()while*6+1);(gridcolsrows != 0) rows = (int)cols = (int)(Math.random() * 5 + 1);(Math.random() * 6 + 1);while (gridcolsrows !=rows = (i

26、nt)0)/ 循環(huán)嵌套(Math.random() * 5 + 1);cols = (int)this.gridcolsrows(Math.random() * 6 + 1);= randoms;rows = (int)(Math.random() * 5 + 1);this.gridcolsrows =public void score()/ 方法聲明saven; / this 出現(xiàn)在實(shí)例方法中, 表示使用該方法的當(dāng)前對(duì)象n-;scoreLable.setText(String.valueOf(Intege r.parseInt(scoreLable.getText() + 100);pub

27、lic void reload()/方法聲明int save = new int30; /創(chuàng)建聲明數(shù)組int n = 0, cols, rows; /變量定義int grid = new int87; /創(chuàng)建聲明數(shù)組for (int i = 0; i <= 6; i+) for (int j = 0; j <= 5; j+)mainFrame.setVisible(false);/窗口不可見(jiàn)pressInformation = false; / 這里一定要將按鈕點(diǎn)擊信息歸為初始init();for (int i = 0; i < 6; i+)/ for循環(huán)for (int j

28、 = 0; j < 5; j+)/循環(huán)嵌套if (gridi + 1j + 1= 0)if (this.gridij != 0)diamondsButtonij.setVisible(false);/窗口不可見(jiàn)saven =this.gridij;17public void estimateEven(int placeX, int placeY , JButton bz) / 點(diǎn)擊按鈕觸發(fā)if (pressInformation = false)/選擇語(yǔ)句x = placeX;y = placeY;secondMsg = gridxy;secondButton = bz;pressInf

29、ormation = true; else x0 = x;y0 = y;fristMsg = secondMsg;firstButton =secondButton;x = placeX;y = placeY;secondMsg = gridxy;secondButton = bz;if (fristMsg =secondMsg && secondButton != firstButton)/ 相同的情況下能不能消去。 xiao();public void xiao()if (x0 = x && (y0 = y + 1 |y0 = y - 1)|(y0 = y)

30、 && (x0= x + 1 | x0 = x - 1) )/ 判斷是否相鄰remove(); else for (j = 0; j < 7; j+) if (gridx0j = 0)/判斷第一個(gè)按鈕同行哪個(gè)按鈕為空if (y > j) /如果第二個(gè)按鈕的Y 坐標(biāo)大于空按鈕的Y 坐標(biāo)說(shuō)明第一按鈕在第二按鈕左邊f(xié)or (i = y -1; i >= j; i-)/判斷第二按鈕左側(cè)直到第一按鈕中間有沒(méi)有按鈕if(gridxi != 0) k= 0;break; elsek= 1; /K=1 說(shuō)明通過(guò)了第一次驗(yàn)證if (k = 1)linePassOne();if

31、(y < j) /如果第二個(gè)按鈕的 Y 坐標(biāo)小于空按鈕的 Y 坐標(biāo)說(shuō)明第一按鈕在第二按鈕右邊f(xié)or (i = y +1; i <= j; i+)/判斷第二按鈕左側(cè)直到第一按鈕中間有沒(méi)有按鈕if(gridxi != 0) k= 0;break; elsek18=1;if(gridnj = 0 && n = x + 1) if (k = 1)remove();linePassOne();if (y = j) for (i = 0; i < 8; i+)/列l(wèi)inePassOne();if (gridiy0 = 0) if (x > i) if (k = 2)

32、 for (j = x -if (x0 = x) 1; j >= i; j-) remove();if(gridjy != 0) if (x0 < x) kfor (n = x0;= 0;n <= x - 1; n+) ifbreak;(gridnj != 0) elsek= 0;k= 1;break;ifif (k = 1)(gridnj = 0 && n = x - 1) remove();rowPassOne();if (x < i) if (x0 > x) for (j = x +for (n = x0;1; j <= i; j+)

33、n >= x + 1; n-) ifif(gridjy != 0) (gridnj != 0) kk= 0;= 0;break;break; else19kbreak;= 1;if(gridin = 0 && n = y + 1) if (k = 1)remove();rowPassOne();if (x = i) rowPassOne();public void linePassOne() if (y0 > j)/ 第一按鈕同行空if (k = 2) 按鈕在左邊if (y0 = y) remove();for (i = y0 - 1; i >= j; i-)

34、/判斷第一按鈕同左側(cè)空按鈕之間有沒(méi)按鈕if (y0 < y) for (n = y0;if (gridx0i != 0) n <= y - 1; n+) k = 0;ifbreak;(gridin != 0) else kk = 2;= 0; / K=2 說(shuō)明通過(guò)了第二次驗(yàn)證break;ifif (y0 < j)/ 第一按鈕同行空(gridin = 0 && n = y - 1) 按鈕在與第二按鈕之間remove();for (i = y0 + 1; i <= j; i+)if (gridx0i != 0) k = 0;if (y0 > y) br

35、eak;for (n = y0; else n >= y + 1; n-) k = 2;if(gridin != 0) k= 0;20public void rowPassOne() "恭喜你,你贏if (x0 > i) 了!想再來(lái)一局嗎? ", " 勝利 ",for (j = x0 - 1; j >= i; j-) if (gridjy0 != 0) JOptionPane.YES_NO_OPTION)=k = 0;JOptionPane.OK_OPTION) break;int grid = new else int87;k = 2

36、;this.grid = grid;randomBuild();mainFrame.setVisible(false);/ 窗口不可if (x0 < i) 見(jiàn)for (j = x0 + 1; j <= i; j+)pressInformation =false;if (gridjy0 != 0) init();k = 0;break;timer.start();/ 啟動(dòng)線 else 程k = 2;sum=0; elseSystem.exit(0);public void remove() /消除兩個(gè)按鈕if(gridx0y0 !=0 &&gridxy!= 0)pub

37、lic voidactionPerformed(ActionEvent e) /接口實(shí)現(xiàn)firstButton.setVisible(false); /不可見(jiàn)if (e.getSource() =newlyButton) secondButton.setVisible(false);int grid = newscore();int87;/ 創(chuàng)建數(shù)組/分?jǐn)?shù)加 100this.grid = grid;pressInformation = false;randomBuild();gridx0y0 = 0;gridxy = 0;mainFrame.setVisible(false);/ 窗口不可su

38、m+;見(jiàn)if(sum=15)pressInformation = false;init();timer.stop();timer.start();ifsum=0;(JOptionPane.showConfirmDialog(mainFrame,if (e.getSource() = exitButton)21System.exit(0);動(dòng)線程if (e.getSource() = timer) sum=0;if (time.isEnd() elsetimer.stop();/ 時(shí)間到System.exit(0);的提示if(JOptionPane.showConfirmDialog(main

39、Framfor (int cols = 0; cols < 6;e,cols+) " 時(shí)間到for (int rows = 0; rows < 5;了,o( )o n 要再來(lái)一局嗎? ", " 提示 ",rows+) if (e.getSource() =JOptionPane.YES_NO_OPTION)=diamondsButtoncolsrows)JOptionPane.OK_OPTION) int grid =estimateEven(cols + 1, rows + 1,new int87;diamondsButtoncolsrow

40、s);this.grid = grid;randomBuild();mainFrame.setVisible(false);/ 窗口不可public static void main(String args)見(jiàn)/ 主函數(shù)LianLianKan llk = newpressInformation = false;LianLianKan();/ 創(chuàng)建對(duì)象llk.randomBuild();/ 調(diào)用方法init();llk.startt();timer.start();/ 啟22第六章結(jié)束語(yǔ)本次 java 課程設(shè)計(jì),通過(guò)一學(xué)期的學(xué)習(xí)知識(shí), 成功的設(shè)計(jì)出一個(gè)非常經(jīng)典的連連看小游戲,參考網(wǎng)絡(luò)上的知識(shí),進(jìn)行擴(kuò)展知識(shí)面,本節(jié)只要了解了圖形界面的概念,及其應(yīng)用到實(shí)際界面中,深刻的了解了AWT得基本體系結(jié)構(gòu),SWING組件的功能, Swing組件從功能上分為三種類型 : 頂級(jí)組件,中間組件和基本組件。深刻的了解到它是用 java 純代碼來(lái)實(shí)現(xiàn)的,并且它在不同的平臺(tái)上的運(yùn)行效果

溫馨提示

  • 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)論