java 掃雷游戲課程設計與實現(xiàn)_第1頁
java 掃雷游戲課程設計與實現(xiàn)_第2頁
java 掃雷游戲課程設計與實現(xiàn)_第3頁
java 掃雷游戲課程設計與實現(xiàn)_第4頁
java 掃雷游戲課程設計與實現(xiàn)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、畢業(yè)設計目錄前言11 . 設計目的32 . 設計內(nèi)容及要求32.1 掃雷游戲的基本要求33 需求分析43.1 掃雷棋盤的布局設計43.2 雷區(qū)的設計43.2.1成員變量53.2.2方法53.3 排行榜設計64 總體設計74.1 總體功能圖74.2 總體流程圖84.3雷區(qū)設計流程圖94.4 排行榜設計流程圖105 代碼實現(xiàn)115.1 類之間關系圖115.2 運行效果圖125.3 程序打包發(fā)布過程156 總結16參考文獻167 主要源代碼17前言隨著大學的擴招,在校大學生的人數(shù)也劇增。老師教學任務繁重,加上各種教學設計、評估,老師工作量繁重不說,卻往往事倍功半,教學質(zhì)量沒有明顯的提高。同時,如何設

2、計考核的題目,使學生的知識得到總結、歸納和應用,并且使零散的知識條理化和系統(tǒng)化,這也是老師們重點思考的方向,但如此一來,在繁重的教學任務之外,分散了老師們不少的精力。與傳統(tǒng)考試模式相比,在線考試具有無可比擬的優(yōu)越性,它可以將傳統(tǒng)考試過程中的試卷組織、審定印制、傳送收集、登記發(fā)放、評判歸檔各個環(huán)節(jié)縮小到一至兩個環(huán)節(jié),幾乎屏蔽了所有人工直接干預考試活動的可能性,不但能夠節(jié)約大量的時日、人力、物力與財力,而且還可以大幅度增加考試成績的客觀性和公正性。所以本次課程設計充分利用現(xiàn)有的計算機軟、硬件和網(wǎng)絡資源實現(xiàn)無紙化考試以避免傳統(tǒng)手工考試的不足,力求一種高效率的考試系統(tǒng),來減輕教師負擔,為學生提供更好的

3、學習平臺,同時提高自己系統(tǒng)開發(fā)的能力。同時可以對試卷的難度系數(shù)、考試的時間、參考的對象等考試規(guī)則等進行量化。操作簡便快捷,解決了考試程序繁蕪,教師耗時費力的問題。學生可以在線自測,系統(tǒng)按照考試規(guī)則隨機出題;也可以參加統(tǒng)一考試,試題由系統(tǒng)按照老師制定的規(guī)則生成統(tǒng)一的一份試卷。同時教師可以針對某個考試,查看平均分、最高分、最低分、及格率、排名、答卷等信息。在系統(tǒng)性能方面,在高并發(fā)人數(shù)下,本系統(tǒng)將依然能提供一個穩(wěn)定運營環(huán)境??傊鞠到y(tǒng)實現(xiàn)后將有如下的功能: (1) 可以創(chuàng)立電子題庫,方便地實現(xiàn)試題的數(shù)字化管理.(2) 可以按照科學的策略智能組卷,從而提高出卷效率. (3) 可以具有操作性和交互性.

4、(4) 使考試和評卷更具規(guī)范性和合理性. (5) 實現(xiàn)自動評卷和數(shù)據(jù)的有效保存.1 . 設計目的通過選擇掃雷游戲軟件設計,這個綜合性的題目作為本次的課程設計??梢宰屛覀兏邮煜ava程序設計這門課程,學會熟練使用Java這個軟件,加深對Java語言的掌握,提高編程水平。同時培養(yǎng)獨立思考和同學間團結合作的能力,為畢業(yè)設計以及將來的工作打下堅實的基礎。2 . 設計內(nèi)容及要求2.1 掃雷游戲的基本要求Windows 2000/XP系統(tǒng)提供的掃雷游戲是一個很有趣的游戲。本章的課程設計使用Java語言編寫一個與其類似的掃雷游戲。具體要求如下:(1) 掃雷游戲分為初級、中級和高級三個級別,掃雷英雄榜存儲

5、每個級別的最好成績,即挖出全部的地雷且用時最少者。單擊游戲菜單可以選擇“初級”、“中級”和“高級”或“查看英雄版”。(2) 選擇級別后將出現(xiàn)相應級別的掃雷區(qū)域,這是用戶使用鼠標左鍵單擊雷區(qū)中任何一個方塊便啟動計時器。(3) 用戶要揭開某個方塊,可單擊它。若所揭方塊下有淚,用戶便輸了這一局,若所揭方塊下五雷,則顯示一個數(shù)字,該數(shù)字代表方塊的周圍的8個方塊中共有多少顆雷。(4) 如果用戶認為某個方塊下埋著雷,單擊右鍵可以在方塊上標識一個用戶認為是雷的圖標,即給出一個掃雷標記。用戶每標記出一個掃雷標記(無論用戶的標記是否正確),程序?qū)@示的剩余雷數(shù)減少一個。 (5) 掃雷勝利后(用時最少者),程序彈

6、出保存成績的對話框。 (6)用戶可以選擇標記疑問的方塊,用可以勾選游戲菜單下的標記(或者用快捷鍵alt+G 然后M)即可,此時雙擊右鍵并可出現(xiàn)“?”標記。另有顏色選項,當用戶勾選此項時,游戲?qū)⒁宰畹蛨D像像素來顯示。(7)如果用戶需要即使提示聲,并可選中聲音選項,此時將聽到計時的卡塔聲。當用戶點中雷時,將有爆炸聲產(chǎn)生,勝利時,將有凱旋的旋律播放,此時企鵝出現(xiàn)歡悅表情。2.2 需實現(xiàn)的主要功能 (1) 用戶可以自定義級別并且可以任意輸入雷數(shù);(2) 具有計時功能,即顯示用戶完成移動盤子所花費的時間;(3) 用戶可以選擇是否有音效;(4) 自動保存掃雷英雄榜;3 需求分析3.1 掃雷棋盤的布局設計系

7、統(tǒng)的整體布局為:CardLayout布局, 采用了菜單、按鈕、面板等組件,菜單主要包括開始,選擇級別,標記,掃雷英雄榜,退出, 按鈕的功能是重新開始新的游戲。3.2 雷區(qū)的設計MineArea類是javax.swing包中Jpanel容器的子類,實現(xiàn)了ActionListener和MouseListener接口,所創(chuàng)建的對象:mineArea是MineGame類中最重要的成員之一,作為一個容器添加到MineGame窗口的中心。標明MineArea類的主要成員變量、方法以及和MineGame類之間組合關系的UML圖如圖2-1所示。以下是UML圖中有關數(shù)據(jù)和方法的詳細說明。3.2.1成員變量(1)

8、block是Block類型的數(shù)組,用來確定雷區(qū)有多少需進行掃雷的方塊。(2)blockView是BlockView類型的數(shù)組,負責為block數(shù)組中的Block對象提供視圖。(3)lay是LayMines類型的對象,負責設置block數(shù)組中的哪些方塊是雷或不是雷。 (4)record負責提供保存成績的界面,是一個對話框,默認不可見。用戶只有掃雷成功后(用時最少),才可以看見對話框。 (5)reStart是一個按鈕對象,用戶單擊它重新開始游戲。 (6)time是計時器對象,負責計算用戶的用時。3.2.2方法(1)initMineArea(int,int,int,int)方法可根據(jù)參數(shù)提供的數(shù)據(jù)設

9、置雷區(qū)的寬度、高度、雷的數(shù)目以及雷區(qū)的級別。(2)actionPerformed(ActionEvent)是MineArea類實現(xiàn)的ActionListener接口中的方法。當用戶單擊blockView中的某個方塊時,actionPerformed(ActionEvent)方法負責執(zhí)行有關算法,例如,當用鼠標左鍵單擊方塊上的按鈕后,若該方塊下有雷,actionPerformed(ActionEvent)方法將使用戶輸?shù)舯揪?,若該方塊下無雷,actionPerformed(ActionEvent)方法將顯示blockView對象中的標簽,該標簽上是一個數(shù)字,該數(shù)字代表當前方塊的周圍的8個方塊中共

10、有多少顆雷。(3)show()方法是一個遞歸方法。actionPerformed(ActionEvent)方法執(zhí)行時將調(diào)用show方法進行掃雷。(4)mousePressed(MouseEvent)方法是MineArea類實現(xiàn)的MouseListener接口中的方法,當用戶按下鼠標有件事mousePressed(MouseEvent)方法負責讓方塊上顯示一個探雷標記。 (5)inquireWin()方法用來判斷用戶是否掃雷成功,如果成功該方法負責讓record對話框可見。所謂掃雷成功是指不僅找到了全部的累而且用時最少。 綜上所述,MineArea創(chuàng)建的掃雷區(qū)域效果如圖2.2.2所示。3.3 排

11、行榜設計LogDialog是javax.swing包中Jdialog對話框的子類,并實現(xiàn)了ActiongListener接口。LogDialog創(chuàng)建的對象dialog是MainFrame類(主類)的成員之一,當用戶選擇查看“英雄榜”菜單項時,該對話框可見,提供了查看掃雷的最好成績的界面。標明LogDialog類的主要成員變量、方法以及和MainFrame類之間組合關系的UML圖如圖2-3所示。4 總體設計4.1 總體功能圖4.2 總體流程圖4.3雷區(qū)設計流程圖4.4 排行榜設計流程圖5 代碼實現(xiàn)5.1 類之間關系圖5.2 運行效果圖5.3 程序打包發(fā)布過程可以使用jar.exe命令制作JAR文

12、件來發(fā)布編寫的軟件。 (1)首先用文本編輯器,如Windows下的“記事本”,編寫一個清單文件:Mymoon.mfManifest-Version: 1.0 Main-Class: MineGameCreated-By: 1.5(Sun Microsystems Inc.) 將Mymoon.mf保存到G:Java課程設計掃雷游戲1掃雷游戲33中,即和應用程序所用的字節(jié)碼文件保存在相同的目錄中。 注意:清單文件中的“Manifest-Version:”和1.0、“Main-Class”和主類MineGame之間以及“Created-By:”和1.5之間必須有且只有一個空格。 (2)生成JAR文件

13、。 G:Java課程設計掃雷游戲1掃雷游戲33jar cfm Game.jar Mymoon.mf *.class其中,參數(shù)c表示要生成一個新的JAR文件,f表示要生成的JAR文件的名字,m表示清單文件的名字。 可以將Hannoi.jar復制到任何一個安裝了Java運行環(huán)境(版本號需高于1.5的計算機上)的計算機上,用戶用鼠標雙擊該文件的圖標就可以運行掃雷游戲。6 總結通過這次的課程設計,我對Java這門語言有了更深刻的理解。其中包括類、對象、接口、繼承、方法以及Java語言中的常用包等的使用方法,特別是圖形用戶界面里各種組件的創(chuàng)建,事件處理等相關知識。還學會了很多在這個學期Java2課程設計

14、基礎課上沒有學會和沒有學懂的東西,使我對Java語言是一種非常難懂的語言的思想有了極大的改觀。這次的課程設計是用Java語言及相關知識設計一個掃雷游戲系統(tǒng),能實現(xiàn)選擇游戲級別,記錄游戲時間和保存游戲成績等功能。雖然整個設計的時間才短短兩周,我還是對JDK和JCreator等Java語言開發(fā)工具有了深層次的認知,并熟練掌握了它們的使用方法。而且這次的課程設計,也使我的編程能力有了明顯的提高。通過這次課程設計設計,我才明白學習是一個長期積累的過程,在以后的工作、生活中都應該不斷的學習,努力提高自己知識和綜合素質(zhì)。此外,我認為這次課程設計最大的收獲就是:知識必須通過應用才能實現(xiàn)其價值!有些東西以為學

15、會了,但真正到用的時候才發(fā)現(xiàn)是兩回事,所以我認為只有到真正會用的時候才是真的學會了。參考文獻1 Java課程設計(第二版) 清華大學出版社 耿祥義 張躍平2 Java2實用教程(第三版) 清華大學出版社 耿祥義 等 3精通Struts:基于MVC的Java Web設計與開發(fā).北京:電子工業(yè)出版社,2004.08 4JAVA 語言與面向?qū)ο蟪绦蛟O計 . 印 旻 . 清華大學出版社。 5 JavaApplet 實例編程,赤金、聶松編著,中國水利水電出版社 6 Java 開發(fā)利器 Eclipse 從入門到精通張峰科技 編,清華大學出版社 7 Java2 核心第二版窗體底端 8Sun中國技術社區(qū)9Ja

16、va之家10Apache社區(qū)/7 主要源代碼importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.Insets;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;im

17、portjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JPanel;importjavax.swing.Timer;public class ScanLei1 extends JFrame implements ActionListenerprivate static final long serialVers

18、ionUID = 1L;private Container contentPane;privateJButtonbtn;privateJButton btns;privateJLabel b1;privateJLabel b2;privateJLabel b3;private Timer timer;privateint row=9;privateint col=9;privateint bon=10;privateint a;privateint b;privateint a1;privateJPanel p,p1,p2,p3;public ScanLei1(String title)sup

19、er(title);contentPane=getContentPane();setSize(297,377);this.setBounds(400, 100, 400, 500);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);timer =new Timer(1000,(ActionListener) this);a = new introw+2col+2;initGUI();public void initGUI() p3=new JPanel();b=bon;JMenuBarmenuBar=new JMenuBar();JMenu menu

20、1=new JMenu("游戲");JMenu menu2=new JMenu("幫助");JMenuItem mi1=new JMenuItem("初級");JMenuItem mi2 = new JMenuItem("中級");JMenuItem mi3 =new JMenuItem("高級");mi1.addActionListener(this);menu1.add(mi1);mi2.addActionListener(this);menu1.add(mi2);mi3.addAction

21、Listener(this);menu1.add(mi3);menuBar.add(menu1);menuBar.add(menu2);p3.add(menuBar);b1=new JLabel(bon+"");a1=new intbon;btn =new JButton("開始");btn.addActionListener(this);b2=new JLabel("0");b3=new JLabel("");btns=new JButtonrow*col;p=new JPanel();p.setLayout(n

22、ew BorderLayout();contentPane.add(p);p.add(p3,BorderLayout.NORTH);/combo=new JComboBox(new Object"初級","中級","高級" );/加監(jiān)聽/*combo.addItemListener(new ItemListener();*/ p1=new JPanel();/在那個位置/( FlowLayout)p1.getLayout().setAlignment( FlowLayout.RIGHT);p1.add(b1);p1.add(btn);

23、p1.add(b2);p1.add(b3);p.add(p3,BorderLayout.NORTH);p.add(p1,BorderLayout.CENTER); p2=new JPanel();p2.setLayout(new GridLayout(row,col,0,0);for(inti=0;i<row*col;i+)btnsi=new JButton("");btnsi.setMargin(new Insets(0,0,0,0);btnsi.setFont(new Font(null,Font.BOLD,25);btnsi.addActionListener(

24、this);btnsi.addMouseListener(new NormoreMouseEvent();p2.add(btnsi);contentPane.add(p,BorderLayout.NORTH);contentPane.add(p2,BorderLayout.CENTER);public void go()setVisible(true);public static void main(String args)new ScanLei1("掃雷").go();public void out(int a,JButton btns,ActionEvente,inti

25、,intx,int y)int p=1;if(axy=0)axy=10;btnsi.setEnabled(false);/33 for(int l=y-1;l<=y+1;l+)int m=x-1-1;int n=l-1; p=1;System.out.println(a12);if(n>-1&&n<col&&m>-1&&m<row) for(int q=0;q<row&&p=1;q+)/col->row;if(n+col*q)>=(m*col)&&(n+col*q)&

26、lt;(m+1)*col)if(ax-1l!=0&&ax-1l!=10)btnsn+col*q.setText(ax-1l+"");ax-1l=10;btnsn+col*q.setEnabled(false); else if(ax-1l=0) /ax-1l=10;btnsn+col*q.setEnabled(false);out(a,btns,e,n+col*q,x-1,l); /55/ax-1l=10;btnsn+col*q.setEnabled(false); p=0; p=1; m=x;if(n>-1&&n<col&

27、;&m>-1&&m<col) for(int q=0;q<row&&p=1;q+)if(n+col*q)>=(m*col)&&(n+col*q)<(m+1)*col)if(ax+1l!=0&&ax+1l!=10)btnsn+col*q.setText(ax+1l+"");ax+1l=10;btnsn+col*q.setEnabled(false); else if(ax+1l=0)out(a,btns,e,n+col*q,x+1,l);/55/ax+1l=10;btnsn+

28、col*q.setEnabled(false); p=0; int m=x-1;int n=y-1-1; p=1;if(n>-1&&n<col&&m>-1&&m<col)for(int q=0;q<row&&p=1;q+)if(n+col*q)>=(m*col)&&(n+col*q)<(m+1)*col)if(axy-1!=0&&axy-1!=10)btnsn+col*q.setText(axy-1+"");axy-1=10;btnsn+

29、col*q.setEnabled(false); else if(axy-1=0)out(a,btns,e,n+col*q,x,y-1);axy-1=10;btnsn+col*q.setEnabled(false); p=0; p=1; m=x-1; n=y+1-1;if(n>-1&&n<col&&m>-1&&m<col) for(int q=0;q<row&&p=1;q+)if(n+col*q)>=(m*col)&&(n+col*q)<(m+1)*col)if(axy+1

30、!=0&&axy+1!=10)btnsn+col*q.setText(axy+1+"");axy+1=10;btnsn+col*q.setEnabled(false); else if(axy+1=0)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;col=9;bon=10;a1=new

31、intbon;b=bon;/setSize(297,377);a = new introw+2col+2;this.remove(p2);timer.stop();b1.setText("10");b2.setText("0");b3.setText("");btns=new JButtonrow*col; p2=new JPanel();p2.setLayout(new GridLayout(row,col,0,0);for(inti=0;i<row*col;i+)btnsi=new JButton(" "

32、);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(297,377);this.pack();for(inti=0;i<row*col;i+)btnsi.setText(" ");btn

33、si.setEnabled(true);for(inti=0;i<row+2;i+)for(int j=0;j<col+2;j+)aij=0;else if(e.getActionCommand()="中級")row=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.set

34、Text("");btns=new JButtonrow*col; p2=new JPanel();p2.setLayout(new GridLayout(row,col,0,0);for(inti=0;i<row*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 Norm

35、oreMouseEvent();p2.add(btnsi);contentPane.add(p2,BorderLayout.CENTER);this.pack();/setSize(33*col,33*row+80);for(inti=0;i<row*col;i+)btnsi.setText("");btnsi.setEnabled(true);for(inti=0;i<row+2;i+)for(int j=0;j<col+2;j+)aij=0;else if(e.getActionCommand()="高級")row=16;col=3

36、2;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(inti=0;i<row*col;i+)btnsi=n

37、ew 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(inti=0;i<row*col;i+

38、)btnsi.setText("");btnsi.setEnabled(true);for(inti=0;i<row+2;i+)for(int j=0;j<col+2;j+)aij=0;if(e.getSource()=btn)timer.start();b=bon;b3.setText("");/System.out.println(bon);/清空for(inti=0;i<row*col;i+)btnsi.setText("");btnsi.setEnabled(true);for(inti=0;i<row

39、+2;i+)for(int j=0;j<col+2;j+)aij=0;/產(chǎn)生隨機數(shù)for(inti=0;i<bon;i+) int p=1;int m=(int)(Math.random()*row*col);while(p=1)int l=1;int j;for( j=0;j<i&&l=1;j+)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(inti=0;

40、i<bon;i+)int x=(a1i/col+1);int y=(a1i%col+1);axy=100; for(inti=0;i<row+2;i+)for(int j=0;j<col+2;j+)if(i=0|j=0|i=row+1|j=col+1)aij=0; for(inti=1;i<=row;i+)for(int j=1;j<=col;j+)if(aij!=100)for(int l=j-1;l<=j+1;l+)if(ai-1l=100)aij+; if(ai+1l=100)aij+; if(aij-1=100)aij+; if(aij+1=100)

41、aij+; if(e.getSource()=timer) String time=b2.getText().trim();int t=Integer.parseInt(time);/System.out.println(t);if(t>=600)timer.stop();elset+;b2.setText(t+"");for(inti=0;i<col*row;i+)if(btnsi.getText()!="") int x=i/col+1;int y=i%col+1;if(e.getSource()=btnsi&&axy=100)btnsi.setText(""

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論