java課程設(shè)計(jì)-撲克游戲_第1頁(yè)
java課程設(shè)計(jì)-撲克游戲_第2頁(yè)
java課程設(shè)計(jì)-撲克游戲_第3頁(yè)
java課程設(shè)計(jì)-撲克游戲_第4頁(yè)
java課程設(shè)計(jì)-撲克游戲_第5頁(yè)
已閱讀5頁(yè),還剩20頁(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、課程設(shè)計(jì)說(shuō)明書(shū) NO.1撲克游戲1.課程設(shè)計(jì)的目的Java語(yǔ)言是當(dāng)今流行的網(wǎng)絡(luò)編程語(yǔ)言,它具有面向?qū)ο?、跨平臺(tái)、分布應(yīng)用等特點(diǎn)。面向?qū)ο蟮拈_(kāi)發(fā)方法是當(dāng)今世界最流行的開(kāi)發(fā)方法,它不僅具有更貼近自然的語(yǔ)義,而且有利于軟件的維護(hù)和繼承。為了進(jìn)一步鞏固課堂上所學(xué)到的知識(shí),深刻把握J(rèn)ava語(yǔ)言的重要概念及其面向?qū)ο蟮奶匦?,使我們能夠熟練的?yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計(jì)方法解決實(shí)際問(wèn)題的能力。通過(guò)此次課程設(shè)計(jì),鞏固所學(xué)Java語(yǔ)言基本知識(shí),增進(jìn)Java語(yǔ)言編輯基本功,掌握J(rèn)DK、Editplus、Eclipse、JCreator等開(kāi)發(fā)工具的運(yùn)用,拓寬常用類(lèi)庫(kù)的應(yīng)用。使學(xué)生通過(guò)該教學(xué)環(huán)節(jié)與手段,把所學(xué)課程及相關(guān)知

2、識(shí)加以融會(huì)貫通,全面掌握J(rèn)ava語(yǔ)言的編程思想及面向?qū)ο蟪绦蛟O(shè)計(jì)的方法,為今后從事實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。本設(shè)計(jì)使用JAVA語(yǔ)言開(kāi)發(fā)撲克游戲程序,將電腦多次分發(fā)給你的牌按照相同的花色由大至小排列起來(lái)。2.設(shè)計(jì)方案論證2.1設(shè)計(jì)思路 用java語(yǔ)言,編程實(shí)現(xiàn)紙牌游戲,擁有如下規(guī)則,將電腦多次分發(fā)給你的牌按照相同的花色由大至小排列起來(lái)。游戲分為三個(gè)難度,簡(jiǎn)單,普通,困難。簡(jiǎn)單為單一花色。困難所分發(fā)給的牌有四種花色。將大小相鄰的紙牌依次排列到一起當(dāng)每種花色的全部紙牌都按順序排列到一起,則游戲結(jié)束。2.2設(shè)計(jì)方法將程序設(shè)計(jì)成為4個(gè)類(lèi),AboutDialog類(lèi)用于實(shí)現(xiàn)全部的對(duì)話。PKCard類(lèi)用于實(shí)現(xiàn)游

3、戲的規(guī)則。SpiderMenuBar類(lèi)用于實(shí)現(xiàn)各個(gè)模塊的功能。Spider為主界面。在SpiderMenuBar建立主界面菜單,通過(guò)構(gòu)造函數(shù)public SpiderMenuBar構(gòu)造函數(shù),生成JMenuBar的圖形界面,對(duì)菜單中各按鈕進(jìn)行事件監(jiān)聽(tīng)。在該方法中調(diào)用spider的構(gòu)造方法,在其中生成SpiderMenuBar對(duì)象,并放置在框架之上,同時(shí)設(shè)置框架標(biāo)題 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.2框架大小背景顏色,布局為空。public Spider()setTitle("陶時(shí)撲克"); setDefaultCloseOperation(javax.swing.JFra

4、me.EXIT_ON_CLOSE);setSize(1024, 742);setJMenuBar(new SpiderMenuBar(this); pane = this.getContentPane(); pane.setBackground(new Color(14, 25, 26); pane.setLayout(null); clickLabel = new JLabel(); clickLabel.setBounds(883, 606, 121, 96); pane.add(clickLabel);在Spider類(lèi)中有如下方法:newGame新游戲的方法,setGrade設(shè)置等級(jí)方法

5、,初始化等級(jí)方法。setGrade,randomCards隨即函數(shù)。PKCard getPreviousCard獲得card上面的那張牌的方法等。由PKCard getPreviousCard,PKCard getNextCard,getLastCardLocation方法對(duì)類(lèi)PKCard調(diào)用,代碼如下:public PKCard getPreviousCard(PKCard card) Point point = new Point(card.getLocation(); point.y -= 5; card = (PKCard) table.get(point); if (card !=

6、null)return card; point.y -= 15; card = (PKCard) table.get(point); 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.3 return card;public PKCard getNextCard(PKCard card) Point point = new Point(card.getLocation(); point.y += 5;card = (PKCard) table.get(point); if (card != null)return card; point.y += 15; card = (PKCard) table.get(

7、point); return card;public Point getLastCardLocation(int column) Point point = new Point(20 + column * 101, 25); PKCard card = (PKCard) this.table.get(point); if (card = null) return null; while (card != null) point = card.getLocation(); card = this.getNextCard(card); return point;public Point getGr

8、oundLabelLocation(int column) return new Point(groundLabelcolumn.getLocation();public void setGroundLabelZOrder() for (int i = 0; i < 10; i+) 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.4pane.setComponentZOrder(groundLabeli, 105 + i); 23功能模塊圖圖1 功能模塊圖 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.52.4程序流程圖圖2 程序流程圖3.設(shè)計(jì)結(jié)果與分析(1)首先是對(duì)游戲中主菜單的設(shè)計(jì),設(shè)計(jì)的菜單包括兩個(gè)大部

9、分,選項(xiàng)和幫助,如圖3所示: 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.6圖3 顯示菜單通過(guò)如下代碼實(shí)現(xiàn):JMenu jNewGame = new JMenu("選項(xiàng)"); JMenu jHelp = new JMenu("幫助");(2)在選項(xiàng)菜單下面包含7級(jí)子菜單,如圖4所示:圖4 顯示菜單 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.7通過(guò)如下代碼實(shí)現(xiàn):JMenuItem jItemOpen = new JMenuItem("開(kāi)局");JMenuItem jItemPlayAgain = new JMenuItem("重發(fā)牌&quo

10、t;);JRadioButtonMenuItem jRMItemEasy = new JRadioButtonMenuItem("簡(jiǎn)單");JRadioButtonMenuItem jRMItemNormal = new JRadioButtonMenuItem("較難");JRadioButtonMenuItem jRMItemHard = new JRadioButtonMenuItem("困難");JMenuItem jItemExit = new JMenuItem("退出");JMenuItem jIte

11、mValid = new JMenuItem("顯示可執(zhí)行行操作");(3)幫助下面包含2級(jí)子菜單,分別為游戲規(guī)則和聲明,如圖5所示:圖5 顯示幫助通過(guò)如下代碼實(shí)現(xiàn):JTabbedPane jTabbedPane = new JTabbedPane();private JPanel jPanel1 = new JPanel();private JPanel jPanel2 = new JPanel();(4)主窗體通過(guò)類(lèi)Spider實(shí)現(xiàn)。將窗體名稱設(shè)置為“陶時(shí)撲克”,框架的大小設(shè)置為1024*742,背景顏色設(shè)置為黑色,布局管理設(shè)置為空,通過(guò)如下代碼實(shí)現(xiàn):public Sp

12、ider()setTitle("陶時(shí)撲克"); 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.8setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);setSize(1024, 742);setJMenuBar(new SpiderMenuBar(this); pane = this.getContentPane();pane.setBackground(new Color(14, 25, 26);pane.setLayout(null);(5)進(jìn)入游戲之后,首先選擇開(kāi)始新游戲,通過(guò)類(lèi)Spider調(diào)用它的方法newGam

13、e方法,采用隨機(jī)函數(shù)隨機(jī)初始化牌的順序(這樣做的目的是,使游戲性增加可玩性,使每次出現(xiàn)牌的順序不同),如圖6所示。圖6 進(jìn)入新游戲界面用如下代碼實(shí)現(xiàn):public void newGame() this.randomCards(); this.setCardsLocation();this.setGroundLabelZOrder(); 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.9this.deal(); public int getC() return c; public void setGrade(int grade) this.grade = grade; public void initCa

14、rds() if (cards0 != null) for (int i = 0; i < 104; i+) pane.remove(cardsi); int n = 0;if (this.grade = Spider.EASY) n = 1; else if (this.grade = Spider.NATURAL) n = 2; else n = 4; 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) + &qu

15、ot;-" + j, this); 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.10 this.randomCards(); 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; (6)在游戲界面的右下角做一張圖片,顯示撲克牌的背面,同時(shí)點(diǎn)擊圖片,系統(tǒng)自動(dòng)

16、發(fā)牌(當(dāng)游戲無(wú)法繼續(xù)的時(shí)候,可以點(diǎn)擊該圖片,在每副紙牌上發(fā)一張牌,使得進(jìn)入僵局的紙牌游戲得以繼續(xù)進(jìn)行),運(yùn)行界面如圖7,圖8所示。 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.11圖7 發(fā)牌功能界面圖8 顯示發(fā)牌 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.12用如下代碼實(shí)現(xiàn):首先在界面上添加紙牌背面的圖片:public void turnRear() this.setIcon(new ImageIcon("images/6.gif"); this.isFront = false; this.canMove = false;public PKCard getPreviousCard(PKC

17、ard card) Point point = new Point(card.getLocation(); point.y -= 5; card = (PKCard) table.get(point); if (card != null)return card; point.y -= 15; card = (PKCard) table.get(point);return card; public PKCard getNextCard(PKCard card) Point point = new Point(card.getLocation(); point.y += 5; card = (PK

18、Card) table.get(point); if (card != null)return card; point.y += 15; card = (PKCard) table.get(point); return card; 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.13public Point getLastCardLocation(int column) Point point = new Point(20 + column * 101, 25); PKCard card = (PKCard) this.table.get(point); if (card = null) return n

19、ull; while (card != null) point = card.getLocation(); card = this.getNextCard(card); return point; public Point getGroundLabelLocation(int column) return new Point(groundLabelcolumn.getLocation(); public void setGroundLabelZOrder() for (int i = 0; i < 10; i+)pane.setComponentZOrder(groundLabeli,

20、105 + i); (7)在游戲中每次開(kāi)始游戲都由程序隨機(jī)發(fā)牌,發(fā)牌的過(guò)程是,先設(shè)置紙牌的初始位置由隨機(jī)函數(shù)產(chǎn)生,并隨機(jī)生成牌號(hào),設(shè)置紙牌的位置,初始化待展開(kāi)的紙牌,將紙牌放置到固定位置(這里調(diào)用PKcard類(lèi)中的setNextCardLocation方法調(diào)用圖片文件夾里的紙牌圖片),如圖9,圖10所示。 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.14圖9 圖片庫(kù)圖10 圖片被載入 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.15使用如下代碼實(shí)現(xiàn):for (int i = 0; i < 6; i+) for (int j = 0; j < 10; j+) int n = i * 10 + j;

21、pane.add(cardsn);cardsn.turnRear(); cardsn.moveto(new Point(x, y); table.put(new Point(x, y), cardsn); x += 10; x = 20; y = 45; for (int i = 10; i > 5; i-) for (int j = 0; j < 10; j+) int n = i * 10 + j; if (n >= 104) continue;pane.add(cardsn); cardsn.turnRear(); cardsn.moveto(new Point(x,

22、y); table.put(new Point(x, y), cardsn); x += 101; x = 20; y -= 5; 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.16public void showEnableOperator() int x = 0; out: while (true) Point point = null; PKCard card = null; do if (point != null)n+; point = this.getLastCardLocation(n); while (point = null) point = this.getLastCardLocat

23、ion(+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.getPreviousCard(card).isCardCanMove()card = this.getPreviousCard(card); if (a = 10)a = 0;for (; a < 10; a+) if (a !=

24、n) 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.17Point 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 = 10) break out; c = (PKCard) this.table.get(p); while (!c.isCardCanMove(); if (c.get

25、CardValue() = card.getCardValue() + 1) card.flashCard(card); try Thread.sleep(800); catch (InterruptedException e)e.printStackTrace(); c.flashCard(c); 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.18a+; if (a = 10)n+; break out; n+; if (n = 10)n = 0; x+; if (x = 10)break out; 通過(guò)調(diào)用如下代碼實(shí)現(xiàn)圖片的調(diào)用:public void setNextCardLocation(Poi

26、nt 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); 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.19elsepoint = new Point(point);point.y += 20;card.setNextCardLo

27、cation(point);point.y -= 20;main.table.remove(card.getLocation();card.setLocation(point);main.table.put(card.getLocation(), card);card.initPoint = card.getLocation();(8)進(jìn)入游戲之后能對(duì)游戲的難度進(jìn)行選擇,難度分為三種,分別為簡(jiǎn)單,較難,困難,簡(jiǎn)單為單一花色的紙牌進(jìn)行游戲,而較難和困難的紙牌花色相應(yīng)的增多。在設(shè)計(jì)時(shí)首先在SpiderMenuBar類(lèi)中,將三種難度的菜單實(shí)現(xiàn),然后通過(guò)調(diào)用PKcard的方法實(shí)現(xiàn)各難度的功能,如圖11

28、,12所示。 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.20圖11 難度選擇圖12 選擇困難 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.21通過(guò)如下代碼實(shí)現(xiàn):實(shí)現(xiàn)菜單分成三種難度:JRadioButtonMenuItem jRMItemEasy = new JRadioButtonMenuItem("簡(jiǎn)單"); JRadioButtonMenuItem jRMItemNormal = new JRadioButtonMenuItem("較難");JRadioButtonMenuItem jRMItemHard = new JRadioButtonMenuItem(&

29、quot;困難");jRMItemEasy.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) main.setGrade(Spider.EASY); main.initCards(); main.newGame(); 分別對(duì)菜單進(jìn)行事件監(jiān)聽(tīng),若選中相應(yīng)的難度登記則觸發(fā)Spider類(lèi)中的方法進(jìn)行實(shí)現(xiàn):jRMItemNormal.addActionListener(new java.awt.event.ActionL

30、istener() public void actionPerformed(java.awt.event.ActionEvent e) main.setGrade(Spider.NATURAL); main.initCards(); main.newGame(); jRMItemHard.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) main.setGrade(Spider.HARD);main.initCards()

31、; main.newGame(); 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.22jNewGame.addMenuListener(new javax.swing.event.MenuListener() public void menuSelected(javax.swing.event.MenuEvent e) if(main.getC() < 60) jItemPlayAgain.setEnabled(true); else jItemPlayAgain.setEnabled(false); public void menuDeselected(javax.swing.event.Men

32、uEvent e) public void menuCanceled(javax.swing.event.MenuEvent e) (9)退出游戲,點(diǎn)擊退出即可退出游戲,在SpiderMenuBar類(lèi)中actionPerformed方法實(shí)現(xiàn),如圖13所示。圖13 退出游戲 沈 陽(yáng) 大 學(xué)課程設(shè)計(jì)說(shuō)明書(shū) NO.23使用如下代碼實(shí)現(xiàn):jItemExit.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) main.dispose(); System.exit(0); 4.設(shè)計(jì)體會(huì)通過(guò)本次課程設(shè)計(jì),我學(xué)會(huì)了很多東西,在課堂上學(xué)習(xí)的知識(shí)是理論的,平時(shí)沒(méi)有多少機(jī)會(huì)去實(shí)踐,平時(shí)覺(jué)得自己JAVA學(xué)得還不錯(cuò)但真到想用它實(shí)現(xiàn)點(diǎn)什么的時(shí)候卻又覺(jué)得好多地方不知道如何下手。我的這個(gè)程序設(shè)計(jì)是以蜘蛛紙牌游戲作為基礎(chǔ),對(duì)其中很多地方進(jìn)行了修改,原來(lái)游戲只由2個(gè)難度,我在原來(lái)的基礎(chǔ)上對(duì)游戲進(jìn)行修改增加了一個(gè)難度,也增加了游戲的可玩性,還有游戲中好多

溫馨提示

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