版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> JAVA課程設(shè)計(jì)報(bào)告</p><p><b> 蜘蛛紙牌游戲</b></p><p> 專業(yè)班級(jí): 09級(jí)網(wǎng)絡(luò)工程(2)班 </p><p> 學(xué)生姓名: </p><p> 學(xué)生學(xué)號(hào):
2、 </p><p> 小組成員: </p><p> 指導(dǎo)教師姓名: </p><p><b> 目 錄</b></p><p> 1. 選題目的與系統(tǒng)概述……………
3、……………………………2</p><p> 2. 系統(tǒng)可行性分析與相關(guān)技術(shù)背景分析………………………3</p><p> 2.1系統(tǒng)可行性分析…………………………………………………3</p><p> 2.2相關(guān)技術(shù)背景分析………………………………………………3</p><p> 3. 系統(tǒng)設(shè)計(jì)與關(guān)鍵技術(shù)………………………………………
4、…4</p><p> 3.1系統(tǒng)設(shè)計(jì)…………………………………………………………4</p><p> 3.2關(guān)鍵技術(shù)…………………………………………………………5</p><p> 4.系統(tǒng)測(cè)試與操作實(shí)施方法……………………………………9</p><p> 4.1進(jìn)入游戲運(yùn)行界面………………………………………………9</p&g
5、t;<p> 4.2 游戲的具體的操作過程…………………………………………9</p><p> 4.3進(jìn)入“幫助”菜單………………………………………………10</p><p> 4.4游戲中的異常處理情況…………………………………………11</p><p> 5.系統(tǒng)設(shè)計(jì)總結(jié)與回顧………………………………………12</p><
6、;p> 6.附錄……………………………………………………………13</p><p> 6.1 AboutDialog.java……………………………………………13</p><p> 6.2 PKCard.java……………………………………………………14</p><p> 6.3 Spider.java………………………………………………………20
7、</p><p> 6.4 SpiderMenuBar.java……………………………………………29</p><p> 1.選題目的與系統(tǒng)概述</p><p> 隨著經(jīng)濟(jì)全球一體化的逐步加劇,人們的生活節(jié)奏越來越快。蜘蛛紙牌游戲的一種,旨在讓工作學(xué)習(xí)之后疲憊的玩家有一個(gè)輕愉快的放松方式。與普通的紙牌相比,降低了一點(diǎn)難度。游戲簡(jiǎn)單級(jí)別由8組A-K的清一色黑桃牌
8、面組成,取消了紅黑相間的游戲規(guī)則,更突然出強(qiáng)化了玩家在安排事物方面的能力。</p><p> 蜘蛛紙牌游戲?qū)崿F(xiàn)了與Windows系列操作系統(tǒng)中自帶的蜘蛛紙牌游戲類似的功能。該游戲程序中采用Windows系列中游戲的圖片,運(yùn)用Java語(yǔ)言設(shè)計(jì)了線程、鼠標(biāo)事件、紙牌的裝載、圖形界面的構(gòu)造、組件監(jiān)聽接口的實(shí)現(xiàn)、生成蜘蛛紙牌游戲的框架、實(shí)現(xiàn)游戲中的方法,是一種休閑益智游戲。</p><p>
9、2.系統(tǒng)可行性分析與相關(guān)技術(shù)背景分析</p><p> 2.1系統(tǒng)可行性分析</p><p> 蜘蛛紙牌游戲規(guī)則是:</p><p> 將電腦分發(fā)給你的牌按照相同的花色又打至小排列起來,直到桌面上的牌全都消失。</p><p> 可執(zhí)行的牌必須為明牌</p><p><b> 單牌移動(dòng)規(guī)則</
10、b></p><p><b> 多拍移動(dòng)規(guī)則</b></p><p> 游戲分三個(gè)等級(jí):(1)簡(jiǎn)答:?jiǎn)我换ㄉ唬?)中級(jí):雙花色;(3)四花色。</p><p> 2.2相關(guān)技術(shù)背景分析</p><p> 2.2.1蜘蛛紙牌游戲是基于Eclipse平臺(tái)的Java程序。Eclipse的背景如下:
11、 </p><p> Eclipse最初是IBM公司的一個(gè)軟件產(chǎn)品。2001年11月7日發(fā)布Eclipse 1.0版本,以后幾乎每年都更新一次版本,到2011年6月22日,發(fā)布最新版本Eclipse 3.7(INDIGO)。盡管Eclipse是使用Java語(yǔ)言開發(fā)的,但它的用途并不僅限于Java語(yǔ)言。例如,支持諸如C/C++、COBOL和Eiffel等編程語(yǔ)言的插件已經(jīng)可用。Eclipse平臺(tái)的主要任務(wù)是為開
12、發(fā)者提供能夠使用各種工具無縫集成的機(jī)制和需要遵守的規(guī)則。Eclipse的特點(diǎn)是:(1)基于Java、開發(fā)源碼的可擴(kuò)展平臺(tái);(2)一個(gè)免費(fèi)得Java IDE(Java 集成開發(fā)環(huán)境)。</p><p> 2.2.2本課程設(shè)計(jì)是在最新版本Eclipse 3.7(INDIGO)下運(yùn)行,進(jìn)入界面如下:</p><p> 3.系統(tǒng)設(shè)計(jì)與關(guān)鍵技術(shù)</p><p><b
13、> 3.1系統(tǒng)設(shè)計(jì)</b></p><p> 3.1.1蜘蛛游戲可以分為四個(gè)模塊,它們之間的關(guān)系如下:</p><p> (1)Spider.Java游戲開始的主函數(shù),調(diào)用中及實(shí)現(xiàn)游戲中的方法,即調(diào)用 SpiderMenuBar.java</p><p> (2)SpiderMenuBar調(diào)用游戲框架和游戲菜單,即調(diào)用PKCard.java
14、和AboutDialog.Java</p><p> (3) PKCard.java紙牌的調(diào)用和移動(dòng)位置及紙牌屬性,即調(diào)用Spider.Java</p><p> 3.1.2蜘蛛游戲的流程圖如圖3-1所示。</p><p><b> 圖3-1</b></p><p> 3.1.3蜘蛛游戲可以分為四個(gè)模塊各項(xiàng)功能如
15、下:</p><p> ?。?)AboutDialog.java 其作用是生成游戲的“幫助”下拉菜單</p><p> (2)PKCard.java 其作用是定義紙牌屬性,包括名稱、位置等相關(guān)信息。并管理所有可執(zhí)行操作,如啟動(dòng)Flash線程、點(diǎn)擊鼠標(biāo)、釋放鼠標(biāo)、放置紙牌、判斷可用列、用鼠標(biāo)拖動(dòng)紙牌、移動(dòng)(x,y)個(gè)位置、令紙牌顯示正面、令紙牌顯示背面、將紙牌移動(dòng)到點(diǎn)point、判斷紙牌是
16、否移動(dòng)、判斷card是否是正面等 。</p><p> (3)Spider.java其作用是設(shè)置游戲等級(jí)、框架屬性、紙牌初始化、異常及成功處理等</p><p> (4)SpiderMenuBar.java 其作用是添加“游戲”下拉列表所有菜單選項(xiàng),實(shí)現(xiàn)各組件的事件偵聽 。主要包括三個(gè)模塊:圖形用戶界面的構(gòu)建、組件監(jiān)聽接口的實(shí)現(xiàn)、顯示可執(zhí)行操作的線程。</p><p
17、><b> 3.2關(guān)鍵技術(shù)</b></p><p> 3.2.1 AboutDialog.java 中的“關(guān)于”窗口</p><p> private JTextArea jt1 = new JTextArea("將電腦多次分發(fā)給你的牌按照相同的花色由大至小排列起來。直到桌面上的牌全都消失。"); //用來顯示“游戲規(guī)則”對(duì)應(yīng)的文本框
18、</p><p> private JTextArea jt2 = new JTextArea("該游戲中,紙牌的圖片來自于Windows XP的紙牌游戲,圖片權(quán)屬于原作者所有!"); //用來顯示“聲明”對(duì)應(yīng)的文本框</p><p> 3.2.2 PKCard.java當(dāng)有空位的時(shí)候,啟動(dòng)Flash線程,繼續(xù)進(jìn)行發(fā)牌。</p><p>
19、public void flashCard(PKCard card){ </p><p> new Flash(card).start();//不停的獲得下一張牌,直到完成</p><p> if(main.getNextCard(card) != null){</p><p> card.flashCard(main.getNextCard(card));
20、 }}</p><p> class Flash extends Thread{</p><p> private PKCard card = null;</p><p> public Flash(PKCard card){</p><p> this.card = card;</p><p><b&g
21、t; }</b></p><p> 3.2.3 PKCard.java中點(diǎn)擊“游戲”->“顯示可行操作”后,可以連續(xù)的紙牌會(huì)閃爍一下,即一張是圖片本身一張是白色圖片。這里有線程的run()方法來實(shí)現(xiàn)。</p><p> public void run(){</p><p> boolean is = false;</p>&l
22、t;p> ImageIcon icon = new ImageIcon("images/white.gif");</p><p> for (int i = 0; i < 4; i++){</p><p><b> try{</b></p><p> Thread.sleep(200);</p>
23、;<p><b> }</b></p><p> catch (InterruptedException e){</p><p> e.printStackTrace();</p><p><b> }</b></p><p> if (is){ this.card.turn
24、Front();</p><p> is = !is; }</p><p> else{ this.card.setIcon(icon);</p><p><b> is = !is;</b></p><p> }// 根據(jù)當(dāng)前外觀將card的UI屬性重置</p><p> card.u
25、pdateUI();}}}</p><p> 3.2.4 PKCard.java 放置紙牌</p><p> public void setNextCardLocation(Point point){</p><p> PKCard card = main.getNextCard(this);</p><p> if (card !=
26、 null){</p><p> if (point == null){</p><p> card.setNextCardLocation(null);</p><p> main.table.remove(card.getLocation());</p><p> card.setLocation(card.initPoint);
27、</p><p> main.table.put(card.initPoint, card);</p><p><b> }</b></p><p><b> else{</b></p><p> point = new Point(point);</p><p>
28、 point.y += 20;</p><p> card.setNextCardLocation(point);</p><p> point.y -= 20;</p><p> main.table.remove(card.getLocation());</p><p> card.setLocation(point);</
29、p><p> main.table.put(card.getLocation(), card);</p><p> card.initPoint = card.getLocation();}}}</p><p> 3.2.5 PKCard.java 判斷可用列</p><p> public int whichColumnAvailabl
30、e(Point point){</p><p> int x = point.x;</p><p> int y = point.y;</p><p> int a = (x - 20) / 101;</p><p> int b = (x - 20) % 101;</p><p> if (a != 9){
31、</p><p> if (b > 30 && b <= 71){</p><p><b> a = -1; }</b></p><p> else if (b > 71){</p><p><b> a++;}}</b></p><p&
32、gt; else if (b > 71){</p><p><b> a = -1; }</b></p><p> if (a != -1){</p><p> Point p = main.getLastCardLocation(a);</p><p> if (p == null) p = main.
33、getGroundLabelLocation(a);</p><p> b = y - p.y;</p><p> if (b <= -96 || b >= 96){</p><p> a = -1; }}</p><p> return a; }</p><p> 3.2.6 Spider.ja
34、va中對(duì)鼠標(biāo)事件監(jiān)聽程序進(jìn)行初始布局</p><p> clickLabel.addMouseListener(new MouseAdapter(){</p><p> public void mouseReleased(MouseEvent me){</p><p> if (c < 60){</p><p> Spider.
35、this.deal();</p><p><b> }} });</b></p><p> 3.2.7 SpiderMenuBar.java“游戲”下拉菜單中游戲級(jí)別設(shè)置</p><p> jRMItemEasy.addActionListener(new java.awt.event.ActionListener() { </p
36、><p> public void actionPerformed(java.awt.event.ActionEvent e) { </p><p> main.setGrade(Spider.EASY);</p><p> main.initCards();</p><p> main.newGame();</p>
37、<p> }}); //“簡(jiǎn)單級(jí)別”默認(rèn)設(shè)置</p><p> jRMItemNormal.addActionListener(new java.awt.event.ActionListener() { </p><p> public void actionPerformed(java.awt.event.ActionEvent e) { </p>&
38、lt;p> main.setGrade(Spider.NATURAL);</p><p> main.initCards();</p><p> main.newGame();</p><p> } });//“中級(jí)”</p><p> jRMItemHard.addActionListener(new java.awt.ev
39、ent.ActionListener() { </p><p> public void actionPerformed(java.awt.event.ActionEvent e) { </p><p> main.setGrade(Spider.HARD);</p><p> main.initCards();</p><p>
40、 main.newGame();</p><p><b> }</b></p><p><b> });//“高級(jí)”</b></p><p> jNewGame.addMenuListener(new javax.swing.event.MenuListener() { </p><p>
41、 public void menuSelected(javax.swing.event.MenuEvent e) { </p><p> if(main.getC() < 60){</p><p> jItemPlayAgain.setEnabled(true);</p><p><b> }</b></p>&
42、lt;p><b> else{</b></p><p> jItemPlayAgain.setEnabled(false); } }</p><p> public void menuDeselected(javax.swing.event.MenuEvent e) {} </p><p> public void menu
43、Canceled(javax.swing.event.MenuEvent e) {} });</p><p> 3.2.8 SpiderMenuBar.java "中顯示可行操作"功能控制</p><p> jItemValid.addActionListener(new java.awt.event.ActionListener() { </p>
44、<p> public void actionPerformed(java.awt.event.ActionEvent e) { </p><p> new Show().start();</p><p><b> }});</b></p><p> 3.2.9 為組件添加事件監(jiān)聽addActionListener并實(shí)現(xiàn)
45、</p><p> jItemOpen.addActionListener(new java.awt.event.ActionListener() { </p><p> public void actionPerformed(java.awt.event.ActionEvent e) { </p><p> main.newGame();</p&
46、gt;<p><b> }</b></p><p><b> });//“開局”</b></p><p> 3.2.10“重新發(fā)牌”功能控制</p><p> jItemPlayAgain.addActionListener(new java.awt.event.ActionListener() {
47、</p><p> public void actionPerformed(java.awt.event.ActionEvent e) { </p><p> if(main.getC() < 60){</p><p> main.deal();</p><p><b> }} });</b><
48、/p><p> 4.系統(tǒng)測(cè)試與操作實(shí)施方法</p><p> 4.1進(jìn)入游戲運(yùn)行界面。如圖4-1所示。</p><p> 圖4-1“游戲”下拉菜單列表</p><p> 4.2 游戲的具體的操作過程</p><p> ?。?)開始時(shí),為“簡(jiǎn)單”級(jí)別,花色為黑桃,如圖4-2所示。</p><p&g
49、t; ?。?)將紙牌從大到小將紙牌排列,當(dāng)從K到A排好序后,游戲?qū)⑺信茪w并到界面的左下方,如圖4-2到圖4-5所示。</p><p> ?。?)當(dāng)?shù)诎舜螝w并完畢后,游戲自動(dòng)彈出“成功”對(duì)話框,如圖4-6所示。</p><p> ?。?)設(shè)置為“中級(jí)”的開局后的界面,如圖4-7 所示。 </p><p> ?。?)設(shè)置為“高級(jí)”的開局后的界面,如圖4-8所示。&l
50、t;/p><p> 圖4-2進(jìn)入“開局”初始化界面 圖4-3 將紙牌從大到小排好后,歸并到</p><p><b> 左下角 </b></p><p> 圖4-4 第二次歸并后 圖4-5第三次歸并后</p><p> 圖4-6 第八次歸并完
51、畢后,游戲自動(dòng)彈出“成功”對(duì)話框</p><p> 圖4-7 設(shè)置為“中級(jí)”的開局后界面 圖4-8設(shè)置為“高級(jí)”的開局后界面</p><p> 4.3進(jìn)入“幫助”菜單</p><p> 點(diǎn)擊“幫助”下拉菜單的“關(guān)于”會(huì)彈出“蜘蛛牌”對(duì)話框,如圖4-9所示。單擊“游戲規(guī)則”如圖4-10所示。單擊“聲明”圖4-11所示。</p><
52、;p> 圖4-9“幫助”下拉菜單“關(guān)于” 圖4-10“游戲規(guī)則”下的編輯框</p><p> 圖4-11“聲明”下的編輯框 </p><p> 4.4游戲中的異常處理情況</p><p> 游戲過程中,如果移動(dòng)紙牌時(shí),中間有空位時(shí),單擊發(fā)牌,會(huì)彈出“提示對(duì)話框”。如圖4-12所示。</p>
53、<p> 圖4-12紙牌的異常處理</p><p> 5.系統(tǒng)設(shè)計(jì)總結(jié)與回顧</p><p> 蜘蛛紙牌游戲?qū)崿F(xiàn)了與Windows系列操作系統(tǒng)中自帶的蜘蛛紙牌游戲類似的功能。該游戲程序中采用Windows系列中游戲的圖片,運(yùn)用Java語(yǔ)言設(shè)計(jì)了線程、鼠標(biāo)事件、紙牌的裝載、圖形界面的構(gòu)造、組件監(jiān)聽接口的實(shí)現(xiàn)、生成蜘蛛紙牌游戲的框架、實(shí)現(xiàn)游戲中的方法,是一種休閑益智游戲。&l
54、t;/p><p> 通過本次課程設(shè)計(jì)對(duì)蜘蛛紙牌游戲的深入研究和分析,對(duì)于Eclipse 3.7有了深入的學(xué)習(xí)和了解,并對(duì)其應(yīng)用有了一定的掌握。對(duì)Java語(yǔ)言在實(shí)際中的應(yīng)用有了切身的體會(huì),并將所學(xué)的知識(shí)在實(shí)踐中得到應(yīng)用,同時(shí)也鞏固了Java中所學(xué)的理論知識(shí),對(duì)于不了解的知識(shí),又有了新的學(xué)習(xí)。同學(xué)們對(duì)于不懂的內(nèi)容同學(xué)查閱相關(guān)資料以及老師們的幫助,還有同學(xué)間的相互討論,增加了團(tuán)隊(duì)合作的能力。在分析源碼的過程中,有些不熟悉
55、的代碼,參考了相關(guān)資料,以及老師和同學(xué)們的幫助,使得問題得以解決,在此向幫助過我們的老師和同學(xué)表示感謝!</p><p><b> 6.附 錄</b></p><p><b> 源代碼:</b></p><p> 6.1 AboutDialog.java</p><p> import ja
56、vax.swing.*;</p><p> import java.awt.*;</p><p> /*“關(guān)于”窗口*/</p><p> public class AboutDialog extends JDialog</p><p><b> {</b></p><p> priva
57、te static final long serialVersionUID = 1L;//Add default serial version ID</p><p> JPanel jMainPane = new JPanel();</p><p> JTabbedPane jTabbedPane = new JTabbedPane();</p><p>
58、private JPanel jPanel1 = new JPanel();</p><p> private JPanel jPanel2 = new JPanel();</p><p> private JTextArea jt1 = new JTextArea("將電腦多次分發(fā)給你的牌按照相同的花色由大至小排列起來。直到桌面上的牌全都消失。"); //用來顯示
59、“游戲規(guī)則”對(duì)應(yīng)的文本框</p><p> private JTextArea jt2 = new JTextArea("該游戲中,紙牌的圖片來自于Windows XP的紙牌游戲,圖片權(quán)屬于原作者所有!"); //用來顯示“聲明”對(duì)應(yīng)的文本框</p><p><b> /*構(gòu)造函數(shù)*/</b></p><p> pub
60、lic AboutDialog()</p><p><b> {</b></p><p> setTitle("蜘蛛牌");</p><p> setSize(300,200);</p><p> setResizable(false);//設(shè)置是否可調(diào)整大小,初始值設(shè)為false</p
61、><p> setDefaultCloseOperation (WindowConstants.DISPOSE_ON_CLOSE); //setDefaultCloseOperation()是用來設(shè)定窗口被關(guān)閉時(shí)候(比如點(diǎn)擊了右上角的"x")的行為的。</p><p> Container c = this.getContentPane();</p>&l
62、t;p> jt1.setSize(300,300);//設(shè)置“游戲規(guī)則”下文本框大小</p><p> jt2.setSize(300,300);//設(shè)置“聲明”下文本框的大小</p><p> jt1.setEditable(false);//設(shè)置文本框是否可以編輯,這里設(shè)置為false</p><p> jt2.setEditable(false)
63、;</p><p> jt1.setLineWrap(true); </p><p> jt2.setLineWrap(true); </p><p> jt1.setFont(new Font("楷體_GB2312", java.awt.Font.BOLD, 20));//中文字體:楷體_GB2312,字形:黑體,字號(hào):13</p&
64、gt;<p> jt1.setForeground(Color.blue);//設(shè)置“游戲規(guī)則”下文本的字體顏色,可以設(shè)置為black(黑)、blue(藍(lán))、 cyan(藍(lán)綠)、darkGray(深灰)、gray(灰)、green(綠)、lightGray(淺灰)、orange(橘黃)、pink(粉紅)、red(紅)、white(白)、yellow(黃)等java.awt.Color中13中標(biāo)準(zhǔn)顏色之一</p>
65、;<p> jt2.setFont(new Font("楷體_GB2312", java.awt.Font.BOLD, 20));</p><p> jt2.setForeground(Color.red);</p><p> jPanel1.add(jt1);</p><p> jPanel2.add(jt2);</
66、p><p> jTabbedPane.setSize(300,200);</p><p> jTabbedPane.addTab("游戲規(guī)則", null, jPanel1, null);</p><p> jTabbedPane.addTab("聲明", null, jPanel2, null);</p>&
67、lt;p> jMainPane.add(jTabbedPane);</p><p> c.add(jMainPane);</p><p><b> pack();</b></p><p> this.setVisible(true);</p><p><b> }}</b></
68、p><p> 6.2 PKCard.java</p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import javax.swing.*;</p><p> public class PKCard extends JLab
69、el implements MouseListener,</p><p> MouseMotionListener{</p><p> private static final long serialVersionUID = 1L;//Add default serial version ID</p><p><b> //紙牌的位置</b&g
70、t;</p><p> Point point = null;</p><p> Point initPoint = null;</p><p> int value = 0;</p><p> int type = 0;</p><p> String name = null;</p><
71、;p> Container pane = null;</p><p> Spider main = null;</p><p> boolean canMove = false;</p><p> boolean isFront = false;</p><p> PKCard previousCard = null;<
72、/p><p> public void mouseClicked(MouseEvent arg0){</p><p><b> }</b></p><p> public void flashCard(PKCard card){ //啟動(dòng)Flash線程</p><p> new Flash(card).start()
73、;//不停的獲得下一張牌,直到完成</p><p> if(main.getNextCard(card) != null){</p><p> card.flashCard(main.getNextCard(card));</p><p><b> }</b></p><p><b> }</b
74、></p><p> class Flash extends Thread{</p><p> private PKCard card = null;</p><p> public Flash(PKCard card){</p><p> this.card = card;</p><p><b&
75、gt; }</b></p><p> /*線程的run()方法--為紙牌的正面設(shè)置白色圖片*/</p><p> public void run(){</p><p> boolean is = false;</p><p> ImageIcon icon = new ImageIcon("images/whi
76、te.gif");</p><p> for (int i = 0; i < 4; i++){</p><p><b> try{</b></p><p> Thread.sleep(200);</p><p><b> }</b></p><p>
77、 catch (InterruptedException e){</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> if (is){</b></p><p> this.card.turnFront();</p&
78、gt;<p><b> is = !is;</b></p><p><b> }</b></p><p><b> else{</b></p><p> this.card.setIcon(icon);</p><p><b> is = !i
79、s;</b></p><p> }// 根據(jù)當(dāng)前外觀將card的UI屬性重置</p><p> card.updateUI();</p><p><b> }}}</b></p><p><b> /*點(diǎn)擊鼠標(biāo)*/</b></p><p> public
80、 void mousePressed(MouseEvent mp){</p><p> point = mp.getPoint();</p><p> main.setNA();</p><p> this.previousCard = main.getPreviousCard(this);</p><p><b> }&l
81、t;/b></p><p><b> /*釋放鼠標(biāo)*/</b></p><p> public void mouseReleased(MouseEvent mr){</p><p> Point point = ((JLabel) mr.getSource()).getLocation();</p><p>
82、<b> //判斷可行列</b></p><p> int n = this.whichColumnAvailable(point);</p><p> if (n == -1 || n == this.whichColumnAvailable(this.initPoint)){</p><p> this.setNextCardLoc
83、ation(null);</p><p> main.table.remove(this.getLocation());</p><p> this.setLocation(this.initPoint);</p><p> main.table.put(this.initPoint, this);</p><p><b>
84、 return;</b></p><p><b> }</b></p><p> point = main.getLastCardLocation(n);</p><p> boolean isEmpty = false;</p><p> PKCard card = null;</p>
85、<p> if (point == null){</p><p> point = main.getGroundLabelLocation(n);</p><p> isEmpty = true;</p><p><b> }</b></p><p><b> else{</b>
86、;</p><p> card = (PKCard) main.table.get(point);</p><p><b> }</b></p><p> if (isEmpty || (this.value + 1 == card.getCardValue())){</p><p> point.y += 40
87、;</p><p> if (isEmpty) point.y -= 20;</p><p> this.setNextCardLocation(point);</p><p> main.table.remove(this.getLocation());</p><p> point.y -= 20;</p><
88、p> this.setLocation(point);</p><p> main.table.put(point, this);</p><p> this.initPoint = point;</p><p> if (this.previousCard != null){</p><p> this.previousCa
89、rd.turnFront();</p><p> this.previousCard.setCanMove(true);</p><p><b> }</b></p><p> this.setCanMove(true);</p><p><b> }</b></p><
90、p><b> else{</b></p><p> this.setNextCardLocation(null);</p><p> main.table.remove(this.getLocation());</p><p> this.setLocation(this.initPoint);</p><p&
91、gt; main.table.put(this.initPoint, this);</p><p><b> return;</b></p><p><b> }</b></p><p> point = main.getLastCardLocation(n);</p><p> card
92、 = (PKCard) main.table.get(point);</p><p> if (card.getCardValue() == 1){</p><p> point.y -= 240;</p><p> card = (PKCard) main.table.get(point);</p><p> if (card !=
93、 null && card.isCardCanMove()){</p><p> main.haveFinish(n);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
94、<p><b> /*</b></p><p><b> **方法:放置紙牌</b></p><p><b> */</b></p><p> public void setNextCardLocation(Point point){</p><p>
95、PKCard card = main.getNextCard(this);</p><p> if (card != null){</p><p> if (point == null){</p><p> card.setNextCardLocation(null);</p><p> main.table.remove(card.
96、getLocation());</p><p> card.setLocation(card.initPoint);</p><p> main.table.put(card.initPoint, card);</p><p><b> }</b></p><p><b> else{</b>
97、;</p><p> point = new Point(point);</p><p> point.y += 20;</p><p> card.setNextCardLocation(point);</p><p> point.y -= 20;</p><p> main.table.remove(c
98、ard.getLocation());</p><p> card.setLocation(point);</p><p> main.table.put(card.getLocation(), card);</p><p> card.initPoint = card.getLocation();</p><p><b>
99、 }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> /**</b></p><p><b> **返回值:int</b></p><p> **方
100、法:判斷可用列</p><p><b> */</b></p><p> public int whichColumnAvailable(Point point){</p><p> int x = point.x;</p><p> int y = point.y;</p><p>
101、int a = (x - 20) / 101;</p><p> int b = (x - 20) % 101;</p><p> if (a != 9){</p><p> if (b > 30 && b <= 71){</p><p><b> a = -1;</b></p&
102、gt;<p><b> }</b></p><p> else if (b > 71){</p><p><b> a++;</b></p><p><b> }</b></p><p><b> }</b></p>
103、;<p> else if (b > 71){</p><p><b> a = -1;</b></p><p><b> }</b></p><p> if (a != -1){</p><p> Point p = main.getLastCardLocation(
104、a);</p><p> if (p == null) p = main.getGroundLabelLocation(a);</p><p> b = y - p.y;</p><p> if (b <= -96 || b >= 96){</p><p><b> a = -1;</b></p
105、><p><b> }</b></p><p><b> }</b></p><p><b> return a;</b></p><p><b> }</b></p><p> public void mouseEntere
106、d(MouseEvent arg0){</p><p><b> }</b></p><p> public void mouseExited(MouseEvent arg0){</p><p><b> }</b></p><p><b> /**</b></p
107、><p><b> **用鼠標(biāo)拖動(dòng)紙牌</b></p><p><b> */</b></p><p> public void mouseDragged(MouseEvent arg0){</p><p> if (canMove){</p><p> int x =
108、 0;</p><p> int y = 0;</p><p> Point p = arg0.getPoint();</p><p> x = p.x - point.x;</p><p> y = p.y - point.y;</p><p> this.moving(x, y);</p>
109、<p><b> }</b></p><p><b> }</b></p><p><b> /**</b></p><p> **返回值:void</p><p> **方法:移動(dòng)(x,y)個(gè)位置</p><p><b>
110、 */</b></p><p> public void moving(int x, int y){</p><p> PKCard card = main.getNextCard(this);</p><p> Point p = this.getLocation();</p><p> //將組件移動(dòng)到容器中指定的順
111、序索引。 </p><p> pane.setComponentZOrder(this, 1);</p><p> //在Hashtable中保存新的節(jié)點(diǎn)信息</p><p> main.table.remove(p);</p><p><b> p.x += x;</b></p><p>
112、;<b> p.y += y;</b></p><p> this.setLocation(p);</p><p> main.table.put(p, this);</p><p> if (card != null) card.moving(x, y);</p><p><b> }</b&
113、gt;</p><p> public void mouseMoved(MouseEvent arg0){</p><p><b> }</b></p><p><b> /**</b></p><p><b> **構(gòu)造方法</b></p><p&
114、gt;<b> */</b></p><p> public PKCard(String name, Spider spider){</p><p><b> super();</b></p><p> this.type = new Integer(name.substring(0, 1)).intValue()
115、;</p><p> this.value = new Integer(name.substring(2)).intValue();</p><p> this.name = name;</p><p> this.main = spider;</p><p> this.pane = this.main.getContentPane
116、();</p><p> this.addMouseListener(this);</p><p> this.addMouseMotionListener(this);</p><p> this.setIcon(new ImageIcon("images/rear.gif"));//背面牌</p><p> t
117、his.setSize(71, 96);//紙牌的大小</p><p> this.setVisible(true);</p><p><b> }</b></p><p><b> /**</b></p><p> **返回值:void</p><p> **方法
118、:令紙牌顯示正面(紙牌將全部歸位到游戲界面的左下角)</p><p><b> */</b></p><p> public void turnFront(){</p><p> this.setIcon(new ImageIcon("images/" + name + ".gif"));</
119、p><p> this.isFront = true;</p><p><b> }</b></p><p><b> /**</b></p><p> **返回值:void</p><p> **方法:令紙牌顯示背面</p><p><b
120、> */</b></p><p> public void turnRear(){</p><p> this.setIcon(new ImageIcon("images/rear.gif"));</p><p> this.isFront = false;</p><p> this.canM
121、ove = false;</p><p><b> }</b></p><p><b> /**</b></p><p> **返回值:void</p><p> **方法:將紙牌移動(dòng)到點(diǎn)point</p><p><b> */</b><
122、;/p><p> public void moveto(Point point){</p><p> this.setLocation(point);</p><p> this.initPoint = point;</p><p><b> }</b></p><p><b>
123、/**</b></p><p> **返回值:void</p><p> **方法:判斷牌是否能移動(dòng)</p><p><b> */</b></p><p> public void setCanMove(boolean can){</p><p> this.canMove
124、 = can;</p><p> PKCard card = main.getPreviousCard(this);</p><p> if (card != null && card.isCardFront()){</p><p> if (!can){</p><p> if (!card.isCardCanMov
125、e()){</p><p><b> return;</b></p><p><b> }</b></p><p><b> else{</b></p><p> card.setCanMove(can);</p><p><b>
126、}</b></p><p><b> }</b></p><p><b> else{</b></p><p> if (this.value + 1 == card.getCardValue()</p><p> && this.type == card.get
127、CardType()){</p><p> card.setCanMove(can);</p><p><b> }</b></p><p><b> else{</b></p><p> card.setCanMove(false);</p><p><b&g
128、t; }}}}</b></p><p> /*返回值:boolean--方法:判斷card是否是正面*/</p><p> public boolean isCardFront(){</p><p> return this.isFront;</p><p><b> }</b></p>
129、<p> /*返回值:boolean--方法:返回是否能夠移動(dòng)*/</p><p> public boolean isCardCanMove(){</p><p> return this.canMove;</p><p><b> }</b></p><p> /*返回值:int--方法:獲得
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)——蜘蛛紙牌游戲
- java課程設(shè)計(jì)-蜘蛛紙牌游戲設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告—蜘蛛紙牌
- java課程設(shè)計(jì)報(bào)告——蜘蛛紙牌
- 紙牌游戲-課程設(shè)計(jì)報(bào)告
- 紙牌游戲課程設(shè)計(jì)
- 紙牌游戲課程設(shè)計(jì)
- java實(shí)現(xiàn)蜘蛛紙牌
- java設(shè)計(jì)蜘蛛紙牌論文.doc
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-紙牌游戲
- 任務(wù)書——java設(shè)計(jì)蜘蛛紙牌.doc
- java課程設(shè)計(jì)--掃雷游戲報(bào)告
- java火柴游戲課程設(shè)計(jì)報(bào)告
- java設(shè)計(jì)蜘蛛紙牌論文源代碼.doc
- java課程設(shè)計(jì)-猜數(shù)游戲課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——紙牌游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-紙牌游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)“紙牌游戲”
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--紙牌游戲
- java課程設(shè)計(jì)報(bào)告-掃雷小游戲
評(píng)論
0/150
提交評(píng)論