基于java開發(fā)的蜘蛛紙牌程序的設計說明_第1頁
基于java開發(fā)的蜘蛛紙牌程序的設計說明_第2頁
基于java開發(fā)的蜘蛛紙牌程序的設計說明_第3頁
基于java開發(fā)的蜘蛛紙牌程序的設計說明_第4頁
基于java開發(fā)的蜘蛛紙牌程序的設計說明_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 PAGE29 / NUMPAGES29編號: 本科畢業(yè)論文(設計)題目:學 院 專 業(yè) 學 號 姓名 指導教師 職稱: 完成日期 誠 信 承 諾我謹在此承諾:本人所寫的畢業(yè)論文均系本人獨立完成,沒有抄襲行為,凡涉與其他作者的觀點和材料,均作了注釋,若有不實,后果由本人承擔。 承諾人(簽名): 年 月 日 基于java開發(fā)的蜘蛛紙牌程序設計:關俊生 學號:3指導老師:林國摘要:java是由Sun Microsystems公司于1995年5月推出的Java程序設計語言(以下簡稱Java語言)和Java平臺的總稱。Java是面向對象的語言。蜘蛛紙牌是一款受人喜歡的休閑游戲,微軟的每一代操作系統(tǒng)中都

2、裝有這種紙牌游戲,很多人都玩過蜘蛛紙牌,都熟悉蜘蛛紙牌游戲所需要的功能。本人做的蜘蛛紙牌游戲開發(fā)理念是基于WINDOWS XP操作系統(tǒng)中自帶蜘蛛紙牌游戲。利用java語言實現(xiàn)了蜘蛛紙牌游戲的主要功能如紙牌的移動、放置、回收、重發(fā)。利用javax.swing包的類實現(xiàn)紙牌游戲的用戶界面,通為各個菜單組件添加監(jiān)視器來實現(xiàn)鼠標單擊事件所觸發(fā)的接口方法,使得用戶可以單擊菜單項來實現(xiàn)具體的功能。通過設置紙牌的等級來初始化紙牌隨機分配紙牌,為用戶玩紙牌游戲提供相應的等級。意義:通過自己對蜘蛛紙牌游戲的開發(fā),使我更加熱愛java語言,讓我懂得和洗去了更多程序開發(fā)的知識與經驗,為以后進入編程工作提供條件。關鍵

3、字:java語言、游戲背景、功能實現(xiàn)Spider solitaire program based on java developmentName: Guan Junsheng Student ID: 200 829 010 213 Instructor: Li LinguoAbstract: java is the Java programming language from Sun Microsystems, Inc. in May 1995 (hereinafter referred to as the general term of the Java language) and Java

4、 platforms. Java is object-oriented languages. Spider Solitaire is a people like casual games, each generation of Microsofts operating system are equipped with this card game, many people have played Spider Solitaire are all familiar with the functionality required by the spider card game. I do spid

5、er solitaire game development philosophy is based on the WINDOWS XP operating system comes with the spider solitaire game. Java language to achieve the main function of the spider solitaire game, such as movement of the playing cards, place, recycling, re-issued. The use of the javax.swing package c

6、lass that implements the user interface of the card game pass for each menu component to add a monitor to the mouse click event triggered by the interface method, the user can click the menu items to achieve a specific function. To initialize the cards by the level of the set of cards randomly assig

7、ned to cards, to provide the appropriate level for users playing solitaire. Meaning: the spider solitaire game development, so that I more love the java language, so I know how to wash away the more knowledge and experience of program development, and provide conditions for the future to enter the p

8、rogramming work.Keywords: Java language, the background of the game functions目錄1.緒論1.1 游戲開發(fā)的背景知識1.2 需要做的準備工作開發(fā)工具介紹2.1 java語言概述2.2 java語言的特點2.3 Eclipse開發(fā)平臺介紹總體設計3.1代碼功能模塊的設計3.2 程序總體設計流程圖3.3模塊一的詳細介紹3.3.1 主要的類3.3.2 主要的變量3.3.3主要的方法3.4 模塊二的詳細介紹3.4.1主要的類3.4.2 主要的變量3.4.3主要的方法3.5 模塊三的詳細介紹3.5.1主要的類3.5.2主要的變量

9、 3.5.3 主要的方法 3.6模塊四的詳細3.6.1主要的類3.6.2主要的變量 3.6.3 主要的方法功能設計4.1 需要實現(xiàn)的主要功能4.2 功能設計流程圖4.3 主要功能的代碼實現(xiàn)4.3.1 游戲菜單欄游戲菜單與幫助菜單功能展示4.3.2 主界面的設計 4.3.3 紙牌的初始化以與發(fā)牌操作4.3.4 紙牌的移動以與放置 4.3.5顯示當前紙牌可行的操作4.3.6 回收紙牌程序的運行與發(fā)布 5.1 運行程序 5.2 發(fā)布程序工作總結參考文獻1.緒論1.1 游戲開發(fā)的背景知識相信很多人都玩過蜘蛛紙牌這款休閑游戲,現(xiàn)在隨著生活水平的提高,人們擁有充分的時間來享受休閑游戲帶來的快樂,越來越多的

10、人親睞蜘蛛紙牌游戲。談起這款游戲,大家并不陌生。從WINDOWS2000系統(tǒng)開始,就嵌入了蜘蛛紙牌游戲,可是隨著微軟系統(tǒng)的不段升級,蜘蛛紙牌游戲的功能業(yè)變得越來越強大,游戲的界面也更加美觀。用戶的體驗感受也更加美好。所以,蜘蛛紙牌游戲的開發(fā)對于人類的生活娛樂更加有意義。了解蜘蛛紙牌的開發(fā)過程也是作為一名學習計算機專業(yè)大學生所應該嘗試的過程。游戲的目標是以最少的移動次數(shù)將牌面中的十疊牌以與待發(fā)的五組,共計八副牌整理移除。當所有牌被移除整理到界面的左下方,游戲獲勝。1.2 需要做的準備工作需要做的工作有學習掌握開發(fā)程序的方法,開了解發(fā)工具,進行需求分析,根據(jù)得到的需求規(guī)格說明書設計具體的程序流程圖

11、,編寫程序,修改程序,運行程序,系統(tǒng)調試程序、測試程序,發(fā)布程序。2.開發(fā)工具介紹2.1 java語言概述:java是由Sun Microsystems公司于1995年5月推出的java程序設計語言和java平臺的總稱。用java實現(xiàn)的瀏覽器顯示它的魅力:跨平臺的特點使得它越來越受到許多程序員的親睞。java除了可以開發(fā)動態(tài)的Web頁還可以開發(fā)各種系統(tǒng)軟件?,F(xiàn)在常用的瀏覽器比如說360瀏覽器,IE瀏覽器中均配備有java applet。java平臺由java虛擬機和各種java應用編程接口(簡稱API)構成。java應用編程接口為java提供了一個獨立于操作系統(tǒng)的標準接口,可分為基本部分和擴展

12、部分。在操作系統(tǒng)上安裝一個java平臺就可以運行任何一個java程序啦?,F(xiàn)在java平臺已經幾乎嵌入到所有的操作系統(tǒng)黨章。這樣java程序就可以只編譯一次,就可以在各種系統(tǒng)當中運行啦。java目前最新的版本是java1.7版本的。2.2 java語言的特點:java語言是一種簡單的、面向對象的、分布式的、健壯的、安全的、與平臺無關的、多線程、高性能的、動態(tài)程序設計語言。1.java語言簡單易學的。 java語言的語法與C語言和C+語言很接近,使得多數(shù)程序員很容易學習和使用java。另一方面,java丟棄了C+中很少使用的,很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強制類型轉換

13、。特別地。java語言不使用指針,并提供了自動的廢料收集,使得程序員不必為存管理而擔憂。2.平臺無關性 平臺無關性是指Java能運行于不同的平臺。Java引進虛擬機 原理,并運行于虛擬機,實現(xiàn)不同平臺的Java接口之間。使用Java編寫的程序能在世界圍共享。Java的數(shù)據(jù)類型與 機器無關,Java虛擬機(Java Virtual Machine)是建立在硬件和操作系統(tǒng)之上,實現(xiàn)Java二進制代碼的解釋執(zhí)行功能, 提供于不同平臺的接口的。 3.安全性 Java的編程類似C+,學習過C+的讀者將很快掌握Java的精髓。Java舍棄了C+的指針對存儲器地址的直接操作,程序運行時,存由操作系統(tǒng)分配,這

14、樣可以避免病毒通過指針侵入系統(tǒng)。Java對程序提供了安全管理器,防止程序的非法訪問。 4.面向對象 Java吸取了C+面向對象的概念,將數(shù)據(jù)封裝于類中,利用類的優(yōu)點,實現(xiàn)了程序的簡潔性和便于維護性。類的封裝性、繼承性等有關對象的特性,使程序代碼只需一次編譯,然后通過上述特性反復利用。程序員只需把主要精力用在類和接口的設計和應用上。Java提供了眾多的一般對象的類,通過繼承即可使用父類的方法。在Java中,類的繼承關系是單一的非多重的,一個子類只有一個父類,子類的父類又有一個父類。Java提供的Object類與其子類的繼承關系如同一棵倒立的樹形,根類為Object類,Object類功能強大,經常

15、會使用到它與其它派生的子類。 5.分布式 Java建立在擴展TCP/IP網絡平臺上。庫函數(shù)提供了用 和FTP協(xié)議傳送和接受信息的方法。這使得程序員使用網絡上的文件和使用本機文件一樣容易。 6.健壯性 Java致力于檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。Java自己操縱存減少了存出錯的可能性。Java還實現(xiàn)了真數(shù)組,避免了覆蓋數(shù)據(jù)的可能,這些功能特征大大提高了開發(fā)Java應用程序的周期。并且Java還提供了Null指針檢測、數(shù)組邊界檢測、異常出口、Byte code校驗等功能。 7.解釋型 我們知道C,C+等語言,都是針對CPU芯片進行編譯,生成機器代碼,該代碼

16、的運行就和特定的CPU有關。Java不像C或C+,它不針對CPU芯片進行編譯,而是把程序編譯成稱為自字節(jié)碼的一種“中間代碼”。字節(jié)碼是很接近機器碼的文件,可以在提供了java虛擬機(JVM)的任何系統(tǒng)上被解釋執(zhí)行。 8.動態(tài) java程序的基本組成單元就是類,有些類是自己編寫的,有些是從類庫中引入的,而類又是運行時動態(tài)裝載的,這就使得Java可以在分部環(huán)境中動態(tài)的維護程序與分類,而不像C+那樣,沒檔期類庫升級以后,如果想讓程序具有新類庫提供的功能,就需要修改程序,重新編譯。9.多線程Java是支持多線程的語言。多線程是一種應用程序設計方法。線程是一大進程里分出來的,小的、獨立的進程,使得在一個

17、程序里可同時執(zhí)行多個小任務。多線程帶來的好處是具有更好的交互性能和實時控制性能。但采用傳統(tǒng)的程序設計語言(如:C/C+)實現(xiàn)多線程程序并非易事。Java實現(xiàn)了多線程技術,提供了簡便的實現(xiàn)多線程的方法,并擁有一組高復雜性的同步機制。10.可以移植的。這種可移植性來源于體系結構中立性,另外,java還嚴格規(guī)定了各個基本數(shù)據(jù)類型的長度。java系統(tǒng)本身也具有很強的可移植性,java編譯器是用java實現(xiàn)的,java運行環(huán)境是用ANSIC實現(xiàn)的。2.3 Eclipse開發(fā)平臺簡介:Eclipse 是一個開放源代碼的、基于 Java 的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件

18、組件構建開發(fā)環(huán)境。幸運的是,Eclipse 附帶了一個標準的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。 雖然大多數(shù)用戶很樂于將 Eclipse 當作 Java 集成開發(fā)環(huán)境(IDE)來使用,但 Eclipse 的目標卻不僅限于此。Eclipse 還包括插件開發(fā)環(huán)境(Plug-in Development Environment,PDE),這個組件主要針對希望擴展 Eclipse 的軟件開發(fā)人員,因為它允許他們構建與 Eclipse 環(huán)境無縫集成的工具。由于 Eclipse 中的每樣東西都是插件,對于給 Eclipse 提供插件,以與給用戶提供一致

19、和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。這種平等和一致性并不僅限于 Java 開發(fā)工具。盡管 Eclipse 是使用 Java 語言開發(fā)的,但它的用途并不限于 Java 語言;例如,支持諸如 C/C+ 和 COBOL 等編程語言的插件已經可用,或預計將會推出。Eclipse 框架還可用來作為與軟件開發(fā)無關的其他應用程序類型的基礎,比如容管理系統(tǒng)。基于 Eclipse 的應用程序的一個突出例子是 IBM Rational Software Architect,它構成了 IBM Java 開發(fā)工具系列的基礎。Eclipse IDE for Java EE Developer

20、s443.總體設計:3.1代碼功能功能模塊設計:蜘蛛紙牌游戲共由4個部分組成,分別 是:Spider.java,SpiderMenuBar.java,PKCard.java,AboutDialog.java。SpiderMenuBar.java包含名為SpiderMenuBar的public類,其主要功能為生成蜘蛛紙牌游戲的菜單欄,實現(xiàn)菜單欄中各個組件的事件偵聽。主要包括3個模塊:圖形用戶界面的構建;組件監(jiān)聽接口的實現(xiàn):顯示可執(zhí)行操作的線程。PKCard.java包含名為PKCard的public類,其主要功能為:定義紙牌的屬性,包括名稱,位置等相關信息。并通過相關方法實現(xiàn)紙牌的移動等。Abo

21、utDialog.java包含名為AboutDialog的public類,其主要功能為生成蜘蛛紙牌游戲的幫助欄。Spider.java包含名為Spider的public類,其主要功能為生成蜘蛛紙牌游戲的框架,實現(xiàn)游戲中的方法,包括:紙牌的隨機生成,位置的擺放等。3.2程序的總體設計流程圖:3.3模塊一的詳細介紹:SpiderMenuBar.java的功能是生成蜘蛛紙牌游戲的菜單欄。實現(xiàn)菜單欄中的各個組件的事件。3.3.1主要的類:JMenuBar類、JMenu類、JMenuItem類、JRadioButton類都是設計GUI(圖形用戶界面)的包javax.swing中的類??梢杂胕mport引

22、用這些類。JMenuBar類是JComponent類的子類負責創(chuàng)建菜單條的。即JMenuBar類的一個實例就是一個菜單條。JMenu類是JComponent類的子類負責創(chuàng)建菜單組的。即JMenu類的一個實例化就是一個菜單。JMenuItem類是JMenu類的父類負責創(chuàng)建菜單項。即JMenuItem類的一個實例化就是一個菜單項。JRadioButtonMenuItem類負責一個單選按鈕菜單項的實現(xiàn)。JRadioButtonMenuItem 是屬于一組菜單項中的一個菜單項,該組中只能選擇一個項。ButtonGroup 類用于為一組按鈕創(chuàng)建一個多斥作用域。使用一樣的 ButtonGroup 對象創(chuàng)建

23、一組按鈕意味著“開啟”其中一個按鈕時,將關閉組中的其他所有按鈕。SpiderMenuBar類是此文件的一個主類是JMenuBar的子類。Show類是Thread的子類用于創(chuàng)建線程。3.3.2主要的變量:jNewGame、jHelp變量分別是JMenu類創(chuàng)建的“游戲”、“幫助”菜單。jItemAbout、jItemOpen、jItemPlayAgain、jItemExit、jItemValid變量分別是JMenuItem類創(chuàng)建的“關于”、“開局”、“重新發(fā)牌”、“退出”、“顯示可行操作”菜單項。jRMItemEasy、jRMItemNormal、jRMItemHard變量分別是JRadioBut

24、tonMenuItem類創(chuàng)建的“簡單:單一花色”、“中級:雙花色”、“高級:四花色”的單選按鈕菜單項。group變量是ButtonGroup 類創(chuàng)建的一組按鈕選擇對象。spider變量是Spider類創(chuàng)建的對象用于主界面窗口的實現(xiàn)。將在Spider.java文件中介紹。3.3.3主要的方法:public JMenuBar()創(chuàng)建新的菜單欄。public JMenu(String text)構造一個新菜單,用提供的字符串作為其文本。public JMenuItem(String text)創(chuàng)建帶有指定文本的菜單項。public JRadioButtonMenuItem(String text)創(chuàng)

25、建一個帶文本的單選按鈕菜單項。public ButtonGroup()創(chuàng)建一個新的單選按鈕對象組。 public void add(MenuItem item)向菜單增加由參數(shù)item指定的菜單項對象。public void add(AbstractButton b)將單選按鈕添菜單項加到組中。public void add(JMenu c)將指定的菜單添加加到菜單欄中。public void addSeparator()將新分隔符追加到菜單的末尾。所需要添加的事件處理的接口方法將在后來的模塊中進行介紹。事件源即能夠產生的事件的對象。監(jiān)視器用于對事件源進行監(jiān)視以便對發(fā)生的事件做出處理。事件源通

26、過調用相應的方法將某個對象作為自己的監(jiān)視器。這個方法是addActionListen(ActionListener listen)該方法中的參數(shù)是ActionListener類型的接口。因此必須用ActionListener接口的類創(chuàng)建的對象傳遞給該方法的參數(shù),使得該對象成為事件源的的監(jiān)視器。監(jiān)視器負責調用特定的方法處理事件,創(chuàng)建監(jiān)視器的類必須提供處理事件的特定的方法,即實現(xiàn)接口方法。public void addMenuListener(MenuListener l)添加菜單事件的偵聽器。void menuSelected(MenuEvent e)選擇某個菜單時調用。 void menuDe

27、selected(MenuEvent e)取消選擇某個菜單時調用。 void menuCanceled(MenuEvent e)取消菜單時調用。3.4模塊二的詳細介紹:PKCard的功能是定義紙牌的屬性,包括名稱,位置等相關信息。并通過相關方法實現(xiàn)了紙牌的移動等。3.4.1主要的類:JDialog類是創(chuàng)建對話框窗口的主要類。可以使用此類創(chuàng)建自定義的對話框,或者調用 JOptionPane 中的多個類方法來創(chuàng)建各種標準對話框。Jpanel類是一個面板類負責創(chuàng)建一個面板容器,再向這個面板添加組件,然后將面板添加到底層容器中。JTabbedPane類負責創(chuàng)建一個組件,它允許用戶通過單擊具有給定標題和

28、/或圖標的選項卡,在一組組件之間進行切換。JTextArea類負責創(chuàng)建一個顯示純文本的多行區(qū)域。它作為一個輕量級組件Container類負責創(chuàng)建一個容器對象,此容器可以包含其它組件。AboutDialog類是JDialog類的子類,負責創(chuàng)建一個顯示對話框。3.4.2主要的變量:jMainPane、jPanel1、jPanel2、變量是JPane1創(chuàng)建的面板容器。jt1、jt2是JTextArea類創(chuàng)建的文本區(qū)對象。jTabbedPane是JTabbedPane類創(chuàng)建的選項卡窗格對象。c變量是Container類創(chuàng)建的容器。3.4.3主要的方法:public JTabbedPane()創(chuàng)建一個具

29、有默認的 JTabbedPane.TOP 選項卡布局的空 TabbedPane.public JDialog()創(chuàng)建一個沒有標題并且沒有指定 Frame 所有者的無模式對話框。一個共享的、隱藏的窗體將被設置為該對話框的所有者。public JPanel()創(chuàng)建具有雙緩沖和流布局的新面板容器。public JTextArea(String text)構造顯示指定文本為text的新的文本區(qū)。public void setTittle(String s)設置一個標題為s的對話框。public void setSize(int width,int heigth)創(chuàng)建寬為width,高位heigth大小

30、的對話框。public void setResizable(boolean b)設置對話框是否可調整大小。b為true時,對話框可調整大小。public void setDefaultCloseOperation(int operation)該方法用來設置單機窗體右上角的關閉圖標后,程序會做出怎樣的處理。operation取DISPOSE_ON_CLOSE時/隱藏當前窗口,并釋放窗體所占有的其他資源。public void setVisible(boolean b)設置框口是可見還是不可見。b取true是為可見。public Container getContentPane()方法可得到窗口的

31、容面板容器。public void JTextArea.setSize(int width,int heigth)設置文本區(qū)的大小。public void JTextArea.setEditable(boolean b)設置文本區(qū)是否可以編輯。public void JTextArea.setLineWrap(boolean b)設置文本區(qū)中輸入的文本是否可以實現(xiàn)在右邊界自動換行。public void JTextArea.setFont(Font f)設置文本區(qū)的字體。public void JTextArea.setForeground(Color c)設置文本區(qū)組件的前景色。public

32、 void addTab(String title,Icon icon,Component component,String tip)添加由 title 和/或 icon 表示的 component 和 tip,其中任意一個都可以為 nul參數(shù):title - 此選項卡中要顯示的標題,icon - 此選項卡中要顯示的圖標,component - 單擊此選項卡時要顯示的組件,tip - 此選項卡要顯示的工具提示。public void pack()調整此窗口的大小,以適合其子組件的首選大小和布局。3.5模塊三的詳細介紹:PKCard的作用是定義紙牌的屬性,包括名稱、位置等相關信息。并通過相關方法

33、實現(xiàn)紙牌的移動。3.5.1主要類介紹:JLable類負責創(chuàng)建標簽對象。標簽用于短文本字符串或圖像或二者的顯示區(qū)。Thread類負責創(chuàng)建線程對象。MouseListener接口、MouseMotionListener接口負責處理事件源所觸發(fā)的鼠標事件,包括處理鼠標按下、釋放、進入、退出、單擊、連擊、拖動、移動所觸發(fā)鼠標事件。Point類負責創(chuàng)建表示 (x,y) 坐標空間中的位置的點對象,以整數(shù)精度指定。MouseEvent類負責創(chuàng)建鼠標所發(fā)生的事件對象。Flash類負責創(chuàng)建線程對象,不斷的獲取下一紙牌。PKCard類是文件的主類,實現(xiàn)MouseListener接口的JLable的子類。負責創(chuàng)建紙

34、牌對象。3.5.2主要變量:Point point變量表示紙牌的位置對象。Point initPoint表示紙牌的初始化位置對象。int value變量表示紙牌的容值。int type變量表示紙牌的類型。String name變量表示紙牌的名稱。Container pane變量表示標簽主容器。boolean canMove 變量表示紙牌是否可以移動,值為true時,可以移動。boolean isFront變量表示紙牌是否正面顯示,值為true時,則為正面顯示。PKCard previousCard變量表示上面一紙牌3.5.3主要方法:public void flashCard(PKCard c

35、ard)方法啟動Flash線程不停的獲取下一紙牌直至完成。public void run()方法為紙牌的正面設置白色圖片。card.updateUI()方法將UI屬性重置為當前外觀的值。public void mousePressed(MouseEvent mp)方法按下鼠標時事件的處理方法。public void mouseReleased(MouseEvent mr)方法釋放鼠標時事件處理的方法。public void setNextCardLocation(Point point)方法放置鼠標時事件處理方法。public int whichColumnAvailable(Point po

36、int)方法為判斷可用列。public void mouseDragged(MouseEvent argO)方法鼠標拖動紙牌時事件處理方法。public void moving(int x,int y)方法將紙牌移動(x,y)個位置。pane.setComponentZOrder(this,1)方法將主件移動到容器中指定的順序索引。public PKCard(String name,Spider spider)方法紙牌的構造函數(shù)。public void turnFront()方法令紙牌顯示正面。public void turnRear()方法令紙牌顯示背面。public void moveto

37、(Point point()方法將紙牌移動到點pointpublic void setCanMove(boolean can)方法判斷紙牌是否能夠移動。public boolean isCardFront()方法判斷紙牌是否正面顯示。public boolean isCardCanMove()方法判斷紙是否能夠移動。public int getCardValue()方法獲得紙牌的容值。public int getCardType()方法獲得紙牌的類型。3.6模塊四的詳細介紹:Spider.java文件是蜘蛛紙牌游戲的主類文件,其主要功能是生成蜘蛛紙牌游戲的框架,實現(xiàn)游戲中的方法,包括紙牌的隨機

38、生成、位置的擺放等。3.6.1主要的類:JFrame類與其子類負責創(chuàng)建的對象稱為窗體。JLable類負責創(chuàng)建標簽對象。標簽用于短文本字符串或圖像或二者的顯示區(qū)。Container類負責創(chuàng)建一個容器對象,此容器可以包含其它組件。PKCard類負責創(chuàng)建紙牌對象。Hashtable類實現(xiàn)一個哈希表,該哈希表將鍵映射到相應的值。3.6.2主要的變量:public static final int EASY=1;代表“簡單”等級。public static finalint NATURAL=2 代表“普通”等級。public static finalint HARD=3 代表“難”等級。private

39、int grade=Spider.EASY設定初始等級為簡單等級;private Container pane 變量為Container類創(chuàng)建的面板容器。private PKCard card變量為PKCard類創(chuàng)建的紙牌數(shù)組。private JLable clickLable1變量為JLable類創(chuàng)建的右下角發(fā)牌區(qū)的鼠標點擊響應區(qū)域。private JLable groudLable變量為JLable類創(chuàng)建的背景框數(shù)組。Hshtable table變量為Hashtable類創(chuàng)建的一個哈希表對象,用于存儲鍵值數(shù)據(jù)對。private int c變量為紙牌的數(shù)量。private int n變量為紙

40、牌的等級。private int a變量為紙牌所在的列號。private int finish變量為紙牌從小到大排列成功的次數(shù)。3.6.3主要的方法:public void setTittle(String s)設置一個標題為s的窗體。public void setVisible(boolean b)設置框體是可見還是不可見。b取true是為可見。public void setSize(int width,int heigth)創(chuàng)建寬為width,高位heigth大小的窗體。public void setDefaultCloseOperation(int operation)該方法用來設置單機

41、窗體右上角的關閉圖標后,程序會做出怎樣的處理。operation取EXIT_ON_CLOSE時結束窗體所在的應用程序。public void setMenuBar(MenuBar mb)將此窗體的菜單欄設置為指定的菜單欄。public void pane.setBackground(Color c)設置面板的背景顏色。public void pane.setLayout(布局對象)設置面板的布局。public Container getContentPane()方法可得到窗口的容面板容器。public void setBounds(int a,int b,int weidth, int hei

42、gth)設置出現(xiàn)在屏幕中的組件距離屏幕的左面a個像素,距屏幕上面b個像素,組件寬為weidth,高為heigth。public void newGame()方法開始新游戲。public int getC()方法返回紙牌的數(shù)量。public void setGrade(int grade)方法設置紙牌游戲的等級。public void initCards()方法進行初始化紙牌public void randomCards()方法令紙牌隨機分配。public void setNA()方法設置還原紙牌游戲。public void setCardsLocation()方法設置待展開紙牌級表面初始化紙牌

43、的位置。public void showEnableOperator()方法進行顯示是否有可以移動的紙牌。public void deal()方法開始運行游戲。public PKCard getPreviousCard(PKCard card)方法獲取當前紙牌上面的那一紙牌。public PKCard getNextCard(PKCard card)方法獲取當前紙牌的下面的那一紙牌。public Point getLastCardLocation(int n)方法獲取第n列紙牌最后一紙牌的位置。public Point getGroundLabelLocation(int n)方法獲取第n列紙

44、牌的背景框架的位置。public void setGroundLabelZOrder()放置groundLable組件。將組件groundLable移動到容器中指定的順序索引。順序(105+i)確定了繪制組件的順序;具有最高順序的組件將第一個繪制,具有最低順序的組建將最后一個繪制。在組建重疊的地方,具有較低順序的組建將覆蓋具有較高順序的組件。public void haveFinish(int column)判斷紙牌的擺放是否成功。4.功能設計:4.1需要實現(xiàn)的主要功能:(1)游戲主界面的設計包括背景顏色、框架大小、玩牌區(qū)域、發(fā)牌區(qū)域、回收紙牌的區(qū)域組件的設置。(2)點擊鼠標、釋放鼠標、拖動鼠

45、標時紙牌需要實現(xiàn)的事件處理程序。(3)移動放置一組或者單個紙牌時。需要紙牌按照由小到大的順序排列,并列類型一樣。(4)當某列的紙牌按照從A到K得順序排列時,程序會自動回收這組紙牌到回收紙牌的區(qū)域。(5)當用鼠標單擊發(fā)牌區(qū)域的紙牌時,如果10列紙牌中沒有空白列,則順序把紙牌發(fā)到每列紙牌的最下面。否則,彈出有空位不能發(fā)牌對話框。(6)當玩家不知道當前游戲如何進行時,可以點擊菜單項顯示可行的操作提示玩家下一步該移動哪一紙牌。(7)等級設置,玩家通過單擊游戲菜單里相應的等級菜單項來設置游戲的難度等級。游戲的默認等級是簡單等級。 4.2功能設計流程圖:4.3主要功能的代碼實現(xiàn):4.3.1游戲菜單欄游戲菜

46、單與幫助菜單功能展示:4.3.2主界面的設計:代碼實現(xiàn)如下:public Spider()setTitle(蜘蛛牌); setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); /設置框架的大小setSize(1024, 742);/生成SpiderMenuBar對象,并放置在框架之上setJMenuBar(new SpiderMenuBar(this); pane = this.getContentPane(); /設置背景顏色pane.setBackground(new Color(0, 139, 69); /將布局管理器設置成

47、為nullpane.setLayout(null); clickLabel = new JLabel(); clickLabel.setBounds(883, 606, 121, 96);設置發(fā)牌區(qū)組件的位置 pane.add(clickLabel);clickLabel.addMouseListener(new MouseAdapter() public void mouseReleased(MouseEvent me) if (c 60)Spider.this.deal(); );this.initCards(); this.randomCards(); this.setCardsLoca

48、tion();為紙牌設置位置 groundLabel = new JLabel10;創(chuàng)建背景框組件數(shù)組int x = 20; for (int i = 0; i 10; i+) groundLabeli = new JLabel();創(chuàng)建背景框組件 groundLabeli .setBorder(javax.swing.BorderFactory .createEtchedBorder(javax.swing.border.EtchedBorder.RAISED); groundLabeli.setBounds(x, 25, 71, 96);設置組件的大小 x += 101; this.pan

49、e.add(groundLabeli);向容器添加組件 this.setVisible(true); this.deal();運行程序,從發(fā)牌去發(fā)出一組紙牌.4.3.3紙牌的初始化以與發(fā)牌操作代碼實現(xiàn)如下:public void initCards() /如果紙牌已被賦值,即將其從框架的面板中移去if (cards0 != null) for (int i = 0; i 104; i+) pane.remove(cardsi); int n = 0; /通過難度等級,為n賦值if (this.grade = Spider.EASY) n = 1; else if (this.grade = S

50、pider.NATURAL) n = 2; else n = 4; /為card賦值 for (int i = 1; i = 8; i+) for (int j = 1; j = 13; j+) cards(i - 1) * 13 + j - 1 = new PKCard(i % n + 1) + - + j, this);假設n=1,此時i%n的值為0,則1%n+1的值為1,所以創(chuàng)建的圖片應該是1-1到1-13全是黑桃,為同一花色,n等于其它值時類似。 如圖所示:簡單,單一花色:中級,雙高級,四花色:/隨機紙牌初始化this.randomCards();將紙牌的順序打亂 /* *紙牌隨機分配

51、 */public void randomCards() PKCard temp = null; /隨機生成牌號for (int i = 0; i 52; i+) int a = (int) (Math.random() * 104); int b = (int) (Math.random() * 104); temp = cardsa; cardsa = cardsb; cardsb = temp; 設置紙牌的位置 public void setCardsLocation() table = new Hashtable(); c = 0; finish = 0; n = 0; a = 0;

52、int x = 883; int y = 580;坐標位于界面的右下角區(qū)域/初始化待展開的紙牌 for (int i = 0; i 6; i+) for (int j = 0; j 5; i-) for (int j = 0; j = 104) continue;值超過104則退出本次循環(huán) pane.add(cardsn);將索引值所指的紙牌添加到面板容器 cardsn.turnRear();將紙牌轉到背面去 cardsn.moveto(new Point(x, y);將紙牌移動的固定的位置上去 table.put(new Point(x, y), cardsn);將紙牌與其對應的位置存入到哈

53、希表中 x += 101;背景框間隔的X值為101 x = 20;X坐標回到原先的位置處 y -= 5;Y坐標會向下移動5個單位,表示第二行紙牌的初始化開始 方法:游戲運行public void deal() this.setNA(); /判斷10列中是否空列for (int i = 0; i 10; i+) if (this.getLastCardLocation(i) = null) JOptionPane.showMessageDialog(this, 有空位不能發(fā)牌!, 提示, JOptionPane.WARNING_MESSAGE); return; int x = 20;for (

54、int i = 0; i 10; i+) Point lastPoint = this.getLastCardLocation(i); /這牌應“背面向上”if (c = 0) lastPoint.y += 5;當還沒有發(fā)過牌時,每列的紙牌中y坐標相差5個單位。 /這牌應“正面向上”else lastPoint.y += 20;否則是兩正面顯示紙牌差值table.remove(cardsc + i.getLocation(); cardsc + i.moveto(lastPoint); table.put(new Point(lastPoint), cardsc + i); cardsc +

55、i.turnFront(); cardsc + i.setCanMove(true);/將組件card移動到容器中指定的順序索引。 this.pane.setComponentZOrder(cardsc + i, 1);Point point = new Point(lastPoint); if (cardsc + i.getCardValue() = 1) int n = cardsc + i.whichColumnAvailable(point); point.y -= 240; PKCard card = (PKCard) this.table.get(point); if (card

56、!= null & card.isCardCanMove() this.haveFinish(n);判斷紙牌是否可以回收以與回收的總次數(shù) x += 101; c += 10; 4.3.4紙牌的移動以與放置代碼實現(xiàn)如下:用鼠標拖動紙牌public void mouseDragged(MouseEvent arg0) if (canMove)int x = 0;int y = 0;Point p = arg0.getPoint();x = p.x - point.x;y = p.y - point.y;this.moving(x, y);方法:放置紙牌public void setNextCard

57、Location(Point point)PKCard card = main.getNextCard(this);if (card != null)if (point = null)card.setNextCardLocation(null);main.table.remove(card.getLocation();card.setLocation(card.initPoint);main.table.put(card.initPoint, card);elsepoint = new Point(point);point.y += 20;card.setNextCardLocation(po

58、int);point.y -= 20;main.table.remove(card.getLocation();card.setLocation(point);main.table.put(card.getLocation(), card);card.initPoint = card.getLocation();4.3.5顯示當前紙牌可行的操作:代碼實現(xiàn)如下:返回值:void方法:顯示可移動的操作public void showEnableOperator() int x = 0; out: while (true) Point point = null; PKCard card = null

59、; do if (point != null)n+; point = this.getLastCardLocation(n); while (point = null) point = this.getLastCardLocation(+n); if (n = 10) n = 0; x+; if (x = 10) break out; card = (PKCard) this.table.get(point); while (!card.isCardCanMove(); while (this.getPreviousCard(card) != null & this.getPreviousCa

60、rd(card).isCardCanMove() card = this.getPreviousCard(card); if (a = 10)a = 0; for (; a 10; a+) if (a != n) Point p = null; PKCard c = null; do if (p != null)a+;p = this.getLastCardLocation(a); int z = 0; while (p = null) p = this.getLastCardLocation(+a); if (a = 10) a = 0; if (a = n) a+; z+; if (z =

溫馨提示

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

最新文檔

評論

0/150

提交評論