java掃雷游戲課程設(shè)計報告-帶有詳細注釋.doc_第1頁
java掃雷游戲課程設(shè)計報告-帶有詳細注釋.doc_第2頁
java掃雷游戲課程設(shè)計報告-帶有詳細注釋.doc_第3頁
java掃雷游戲課程設(shè)計報告-帶有詳細注釋.doc_第4頁
java掃雷游戲課程設(shè)計報告-帶有詳細注釋.doc_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

高級語言程序設(shè)計(2)課程設(shè)計任務(wù)書題 目掃雷游戲程序?qū)W生姓名王大偉學(xué)號201001010117專業(yè)班級計算1001設(shè)計內(nèi)容與要求【問題描述】整個掃雷游戲程序的整體布局為:CardLayout布局, 采用了菜單、按鈕、面板等組件,菜單主要包括開始,選擇級別,按鈕的功能是重新開始新的游戲。【軟件功能】1, 用戶可以玩掃雷游戲并能自定義級別(初等,中等,高等)2, 具有計時功能,即顯示用戶完成移動盤子所花費的時間。【基本要求】 1,掃雷游戲分為初級、中級和高級三個級別。單擊游戲菜單可以選擇“初級”、“中級”和“高級”。2,選擇級別后將出現(xiàn)相應(yīng)級別的掃雷區(qū)域,這時用戶使用鼠標(biāo)左鍵單擊“開始”便啟動計時器。3,用戶要揭開某個方塊,可左鍵單擊它。若所揭方塊下有雷,用戶便輸了這一局,若所揭方塊下無雷,則顯示一個數(shù)字,該數(shù)字代表方塊的周圍的8個方塊中共有多少顆雷。4,如果用戶認為某個方塊下埋著雷,單擊右鍵可以在方塊上標(biāo)識一個用戶認為是雷的圖標(biāo),即給出一個掃雷標(biāo)記。用戶每標(biāo)記出一個掃雷標(biāo)記(無論用戶的標(biāo)記是否正確),程序?qū)@示的剩余雷數(shù)減少一個。5,當(dāng)用戶點中雷時,將有“你輸了”的提示出現(xiàn),勝利時,將有“你贏了”的提示出現(xiàn)。6,源程序中要有充分的注釋,報告中要有詳細的流程圖和文字材料。7,運行的結(jié)果以及圖形用戶界面要進行屏幕拷貝,插入報告中。【提交成果】 1“高級語言程序設(shè)計(2)課程設(shè)計任務(wù)書”和“高級語言程序設(shè)計(2)課程設(shè)計報告”打印件各一份; 2 先將上面兩項內(nèi)容的word文檔,通過電子郵件交到指導(dǎo)教師,待許可后,打印裝袋。起止時間指導(dǎo)教師簽名系(教研室)主任簽名學(xué)生簽名任務(wù)書限定一頁附:課程設(shè)計報告格式高級語言程序設(shè)計(2)課程設(shè)計報告專業(yè) 班級 學(xué)號 姓名(簽名) 完成日期 指導(dǎo)教師(簽名)1、 程序設(shè)計說明書【設(shè)計題目】 掃雷游戲程序【問題描述】 整個掃雷游戲程序的整體布局為:CardLayout布局, 采用了菜單、按鈕、面板等組件,菜單主要包括開始,選擇級別,按鈕的功能是重新開始新的游戲?!拒浖δ堋?用戶可以玩掃雷游戲并能自定義級別(初等,中等,高等);具有計時功能,即顯示用戶完成移動盤子所花費的時間。【算法思想】 1,計算按鈕周圍雷數(shù)。2,隨機分布。掃雷游戲要求在M行N列的網(wǎng)格游戲區(qū)隨即的不上bon個雷,且bon的取值應(yīng)小于M和N的乘積。這可以在一張M*N的網(wǎng)格上通過均勻分布的隨即算法視線。其中bon的網(wǎng)格是雷區(qū),剩下的網(wǎng)格是非雷區(qū)。游戲的目標(biāo)是盡可能快地找到所有的雷區(qū),而不踩到地雷。Java提供了視線隨即算法的類Math,通過Math類的random()方法這可以很方便的實現(xiàn)隨即布雷的功能?!绢惖脑O(shè)計】 (1)initMineArea(int,int,int,int)方法可根據(jù)參數(shù)提供的數(shù)據(jù)設(shè)置雷區(qū)的寬度、高度以及雷區(qū)的級別。(2)actionPerformed(ActionEvent)是MineArea類實現(xiàn)的ActionListener接口中的方法。當(dāng)用戶單擊blockView中的某個方塊時,actionPerformed(ActionEvent)方法負責(zé)執(zhí)行有關(guān)算法,例如,當(dāng)用鼠標(biāo)左鍵單擊方塊上的按鈕后,若該方塊下有雷,actionPerformed(ActionEvent)方法將使用戶輸?shù)舯揪郑粼摲綁K下無雷,actionPerformed(ActionEvent)方法將顯示blockView對象中的標(biāo)簽,該標(biāo)簽上是一個數(shù)字,該數(shù)字代表當(dāng)前方塊的周圍的8個方塊中共有多少顆雷。(3)show()方法是一個遞歸方法。actionPerformed(ActionEvent)方法執(zhí)行時將調(diào)用show方法進行掃雷。(4)mousePressed(MouseEvent)方法是MineArea類實現(xiàn)的MouseListener接口中的方法,當(dāng)用戶按下鼠標(biāo)有件事mousePressed(MouseEvent)方法負責(zé)讓方塊上顯示一個探雷標(biāo)記。(5)inquireWin()方法用來判斷用戶是否掃雷成功,如果成功該方法負責(zé)讓record對話框可見。所謂掃雷成功是指不僅找到了全部的累而且用時最少?!居脩艚缑妗俊境绦蚣记伞窟\用二維數(shù)組來判斷雷區(qū)的每一個按鈕是否有雷。當(dāng)單擊blockView中的某個方塊時,actionPerformed(ActionEvent)方法負責(zé)執(zhí)行有關(guān)算法。當(dāng)按下鼠標(biāo)有件事mousePressed(MouseEvent)方法負責(zé)讓方塊上顯示一個探雷標(biāo)記。inquireWin()方法用來判斷用戶是否掃雷成功,如果成功該方法負責(zé)讓record對話框可見?!灸K劃分及調(diào)用關(guān)系】開始 【模塊流程圖】 定義并初始化MineGrid類獲取相應(yīng)的設(shè)置,并為方塊產(chǎn)生隨即數(shù)字賦值 鼠標(biāo)是否點擊計數(shù)器數(shù)小于等級雷數(shù) 存放賦值雷區(qū),計數(shù)器加1處理周圍信息,并顯示相應(yīng)效果開始【運行說明】運用JDK環(huán)境下或eclipse運行。2、 程序上機調(diào)試報告【語法錯誤及其排除】1,不止一次忘記行程序后面的分號(;)導(dǎo)致程序運行時出現(xiàn)大量錯誤。2,程序后面的注釋要加/,而多次忘記雙斜杠或者直接寫成單斜杠。3,if,else語句不是很熟悉導(dǎo)致了許多不該犯的錯誤。4,將=和=混淆,導(dǎo)致了不少語法錯誤?!舅惴ㄥe誤及其排除】在設(shè)計排雷的過程中,一個雷區(qū)中的一個按鈕的周圍通常是八個相鄰的按鈕而不是四個,致使在程序算法設(shè)計的過程中沒有充分考慮到,最后才加上。還有actionPerformed是MineArea類實現(xiàn)的ActionListener接口中的方法。當(dāng)用戶單擊blockView中的某個方塊時,actionPerformed(ActionEvent)方法負責(zé)執(zhí)行有關(guān)算法,例如,當(dāng)用鼠標(biāo)左鍵單擊方塊上的按鈕后,若該方塊下有雷,actionPerformed(ActionEvent)方法將使用戶輸?shù)舯揪?,若該方塊下無雷,actionPerformed(ActionEvent)方法將顯示blockView對象中的標(biāo)簽,該標(biāo)簽上是一個數(shù)字,該數(shù)字代表當(dāng)前方塊的周圍的8個方塊中共有多少顆雷。此方法開始運用不恰當(dāng),導(dǎo)致若方塊下有雷,依然顯示標(biāo)簽上的數(shù)字,最后運行檢查的時候才發(fā)現(xiàn)錯誤,得以改正。3、 程序測試結(jié)果【輸出結(jié)果】【收獲及體會】這個掃雷游戲是完全模擬微軟系統(tǒng)自帶的掃雷游戲,所以難度是很大,必然在編程過程中也遇到很多問題,有些問題比較簡單但就不知道錯在哪里,有些大問題之道在哪就是不知道怎么辦才好,后來經(jīng)過自己的不斷調(diào)試,這個掃雷游戲終于大功告成。經(jīng)過編寫這個掃雷游戲,我認識到應(yīng)該注意細節(jié)問題,雖然是很小的問題,但可以提高自己編程的能力,而且還可以培養(yǎng)自己編程的嚴謹性,同時還可以為以后的編程積累經(jīng)驗。編寫完這個掃雷游戲,我發(fā)現(xiàn)自己有很多的不足,我想如果讓我來單獨來編寫這個游戲,我感覺能編出來的可能性很小,因為這個游戲涉及到好多算法。感觸最深的就是我們真的要扎扎實實的打基礎(chǔ)!并且我感覺到只要我們自己肯下功夫?qū)W習(xí),我們也可以做出很好的東西,不需要每次都抄襲別人的,只有自己的才是最珍貴的!4、 源程序代碼(注釋)import java.awt.BorderLayout; /導(dǎo)入邊框布局import java.awt.Container; /導(dǎo)入一個容器,也是一個組件,在這個容器里你可以添加其他awt的組件import java.awt.Font; /導(dǎo)入字形,字體import java.awt.GridLayout; /導(dǎo)入網(wǎng)格式布局import java.awt.Insets; / Insets 對象描述容器的邊界區(qū)域。它指定一個容器在它的各個邊界上應(yīng)留出的空白區(qū)間。這個空白可以是一個邊界,一個不顯示區(qū)域或一個標(biāo)題。import java.awt.event.ActionEvent; / ActionEvent是一個類,指示發(fā)生了組件定義的動作的語義事件。 import java.awt.event.ActionListener; / ActionListener用于接收操作事件的偵聽器接口。繼承自EventListener。import java.awt.event.MouseAdapter; /導(dǎo)入鼠標(biāo)監(jiān)聽適配器,負責(zé)對鼠標(biāo)事件進行監(jiān)聽import java.awt.event.MouseEvent; /接口import javax.swing.JButton;/導(dǎo)入按鈕類import javax.swing.JFrame;/導(dǎo)入面板類import javax.swing.JLabel;/導(dǎo)入標(biāo)簽類import javax.swing.JMenu; /菜單import javax.swing.JMenuBar; /用來創(chuàng)建水平菜單欄import javax.swing.JMenuItem; /創(chuàng)建帶有設(shè)置文本或圖標(biāo)的 JMenuItem 菜單項import javax.swing.JPanel; /面板import javax.swing.Timer; / 定時器,功能是在指定的時間間隔內(nèi)反復(fù)觸發(fā)指定窗口的定時器事件。 public class ScanLei1 extends JFrame implements ActionListener/掃雷類繼承了JFrame實現(xiàn)了ActionListener接口private static final long serialVersionUID = 1L; / serialVersionUID 用來表明類的不同版本間的兼容性private Container contentPane; /內(nèi)容面板,每一個JFrame對應(yīng)一個內(nèi)容面板,所有的組件應(yīng)該置于內(nèi)容面板之上private JButton btn; /聲明一個按鈕對象,開始按鈕,對象名為btn,private的意思是把變量或方法聲明成私有的,只有在本類中或本類實例可以訪問,其他類不可以private JButton btns;/聲明一個按鈕數(shù)組 雷區(qū)的每一個雷都是一個按鈕,所有按鈕放置到該數(shù)組中private JLabel b1;/聲明一個標(biāo)簽對象,該標(biāo)簽用于放置剩余的雷的個數(shù)private JLabel b2; /聲明一個標(biāo)簽對象,該標(biāo)簽用于放置已經(jīng)游戲的時間private JLabel b3; /聲明一個標(biāo)簽對象,該標(biāo)簽用于放置游戲的結(jié)果private Timer timer;/聲明一個定時器對象private int row=9; /行,用于指定雷區(qū)的行private int col=9; /列 用于指定雷區(qū)的列private int bon=10; /布雷的個數(shù)private int a;/聲明一個int型的二維數(shù)組,二維數(shù)組的中元素,有以下含義,值為0說明該元素所對應(yīng)的坐標(biāo)所在的按鈕既不是雷又不是周圍有雷的按鈕,如果是100,則說明該元素所對應(yīng)的坐標(biāo)所在的按鈕時雷,如果該元素是10,在說明對應(yīng)的坐標(biāo)所在的按鈕已經(jīng)被單擊過,如果不是以上幾個值,則這個元素的值代表了該按鈕附近可能有幾顆雷。private int b;/聲明int型的變量b 剩余雷的個數(shù)private int a1;/聲明int型數(shù)組a1,放置隨機數(shù),用于確定雷應(yīng)該布到雷區(qū)的位置private JPanel p,p1,p2,p3;/聲明面板public ScanLei1(String title)/定義掃雷的構(gòu)造方法,該構(gòu)造方法有個String類型的參數(shù),參數(shù)名為titlesuper(title);/調(diào)用JFrame的構(gòu)造方法,將title字符串傳入該構(gòu)造方法,這樣的話窗體顯示時,標(biāo)題欄會顯示傳入的title值contentPane=getContentPane();/獲取當(dāng)前JFrame對象的內(nèi)容面板,注意因為ScanLei1類繼承了JFrame對象,所以ScanLei1的對象也是JFrame對象setSize(300,400);/設(shè)置掃雷窗體的大小事300*400像素this.setBounds(400, 100, 400, 500); / setBounds(x,y,width,height); x:組件在容器X軸上的起點 y:組件在容器Y軸上的起點 width:組件的長度 height:組件的高度,在這里的意思就是該窗體打開時,會以屏幕的左上角為原點的水平方向是400像素,垂直方向是100像素的位置顯示,后面設(shè)置的400*500像素指的是窗體的大小,所以最終窗體的大小是400*500像素,覆蓋掉了上面setSize(300,400)的值setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /設(shè)置當(dāng)點擊窗體右上角的X按鈕時的窗體的行為,這里設(shè)置的是當(dāng)點擊這個按鈕時關(guān)閉并退出程序,沒有設(shè)置的話,默認點關(guān)閉時只是隱藏窗體,在后臺進程中還可以看到timer =new Timer(1000,(ActionListener) this);/每隔1000毫秒觸發(fā)一次動作事件的監(jiān)聽a = new introw+2col+2;/創(chuàng)建數(shù)組a,a是一個二維數(shù)組,數(shù)組時11列,11行initGUI();/調(diào)用初始化圖形界面方法public void initGUI()/聲明初始化圖形界面方法 p3=new JPanel();/創(chuàng)建一個面板b=bon;/將bon的值賦值給變量bJMenuBar menuBar=new JMenuBar();/創(chuàng)建一個菜單欄對象JMenu menu1=new JMenu(游戲);/創(chuàng)建游戲菜單JMenu menu2=new JMenu(幫助);/創(chuàng)建幫助菜單JMenuItem mi1=new JMenuItem(初級);/創(chuàng)建初級菜單項JMenuItem mi2 = new JMenuItem(中級);/創(chuàng)建中級菜單項JMenuItem mi3 =new JMenuItem(高級);/創(chuàng)建高級菜單項mi1.addActionListener(this);/為初級菜單項加入動作事件監(jiān)聽器,當(dāng)你單擊鼠標(biāo)左鍵點初級菜單項時會執(zhí)行actionPerformed(ActionEvent e)方法menu1.add(mi1); mi2.addActionListener(this);menu1.add(mi2);mi3.addActionListener(this);menu1.add(mi3);/以上幾個操作類似menuBar.add(menu1);/將游戲菜單加入到菜單欄menuBar.add(menu2);/將幫助菜單加入到菜單欄p3.add(menuBar); /將菜單欄加入到p3面板上去b1=new JLabel(bon+);/創(chuàng)建一個標(biāo)簽,標(biāo)簽的內(nèi)容是bon的值10a1=new intbon;/創(chuàng)建a1數(shù)組,數(shù)組的長度為10btn =new JButton(開始);/創(chuàng)建開始按鈕btn.addActionListener(this);/為開始按鈕加入動作事件監(jiān)聽器b2=new JLabel(0);/創(chuàng)建標(biāo)簽b2,b2的內(nèi)容是0b3=new JLabel();/創(chuàng)建標(biāo)簽b3,b3暫時內(nèi)容為空btns=new JButtonrow*col;/創(chuàng)建一個按鈕數(shù)組,數(shù)組的個數(shù)為row*col,這個程序中就是9*9個,每一個雷的位置就是一個按鈕 p=new JPanel();/創(chuàng)建一個面板p.setLayout(new BorderLayout(); /設(shè)置容器的邊框布局,邊框布局的樣式大致是這樣北東中西南這樣的話這個panl中就可以放置五個組件了contentPane.add(p); / 將panl放置到內(nèi)容面板上去,為什么將一個面板放到內(nèi)容面板,而不是將組件放到內(nèi)容面板上去呢,你可以看到panl上最多可以直接放置五個組件或者容器,但如果將組件或者容器直接放置到內(nèi)容面板上去的話,就只能放一個組件或者容器了。p.add(p3,BorderLayout.NORTH);/p3添加到面板的北邊,也就是在北邊放上了菜單欄,結(jié)果就如圖了游戲 幫助東中西南/combo=new JComboBox(new Object初級,中級,高級 );/加監(jiān)聽/*combo.addItemListener(new ItemListener();*/ p1=new JPanel();/創(chuàng)建一個面板/在那個位置/(FlowLayout)p1.getLayout().setAlignment(FlowLayout.RIGHT); /Alignment列隊p1.add(b1);/將標(biāo)簽b1添加到面板上p1.add(btn);/將開始按鈕添加到面板上p1.add(b2);/將標(biāo)簽b2添加到面板上p1.add(b3);/將標(biāo)簽b3添加到面板上p.add(p3,BorderLayout.NORTH);/這行代碼重復(fù) 還是將菜單欄加入到窗體的北邊p.add(p1,BorderLayout.CENTER);/將帶有一個開始按鈕,三個標(biāo)簽的按鈕加入到窗體的中間位置游戲 幫助東10開始0西南 p2=new JPanel();/創(chuàng)建面板p2p2.setLayout(new GridLayout(row,col,0,0); / GridLayout網(wǎng)格布局,p2設(shè)置為網(wǎng)格布局,該布局的最多可以9行9列,正好可以放置81個雷按鈕,按鈕和按鈕之間的水平間隔,垂直間隔都為0pxfor(int i=0;irow*col;i+)/為按鈕數(shù)組賦值,此處的作用是創(chuàng)建81個雷按鈕對象btnsi=new JButton();/創(chuàng)建雷按鈕btnsi.setMargin(new Insets(0,0,0,0);/設(shè)置雷按鈕與其他組件的間距btnsi.setFont(new Font(null,Font.BOLD,25); /設(shè)置字體字形。黑體25pxbtnsi.addActionListener(this);/為雷按鈕添加監(jiān)聽器,監(jiān)聽動作事件btnsi.addMouseListener(new NormoreMouseEvent();/添加鼠標(biāo)監(jiān)聽器,監(jiān)聽普通鼠標(biāo)事件p2.add(btnsi);/將雷按鈕添加到面板p2上contentPane.add(p,BorderLayout.NORTH);contentPane.add(p2,BorderLayout.CENTER);/將p2添加到窗體的中間游戲 幫助東10開始0西南public void go()/創(chuàng)建go方法setVisible(true);/設(shè)置是否顯示窗體,設(shè)置為true就是顯示當(dāng)前窗體public static void main(String args)/主方法,作用是實例化窗體對象,調(diào)用go方法將窗體顯示到屏幕上來new ScanLei1(掃雷By信息1001樊康).go();/實例化窗體對象,調(diào)用go方法將窗體顯示到屏幕上來public void out(int a,JButton btns,ActionEvent e,int i,int x,int y) int p=1; if(axy=0)/如果一個按鈕既不是雷周圍又沒有雷 axy=10;/將該按鈕對應(yīng)的值設(shè)置為10 btnsi.setEnabled(false);/且這個按鈕不可用狀態(tài) for(int l=y-1;l-1&n-1&mrow) /如果n值和m值在雷區(qū)的范圍之內(nèi) for(int q=0;qrow; if(n+col*q)=(m*col)&(n+col*q)-1&n-1&mcol) for(int q=0;q=(m*col)&(n+col*q)-1&n-1&mcol) for(int q=0;q=(m*col)&(n+col*q)-1&n-1&mcol) for(int q=0;q=(m*col)&(n+col*q)(m+1)*col)/如果該按鈕同一行右側(cè)的按鈕相應(yīng)位置的值既不是雷又沒雷且又不是已經(jīng)點擊過的按鈕,則說明該按鈕周圍有雷 if(axy+1!=0&axy+1!=10) btnsn+col*q.setText(axy+1+); axy+1=10; btnsn+col*q.setEnabled(false); else if(axy+1=0)/如果該按鈕同一行右側(cè)的按鈕相應(yīng)位置的值既不是雷又沒雷,那么遞歸判斷這個按鈕周圍的其他按鈕是什么情況 out(a,btns,e,n+col*q,x,y+1); axy+1=10; btnsn+col*q.setEnabled(false); p=0; public void actionPerformed(ActionEvent e) if(e.getActionCommand()=初級)/如果你單擊的是游戲菜單中初級菜單項row=9;/設(shè)置雷的行數(shù)是9col=9;/列數(shù)是9bon=10;a1=new intbon;b=bon;/setSize(297,377);a = new introw+2col+2;this.remove(p2);/從窗體中央移除雷區(qū)面板timer.stop();/計時器停止b1.setText(10);/設(shè)置標(biāo)簽b1的內(nèi)容為10b2.setText(0);/b2的標(biāo)簽內(nèi)容為0b3.setText();/b3的標(biāo)簽內(nèi)容為空btns=new JButtonrow*col;/創(chuàng)建雷區(qū)雷按鈕數(shù)組 p2=new JPanel();/重新創(chuàng)建面板p2p2.setLayout(new GridLayout(row,col,0,0);/設(shè)置p2為網(wǎng)格布局,同樣還是9行9列,每一個單元格放一個雷for(int i=0;irow*col;i+)btnsi=new JButton( );/為每一個雷按鈕實例化一個按鈕對象btnsi.setMargin(new Insets(0,0,0,0);/設(shè)置雷按鈕的間距btnsi.setFont(new Font(null,Font.BOLD,25);/設(shè)置雷按鈕上文字的字體為黑體 25pxbtnsi.addActionListener(this);/添加動作事件監(jiān)聽器btnsi.addMouseListener(new NormoreMouseEvent();/添加普通按鈕事件監(jiān)聽器p2.add(btnsi);/將雷按鈕放置到p2面板上contentPane.add(p2,BorderLayout.CENTER);將雷區(qū)面板放置到窗體中間/setSize(297,377);this.pack();/設(shè)置窗體的大小為緊緊包容著所有組件for(int i=0;irow*col;i+)btnsi.setText( );/設(shè)置所有雷按鈕的內(nèi)容為空格btnsi.setEnabled(true);/設(shè)置所有雷按鈕為可用狀態(tài)for(int i=0;irow+2;i+)for(int j=0;jcol+2;j+)aij=0;/將二維數(shù)組a的所有元素初始化為0else if(e.getActionCommand()=中級)如果選了游戲菜單中的中級菜單項row=16;/設(shè)置雷區(qū)有16*16個雷 以下代碼作用和選初級時相同,不再注釋了col=16;bon=40;/setSize(33*col,33*row+80);a1=new intbon;a = new introw+2col+2; b=bon;this.remove(p2);timer.stop();b1.setText(40);b2.setText(0);b3.setText();btns=new JButtonrow*col; p2=new JPanel();p2.setLayout(new GridLayout(row,col,0,0);for(int i=0;irow*col;i+)btnsi=new JButton( );btnsi.setMargin(new Insets(0,0,0,0);btnsi.setFont(new Font(null,Font.BOLD,25);btnsi.addActionListener(this);btnsi.addMouseListener(new NormoreMouseEvent();p2.add(btnsi);contentPane.add(p2,BorderLayout.CENTER);this.pack();/setSize(33*col,33*row+80);for(int i=0;irow*col;i+)btnsi.setText();btnsi.setEnabled(true);for(int i=0;irow+2;i+)for(int j=0;jcol+2;j+)aij=0;else if(e.getActionCommand()=高級)/如果選擇的是高級菜單項row=16;/設(shè)置雷區(qū)是16*32 以下代碼和初級游戲代碼作用相同,不在注釋了col=32;bon=99;setSize(33*col,33*row+80);a1=new intbon;a = new introw+2col+2;b=bon;this.remove(p2);timer.stop();b1.setText(99);b2.setText(0);b3.setText();btns=new JButtonrow*col; p2=new JPanel();p2.setLayout(new GridLayout(row,col,0,0);for(int i=0;irow*col;i+)btnsi=new JButton( );btnsi.setMargin(new Insets(0,0,0,0);btnsi.setFont(new Font(null,Font.BOLD,25);btnsi.addActionListener(this);btnsi.addMouseListener(new NormoreMouseEvent();p2.add(btnsi);contentPane.add(p2,BorderLayout.CENTER);/setSize(33*col,33*row+80);this.pack();for(int i=0;irow*col;i+)btnsi.setText();btnsi.setEnabled(true);for(int i=0;irow+2;i+)for(int j=0;jcol+2;j+)aij=0;if(e.getSource()=btn)/如果點擊了開始按鈕timer.start();/計時器開始計時b=bon;b3.setText();/設(shè)置標(biāo)簽b3的內(nèi)容為空/System.out.println(bon);/清空for(int i=0;irow*col;i+)btnsi.setText();/設(shè)置所有的雷區(qū)的雷按鈕的內(nèi)容為空btnsi.setEnabled(true);/設(shè)置所有雷按鈕可用,也就是可以單擊的狀態(tài)for(int i=0;irow+2;i+)for(int j=0;jcol+2;j+)aij=0;/初始化數(shù)組a所有元素為0值/產(chǎn)生隨機數(shù),隨機數(shù)的作用用于布雷時隨機的指定雷所在的位置,for(int i=0;ibon;i+) int p=1;int m=(int)(Math.random()*row*col);/產(chǎn)生一個0-雷按鈕數(shù)的整數(shù)while(p=1) int l=1; int j;for( j=0;ji&l=1;j+)/遍歷數(shù)組,查看m值是否已經(jīng)產(chǎn)生過了,如果數(shù)組a1中已經(jīng)有m值,重新產(chǎn)生m值,如果沒有產(chǎn)生m值,那么將m值賦值給a1的第i+1個元素,這樣就可以保證bon個雷在雷區(qū)的不同位置 if(a1j=m) m=(int)(Math.random()*row*col); l=0; if(j=i)a1i=m;p=0;b1.setText(bon+);b2.setText(0);/布雷 for(int i=0;ibon;i+)在雷區(qū)中布bon個雷,雷對應(yīng)位置的元素指定為100 int x=(a1i/col+1); int y=(a1i%col+1);axy=100;/布雷的位置的值為100 for(int i=0;irow+2;i+) for(int j=0;jcol+2;j+) if(i=0|j=0|i=row+1|j=col+1) aij=0; /指定雷區(qū)四周位置的值為0 for(int i=1;i=row;i+) for(int j=1;j=col;j+) if(aij!=100)/如果aij不等與100,就說明這個位置的雷按鈕不是地雷,是安全的,但是安全的按鈕上通常是要顯示該按鈕附近有幾個雷的,下面的代碼就是判斷該按鈕周圍有幾個雷的,那么這個aij就用來表示對應(yīng)的雷區(qū)按鈕周圍雷的個數(shù) for(int l=j-1;l=600)/如果該值大于600,則定時器停止timer.stop();elset+;/如果t小

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論