Java課程設計報告—蜘蛛紙牌(總19頁_第1頁
Java課程設計報告—蜘蛛紙牌(總19頁_第2頁
Java課程設計報告—蜘蛛紙牌(總19頁_第3頁
Java課程設計報告—蜘蛛紙牌(總19頁_第4頁
Java課程設計報告—蜘蛛紙牌(總19頁_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、面向對象程序設計課程設計報告JAVA程序設計課程設計 之 蜘蛛紙牌學院:年級:班級:指導老師: 小組成員: 時間:課程設計題目JAVA課程設計蜘蛛紙牌學院計算機學院專業(yè)網(wǎng)絡工程 年級2009已知參數(shù)和設計要求:蜘蛛紙牌的主要功能模塊包括:a、游戲界面的布局以及紙牌的設定;b、能夠設定不同等級以實現(xiàn)游戲難易度的不同;c、實現(xiàn)游戲主功能;d、實現(xiàn)幫助功能;e、實現(xiàn)退出功能。要求以小組為單位,用JAVA實現(xiàn)蜘蛛紙牌的主要功能模塊;可以根據(jù)自己對蜘蛛紙牌游戲的理解,對實現(xiàn)的內(nèi)容進行擴展最后需要提供的材料包括課程設計報告1份,程序拷貝1份(包括源代碼和可執(zhí)行程序)。學生應完成的工作:根據(jù)JAVA程序設計

2、的思想和編程技術,設計實現(xiàn)蜘蛛紙牌游戲。上機調(diào)試并能正確運行,并提交完整的設計報告和軟件程序拷貝。目前資料收集情況(含指定參考資料):Java程序設計,朱慶生,古平等著,清華大學出版社,2011,1Java編程,王偉平等著,清華大學出版社,2010,5Java課程設計案例精編黃曉東編著,中國水利水電出版社出版Java程序設計實用教程張永常主編,電子工業(yè)出版社出版課程設計時間為一周,從15周星期一開始(2011年12月12日),到15周星期五結束(2011年12月16日)。課程設計以組為單位進行。每組34個人。星期一進行蜘蛛紙牌游戲的內(nèi)容和規(guī)則設計。星期二查找資料解決具體的技術問題。星期三用JA

3、VA語言實現(xiàn)程序。星期四精星課堂演示程序以及完成課程設計報告。星期五提交程序和課程設計報告。本組由組成任務下達日期 年 月 日完成日期 年 月 日指導教師 (簽名)學 生 (簽名) 目錄第一章 課程設計要求1題目名稱1題目類型1課程設計目的1實驗原理1實驗內(nèi)容1第二章 設計概要22.1 功能設計22.2 程序流程22.3功能分析31. 主要界面:32初始化紙牌及發(fā)牌操作:43紙牌移動放置操作:74.回收紙牌操作:85.幫助菜單功能的實現(xiàn):96.退出功能的實現(xiàn):10第三章 調(diào)試分析與測試結果11第四章 設計總結15第五章 參考文獻16第一章 課程設計要求題目名稱:蜘蛛紙牌游戲題目類型:設計型課程

4、設計目的:學會綜合運用已學的JAVA知識,用面向對象的技術實現(xiàn)一個小型的應用程序。實驗原理:面向對象程序分析與設計、類的靈活運用、繼承技術、多態(tài)技術、異常處理、GUI程序設計等。實驗內(nèi)容:參照windows游戲蜘蛛紙牌,自己編寫設計實現(xiàn)其功能,它具有如下一些功能:(1)設計一個游戲界面,包括玩牌區(qū)、發(fā)牌區(qū)和回收區(qū)。(2)紙牌以及其背景的設定。(3)移動紙牌。使用鼠標將較小的紙牌拖放到較大的紙牌下方,可以拖動一組紙牌,當要求這組紙牌是同一個花色,并且這一組紙牌從上到下是從大到小排列的,且不間斷。(4)回收紙牌。當某列出現(xiàn)同一花色,從上到下依次是從K到A的不間組合時,這組紙牌將被回收到回收區(qū)中。(

5、5)發(fā)牌。用鼠標單擊發(fā)牌區(qū),若發(fā)牌區(qū)還有剩余的紙牌,則將發(fā)出一疊紙牌共10張,依次添加到玩牌區(qū)的10列紙牌最下方,但要求這10列紙牌沒有空白列。(6)若玩家不了解游戲規(guī)則可以點擊幫助獲得游戲方法。(7)級別設定。點擊“游戲”菜單中選取游戲難以級別,有3種級別,分別對應初級、中級、高級。(8)退出游戲。第二章 設計概要2.1 功能設計編寫程序以實現(xiàn)游戲蜘蛛紙牌的功能。1、設計游戲界面。2、紙牌以及其背景的設定。3、移動紙牌。4、回收紙牌。5、發(fā)牌。6、若玩家不了解游戲規(guī)則可以點擊幫助獲得游戲方法。7、級別設定。8、退出游戲。2.2 程序流程2.3功能分析1. 主要界面:以下是主菜單界面的主要代碼

6、:JMenu jNewGame = new JMenu(游戲);JMenu jHelp = new JMenu(幫助);JMenuItem jItemAbout = new JMenuItem(關于);JMenuItem jItemOpen = new JMenuItem(開始新游戲);JMenuItem jItemDeal = new JMenuItem(發(fā)牌);JMenuItem jItemExit = new JMenuItem(退出);JRadioButtonMenuItem jRMItemEasy = new JRadioButtonMenuItem(初級:單花色);/菜單中的可選項

7、按鈕JRadioButtonMenuItem jRMItemNormal = new JRadioButtonMenuItem(中級:雙花色);JRadioButtonMenuItem jRMItemHard = new JRadioButtonMenuItem(高級:四花色);public SpiderMenuBar(Spider spider) this.main = spider;jNewGame.add(jItemOpen);jNewGame.add(jItemDeal);jNewGame.addSeparator();/添加劃分線jNewGame.add(jRMItemEasy);j

8、NewGame.add(jRMItemNormal);jNewGame.add(jRMItemHard);jNewGame.addSeparator();jNewGame.add(jItemExit);ButtonGroup group = new ButtonGroup();/(用來獲取JRadioButtonMenuItem 的值)group.add(jRMItemEasy);group.add(jRMItemNormal);group.add(jRMItemHard);jHelp.add(jItemAbout);this.add(jNewGame);this.add(jHelp);/添加

9、到菜單欄以下是游戲窗口界面初始化的主要代碼:pane = this.getContentPane(); / 獲得容器pane.setBackground(new Color(0, 112, 26);/ 設置背景顏色clickLabel = new JLabel(); / 發(fā)牌區(qū)的鼠標點擊響應區(qū)域clickLabel.setBounds(890, 580, 110, 96); / 設置響應區(qū)域大小與坐標clickLabel.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.

10、RAISED);pane.add(clickLabel); / 將響應區(qū)域添加到容器中this.initCards();/ 紙牌初始化this.randomCards();/ 隨機分配紙牌this.setCardsLocation();/ 為紙牌設置坐標位置this.deal(); / 從右下角發(fā)出一疊紙牌。游戲剛開始時,需要先發(fā)出一疊紙牌。groundLabel = new JLabel10;/ 創(chuàng)建背景框數(shù)組,一共有10個背景框。int x = 20;/ 背景框的x坐標,10個背景框是并排放置的,y坐標相等。第一個背景框的x坐標為20。for (int i = 0; i 10; i+) /

11、 循環(huán)創(chuàng)建背景框,并設置其坐標大小等屬性groundLabeli = new JLabel();/ 創(chuàng)建背景框groundLabeli.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED);/ 為Label設置邊框/ ,/ 形成背景框groundLabeli.setBounds(x, 25, 71, 96);/ 設置背景框的大小與坐標x += 101; / 相鄰的背景框的x坐標差值為101。this.pane.add(groundLabeli);/ 將背景框添

12、加到容器中this.setVisible(true);/ 顯示窗口2初始化紙牌及發(fā)牌操作: 初始化紙牌的主要代碼(包括所有紙牌生成及存入數(shù)組,右下角發(fā)牌區(qū)紙牌初始化以及表面顯示紙牌初始化):所有紙牌的生成及存入數(shù)組代碼: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.gr

13、ade = Spider.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%8的值永遠是0,所以i%8+1的值永遠是1,因此n為1時,創(chuàng)建的card的名稱是1/ -1到1-13,全是黑桃。其他等級類似。 /紙牌隨機分配public void randomCards() / 將紙牌的順序打亂,否則牌號的將是從A到K的出現(xiàn)規(guī)

14、律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;右下角發(fā)牌區(qū)紙牌的初始化代碼:int x = 883;/ 將坐標定位到右下角發(fā)牌區(qū)int y = 580;for (int i = 0; i 6; i+) / 初始化右下角發(fā)牌區(qū)的紙牌,共6疊for (int j = 0; j 5; i-) / 初始化玩牌區(qū)的

15、紙牌,共5行for (int j = 0; j = 104) / 如果索引值超出數(shù)組下標continue; / 退出本次循環(huán),執(zhí)行外層循環(huán)pane.add(cardsn); / 將索引處的紙牌添加到容器中cardsn.turnRear(); / 將紙牌轉向背面cardsn.moveto(new Point(x, y); / 將紙牌放在固定的位置上map.put(new Point(x, y), cardsn); / 將紙牌及其坐標值存入map中x += 101; / 每兩列之間的x坐標相距101個像素x = 20; / x坐標回到起點位置y -= 5; / 主坐標向上移5個像素發(fā)牌操作功能代碼

16、:public void deal() / 發(fā)牌,指從右下角的發(fā)牌區(qū)發(fā)牌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 (int i = 0; i 10; i+) Point lastPoint = this.getLastCardLocation(i);/ 這張

17、牌應“背面向上”if (c = 0) / 當還沒有發(fā)過牌時,玩牌區(qū)的紙牌列中,每兩張紙牌之間的y坐標值相差5,/ 指的是背面牌與背面牌之間以及背面牌與第一張正面牌之間的y距離lastPoint.y += 5;/ 這張牌應“正面向上”else / 兩張正面牌之間的y距離lastPoint.y += 20;map.remove(cardsc + i.getLocation();cardsc + i.moveto(lastPoint);map.put(new Point(lastPoint), cardsc + i);cardsc + i.turnFront();cardsc + i.setCanM

18、ove(true);/ 將組件card移動到容器中指定的順序索引。this.pane.setComponentZOrder(cardsc + i, 1);Point point = new Point(lastPoint);if (cardsc + i.getValue() = 1) int n = cardsc + i.whichColumnAvailable(point);point.y -= 240;PKCard card = (PKCard) this.map.get(point);if (card != null & card.isCanMove() this.haveFinish(

19、n);x += 101;c += 10;3紙牌移動放置操作: /用鼠標拖動紙牌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 setNextCardLocation(Point point) PKCard card = main.getNextCard(this);if (card

20、!= null) if (point = null) card.setNextCardLocation(null);main.map.remove(card.getLocation();/ 先從HashMap中刪除cardcard.setLocation(card.initPoint); / 為card設置新的坐標main.map.put(card.initPoint, card); / 再將card添加到HashMap中 else point = new Point(point);point.y += 20;card.setNextCardLocation(point);point.y -=

21、 20;main.map.remove(card.getLocation();card.setLocation(point);main.map.put(card.getLocation(), card);card.initPoint = card.getLocation();4.回收紙牌操作:回收紙牌及過關判定功能主要代碼:public void haveFinish(int column) Point point = this.getLastCardLocation(column);PKCard card = (PKCard) this.map.get(point);do this.map.

22、remove(point);card.moveto(new Point(20 + finish * 10, 580);/ 將組件移動到容器中指定的順序索引。pane.setComponentZOrder(card, 1);/ 將紙牌新的相關信息存入HashMapthis.map.put(card.getLocation(), card);card.setCanMove(false);point = this.getLastCardLocation(column);if (point = null)card = null;elsecard = this.map.get(point); while

23、 (card != null & card.isCanMove();finish+;/ 如果8付牌全部組合成功,則顯示成功的對話框if (finish = 8) JOptionPane.showMessageDialog(this, 恭喜你,順利通過!, 成功,JOptionPane.PLAIN_MESSAGE);if (card != null) card.turnFront();card.setCanMove(true);5.幫助菜單功能的實現(xiàn):主要代碼如下:public class AboutDialog extends JDialog JPanel jMainPanel = new J

24、Panel();JTabbedPane jTabbedPane = new JTabbedPane();private JPanel jPanel1 = new JPanel();private JTextArea jt1 = new JTextArea(將電腦多次分發(fā)給你的牌按照相同的花色由大至小排列起來。直到桌面上的牌全都消失。);public AboutDialog() setTitle(蜘蛛牌);setSize(300, 200);setResizable(false);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);Container c = this.getContentPane();jt1.setSize(260, 200);jt1.setEditable(false);jt1.setLineWrap(true);jt1.setFont(new Font(楷體_GB2312, java.awt.Fo

溫馨提示

  • 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

提交評論