2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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語言設(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語言開發(fā)的,但它的用途并不僅限于Java語言。例如,支持諸如C/C++、COBOL和Eiffel等編程語言的插件已經(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>  (1)AboutDialog.java 其作用是生成游戲的“幫助”下拉菜單</p><p> ?。?)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> ?。?)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;  (2)將紙牌從大到小將紙牌排列,當(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語言設(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語言在實(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)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論