連連看課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  《高級語言程序設(shè)計(jì)(2)》</p><p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p>  《高級語言程序設(shè)計(jì)(2)》課程設(shè)計(jì)報(bào)告</p><p>  專業(yè) 班級 學(xué)號 </p><p>  姓名 完成日期 指導(dǎo)教師 </p><

2、p><b>  程序設(shè)計(jì)說明書</b></p><p>  【設(shè)計(jì)題目】連連看程序</p><p><b>  【問題描述】</b></p><p>  小游戲連連看,玩家需要找出游戲中圖片相同的兩個(gè)方塊,如果它們之間的連接線不多于3根直線,就可將這兩個(gè)方塊消除,當(dāng)游戲中沒有滿足條件的圖案時(shí),還可以實(shí)現(xiàn)重新排序的功能

3、,游戲中的倒計(jì)時(shí)結(jié)束時(shí),游戲結(jié)束時(shí),游戲結(jié)束即可得出所得分?jǐn)?shù)。</p><p><b>  【軟件功能】</b></p><p>  1 通過找出游戲中圖片相同的兩個(gè)方塊,將其消除</p><p>  2 游戲中沒有滿足條件的方塊時(shí),可重新排列</p><p>  3 可計(jì)算游戲總得分,有“下一局”和“退出游戲”的功能&

4、lt;/p><p>  4 可通過倒計(jì)時(shí)控制游戲時(shí)間,每一局開始倒計(jì)時(shí)都重新開始</p><p>  5 利用SWING設(shè)計(jì)適合的圖形用戶界面</p><p>  6 能響應(yīng)鼠標(biāo)或者鍵盤事件</p><p><b>  【算法思想】</b></p><p>  在檢驗(yàn)兩個(gè)圖片能否消掉的時(shí)候,要讓兩個(gè)圖

5、片同時(shí)滿足兩個(gè)條件才行,就是兩者配對并且連線成功。</p><p>  分 3 種情況:這三種情況都需要三個(gè)檢測,這三個(gè)檢測分別檢測一條直路經(jīng)。這樣就會有三條路經(jīng)。若這三條路經(jīng)上都是空按鈕,那么就剛好是三種直線(兩個(gè)轉(zhuǎn)彎點(diǎn))把兩個(gè)按鈕連接起來了。 </p><p><b>  (1)、相鄰 </b></p><p>  (2)、若不相鄰的先在第

6、一個(gè)按鈕的同行找一個(gè)空按鈕。1.找到后看第二個(gè)按鈕橫向到這個(gè)空按鈕所在的列是否有按鈕。2.沒有的話再看第一個(gè)按鈕到與它同行的那個(gè)空按鈕之間是否有按鈕。3.沒有的話,再從與第一個(gè)按鈕同行的那個(gè)空按鈕豎向到與第二個(gè)按鈕的同行看是否有按鈕。沒有的話路經(jīng)就通了可以消了. </p><p>  (3)、若(2)失敗后,再在第一個(gè)按鈕的同列找一個(gè)空按鈕。1.找到后看第二個(gè)按鈕豎向到這個(gè)空按鈕所在的行是否有按鈕 2.沒有的話,

7、再看第一個(gè)按鈕到與它同列的那個(gè)空按鈕之間是否有按鈕。3.沒有的話,再從與第一個(gè)按鈕同列的那個(gè)空按鈕橫向到與第二個(gè)按鈕同列看是否有按鈕。沒有的話路經(jīng)就通了,可以消了。</p><p>  若以上三步都失敗,說明這兩個(gè)按鈕不可以消去</p><p>  兩圖能相連的所有情況:</p><p><b>  【類的設(shè)計(jì)】</b></p>

8、<p>  圖片連連看游戲程序中只有一個(gè)類,類名為LianLianKan,該類實(shí)現(xiàn)了接口ActionListener;該類總共有十三個(gè)方法,他們的功能分別是:init()初始化;createImgBtn()傳進(jìn)兩個(gè)String類型的參數(shù),返回帶有數(shù)字和圖片的按鈕;randomBuild(),產(chǎn)生十五對隨機(jī)的數(shù)字;fraction()計(jì)算得分;reload()將游戲按鈕重列;estimateEven()傳進(jìn)兩個(gè)int型和一個(gè)JB

9、utton型的三個(gè)參數(shù)(分別是擊中的按鈕位置坐標(biāo)和按鈕),選中按鈕信息的存儲與操作;xiao()消去符合游戲規(guī)則的相同的兩個(gè)按鈕;linePassOne()在第一按鈕同行有空按鈕的條件下判斷第二轉(zhuǎn)折點(diǎn)出現(xiàn)的情況;rowPassOne()在第一按鈕同列有空按鈕的條件下判斷第二轉(zhuǎn)折點(diǎn)出現(xiàn)的情況;remove()將相同的兩個(gè)按鈕消去;actionPerformed()實(shí)現(xiàn)按鈕事件的監(jiān)聽;timerDemo()時(shí)間提示;main()主方法;&l

10、t;/p><p><b>  【用戶界面】</b></p><p><b>  【程序技巧】</b></p><p>  程序采用圖形用戶界面,簡單大方,且易于操作;</p><p>  連連看圖片采用大家熟悉的圖片,能激起玩家的游戲興趣;</p><p>  游戲功能較為齊全,

11、可實(shí)現(xiàn)退出、重列和下一局的功能,重列功能可對游戲中剩余的圖片進(jìn)行重新排列,使游戲繼續(xù)進(jìn)行,下一局功能可以使游戲重新開始</p><p>  游戲具有倒計(jì)時(shí)功能,能夠控制游戲時(shí)限,使游戲具有一定難度,倒計(jì)時(shí)結(jié)束時(shí)顯示“game over”</p><p>  游戲可以統(tǒng)計(jì)玩家的游戲得分</p><p>  【模塊劃分及調(diào)用關(guān)系】</p><p>

12、;  根據(jù)對“連連看”游戲的分析,該游戲可分為三個(gè)模塊:算法模塊、界面顯示模塊、菜單控制模塊。</p><p>  【模塊劃分及調(diào)用關(guān)系】</p><p>  根據(jù)對“連連看”游戲的分析,該游戲可分為三個(gè)模塊:算法模塊、界面顯示模塊、菜單控制模塊。</p><p><b>  【模塊流程圖】</b></p><p>&l

13、t;b>  主模塊流程圖:</b></p><p>  用戶界面模塊流程圖:</p><p><b>  算法模塊:</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b&g

14、t;  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  否否</b></p><p><b>  是 </b></p><p><b>

15、  是是</b></p><p><b>  否</b></p><p><b>  是是否</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b&g

16、t;  否</b></p><p><b>  【運(yùn)行說明】</b></p><p>  將圖片和LianLianKan.java文件放到同一個(gè)文件夾里</p><p>  javac LianLianKan.java</p><p>  java LianLianKan</p><

17、p>  或者在eclipse里面,將圖片和LianLianKan.java文件放到同一個(gè)包中運(yùn)行</p><p><b>  程序上機(jī)調(diào)試報(bào)告</b></p><p>  【語法錯(cuò)誤及其排除】</p><p>  將圖片加載在按鈕上,并在調(diào)用按鈕時(shí)會出現(xiàn)隨機(jī)的圖片時(shí)出現(xiàn)錯(cuò)誤,最后創(chuàng)建了一個(gè)方法JButton createImgBtn(St

18、ring ing,String txt),作用是傳進(jìn)兩個(gè)String類型的參數(shù),返回帶有數(shù)字和圖片的按鈕,方法中的主要內(nèi)容有ImageIcon image = new ImageIcon(getClass().getResource(ing));JButton button = new JButton(txt,image);通過調(diào)用這個(gè)方法就可以將圖片與按鈕固定在一起。</p><p>  加載計(jì)時(shí)器時(shí)出現(xiàn)錯(cuò)誤,

19、即如果只在初始方法init()里調(diào)用timerDemo()方法時(shí),在點(diǎn)擊重列按鈕或者下一局按鈕時(shí),時(shí)間提示里的時(shí)間是兩次時(shí)間相摻雜的;改為只在main()方法里調(diào)用timerDemo()方法,在點(diǎn)擊重列按鈕時(shí)沒有問題,但在點(diǎn)擊下一局按鈕時(shí),時(shí)間還是相摻雜著出現(xiàn);最后改為在main()方法里調(diào)用timerDemo()方法的同時(shí)在actionPerformed()方法里將if(e.getSource()==newlyButton)</

20、p><p><b>  {</b></p><p>  int grid[][] = new int[8][7]; </p><p>  this.grid = grid; </p><p>  randomBuild(); </p><p>  mainFrame.setVisible(false)

21、; </p><p>  pressInformation=false; </p><p><b>  Init();</b></p><p><b>  }</b></p><p><b>  改為:</b></p><p>  if(e.getSou

22、rce()==newlyButton)</p><p><b>  { </b></p><p>  flag=true;</p><p>  int grid[][] = new int[8][7]; </p><p>  this.grid = grid; </p><p>  randomB

23、uild(); </p><p>  mainFrame.setVisible(false); </p><p>  pressInformation=false; </p><p><b>  init();</b></p><p>  timerDemo();</p><p><b>

24、;  }</b></p><p>  【算法錯(cuò)誤及其排除】</p><p>  在編輯randomBuild()方法產(chǎn)生隨機(jī)的兩兩相同的數(shù)字時(shí),程序中會出現(xiàn)并非</p><p>  兩兩相同的圖片,達(dá)不到預(yù)期的效果,后改為在randomBuild()方法里添加如下</p><p>  這樣的程序: while(grid[co

25、ls][rows]!=0){ </p><p>  cols=(int)(Math.random()*6+1); </p><p>  rows=(int)(Math.random()*5+1); </p><p><b>  }</b></p><p><b>  程序才正確。 </b></

26、p><p>  在編輯程序時(shí),定義了一個(gè)grid數(shù)組,用來存放游戲按鈕的位置,剛開始定義的是6行5列,結(jié)果玩游戲時(shí),周邊的按鈕不能被消去,后將數(shù)組改為8行7列時(shí)才可以,這樣按鈕周邊的一圈就是空按鈕,周邊的按鈕就可以被消去。</p><p><b>  程序測試結(jié)果</b></p><p><b>  【測試數(shù)據(jù)】</b><

27、;/p><p><b>  1、程序運(yùn)行結(jié)果:</b></p><p>  2、點(diǎn)擊重列按鈕結(jié)果:</p><p><b>  3、點(diǎn)擊下一局:</b></p><p><b>  4、游戲結(jié)束界面:</b></p><p><b>  【輸出結(jié)果

28、】</b></p><p><b>  【收獲及體會】</b></p><p>  通過這次圖片連連看游戲的設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正的提高自己的水平,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,并且還發(fā)現(xiàn)了

29、自己的許多不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固。同時(shí)在這次的設(shè)計(jì)中也小小的體驗(yàn)了一下做項(xiàng)目的感受。</p><p>  我完成了這次JAVA課程設(shè)計(jì),不過這只是我學(xué)習(xí)路上的驛站。我相信我在未來的學(xué)習(xí)中會記住從本次課程設(shè)計(jì)中所學(xué)到的東西,并將它用到未來的學(xué)習(xí)中去。</p><p><b>  源程序代碼</b></p><p&g

30、t;  package test;</p><p>  import java.awt.BorderLayout;</p><p>  import java.awt.Color;</p><p>  import java.awt.Container;</p><p>  import java.awt.GridLayout;</p&

31、gt;<p>  import java.awt.event.ActionEvent;</p><p>  import java.awt.event.ActionListener;</p><p>  import java.util.Timer;</p><p>  import java.util.TimerTask;</p>&l

32、t;p>  import javax.swing.ImageIcon;</p><p>  import javax.swing.JButton;</p><p>  import javax.swing.JFrame;</p><p>  import javax.swing.JLabel;</p><p>  import java

33、x.swing.JPanel;</p><p>  public class LianLianKan implements ActionListener </p><p><b>  { </b></p><p><b>  //主面板</b></p><p>  JFrame mainFrame;

34、 </p><p><b>  //面板容器</b></p><p>  Container thisContainer; </p><p><b>  //子面板 </b></p><p>  JPanel centerPanel,southPanel,northPanel,westPanel

35、,eastPanel;</p><p><b>  //游戲按鈕數(shù)組</b></p><p>  JButton diamondsButton[][] = new JButton[6][5];</p><p>  //開始,退出,重列,重新開始按鈕</p><p>  JButton exitButton,resetBu

36、tton,newlyButton;</p><p>  //JButton startButton;</p><p><b>  //分?jǐn)?shù)標(biāo)簽</b></p><p>  JLabel fractionLable=new JLabel("0");</p><p><b>  //時(shí)間標(biāo)簽&

37、lt;/b></p><p>  JLabel time=new JLabel("");</p><p>  //分別記錄兩次被選中的按鈕</p><p>  JButton fristButton,secondButton;</p><p>  //儲存游戲按鈕位置 </p><p>  i

38、nt grid[][] = new int[8][7]; </p><p>  //判斷是否有按鈕被擊中</p><p>  static boolean pressInformation=false;</p><p>  //被選中的兩個(gè)游戲按鈕的位置坐標(biāo)(x0,y0),(x,y)</p><p>  int x0=0,y0=0,x=0,y

39、=0;</p><p>  //兩個(gè)被選中按鈕上相應(yīng)的數(shù)字</p><p>  int fristMsg=0,secondMsg=0;</p><p>  int i,j,k,n;</p><p>  //int s=0;</p><p>  final Timer t=new Timer();</p>

40、<p>  Color b=Color.orange;</p><p>  Color g=Color.cyan;</p><p>  Color m=Color.pink;</p><p>  //Color c=Color.blue;</p><p>  boolean flag;</p><p>&

41、lt;b>  //初始化</b></p><p>  public void init()</p><p>  { //創(chuàng)建主面板,并命為連連看</p><p>  mainFrame=new JFrame("連連看"); </p><p>  thisContainer = mainFrame.get

42、ContentPane(); </p><p>  //thisContainer.setBackground(c);</p><p><b>  /**</b></p><p>  * 把thisContainer劃分為Center、South、North三個(gè)區(qū)域</p><p>  * North區(qū)域添加分?jǐn)?shù)&l

43、t;/p><p>  * Center區(qū)域添加游戲按鈕</p><p>  * South區(qū)域添加退出、重列、下一局等按鈕</p><p><b>  */</b></p><p>  thisContainer.setLayout(new BorderLayout()); </p><p>  ce

44、nterPanel=new JPanel();</p><p>  centerPanel.setBackground(b);</p><p>  southPanel=new JPanel();</p><p>  southPanel.setBackground(g);</p><p>  northPanel=new JPanel(ne

45、w BorderLayout() ); </p><p>  //northPanel.setBackground(m);</p><p>  westPanel=new JPanel();</p><p>  westPanel.setBackground(m);</p><p>  eastPanel=new JPanel();<

46、;/p><p>  eastPanel.setBackground(m);</p><p>  //Label time=new Label("剩余時(shí)間:");</p><p>  thisContainer.add(centerPanel,"Center"); </p><p>  thisConta

47、iner.add(southPanel,"South"); </p><p>  thisContainer.add(northPanel,"North"); </p><p>  northPanel.add(westPanel,"West");</p><p>  northPanel.add(east

48、Panel,"Center");</p><p>  westPanel.add(BorderLayout.WEST,new JLabel(" 剩余時(shí)間:"));</p><p>  westPanel.add(BorderLayout.EAST,time);</p><p>  eastPanel

49、.add(BorderLayout.CENTER,new JLabel("您的得分:"));</p><p>  eastPanel.add(BorderLayout.EAST,fractionLable);</p><p>  eastPanel.add(fractionLable,"Center");</p><p>  

50、//northPanel.add(fractionLable); </p><p><b>  /** </b></p><p>  * eastPanel.add(new JLabel("您的得分:"));</p><p>  * eastPanel.add(fractionLable);</p>&

51、lt;p>  * westPanel.add(BorderLayout.WEST,new JLabel(" 剩余時(shí)間:"));</p><p>  *westPanel.add(BorderLayout.EAST,new JLabel(time));</p><p>  * northPanel.add(westPanel); </

52、p><p><b>  */</b></p><p>  //把CenterPanel區(qū)域設(shè)置為網(wǎng)格布局</p><p>  centerPanel.setLayout(new GridLayout(6,5)); </p><p>  for(int cols = 0;cols < 6;cols++)</p>

53、;<p><b>  { </b></p><p>  for(int rows = 0;rows < 5;rows++ )</p><p><b>  { </b></p><p>  if(grid[cols+1][rows+1]!=0)</p><p>  {//給指定按鈕

54、添加圖片</p><p>  diamondsButton[cols][rows]=createImgBtn(grid[cols+1][rows+1]+".jpg", String.valueOf(grid[cols+1][rows+1]));</p><p><b>  }</b></p><p><b>  e

55、lse</b></p><p>  {//當(dāng)指定按鈕為空時(shí)傳空字符串即照片為傳的照片為空</p><p>  diamondsButton[cols][rows]=createImgBtn("",String.valueOf(grid[cols+1][rows+1]));</p><p><b>  }</b>&

56、lt;/p><p><b>  /**</b></p><p><b>  *else</b></p><p><b>  * {</b></p><p>  * //當(dāng)指定按鈕為空時(shí)將其定義為新的按鈕</p><p>  *diam

57、ondsButton[cols][rows]=new JButton();</p><p><b>  * }</b></p><p><b>  */</b></p><p>  diamondsButton[cols][rows].addActionListener(this); </p><p

58、>  centerPanel.add(diamondsButton[cols][rows]); </p><p><b>  } </b></p><p><b>  }</b></p><p>  //startButton=new JButton("開始");</p><

59、;p>  //startButton.addActionListener(this);</p><p>  exitButton=new JButton("退出"); </p><p>  exitButton.addActionListener(this); </p><p>  resetButton=new JButton(&qu

60、ot;重列"); </p><p>  resetButton.addActionListener(this); </p><p>  newlyButton=new JButton("下一局"); </p><p>  newlyButton.addActionListener(this);</p><p> 

61、 //southPanel.add(startButton);</p><p>  southPanel.add(exitButton); </p><p>  southPanel.add(resetButton); </p><p>  southPanel.add(newlyButton); </p><p><b>  

62、/**</b></p><p>  *為該標(biāo)簽設(shè)置一個(gè)文本字符串</p><p>  *該字符串為標(biāo)簽字符串所顯示的文本字符串作為有符號的十進(jìn)制整數(shù)為參數(shù)的字符串</p><p><b>  */</b></p><p>  fractionLable.setText(String.valueOf(Integ

63、er.parseInt(fractionLable.getText()))); </p><p>  mainFrame.setBounds(180,10,800,650);//設(shè)置主面板的位置和大小 </p><p>  mainFrame.setVisible(false);</p><p>  mainFrame.setVisible(true); </

64、p><p>  //centerPanel.setVisible(false);</p><p>  //timerDemo();</p><p><b>  } </b></p><p>  //創(chuàng)建帶有圖片的按鈕</p><p>  public JButton createImgBtn(

65、String ing,String txt)</p><p>  {//根據(jù)給定名稱的資源創(chuàng)建一個(gè) ImageIcon。</p><p>  ImageIcon image = new ImageIcon(getClass().getResource(ing));</p><p>  JButton button = new JButton(txt,image);&

66、lt;/p><p>  //設(shè)置文本(即數(shù)字)相對于圖標(biāo)的垂直位置為底及水平位置為中心</p><p>  button.setVerticalTextPosition(JButton.BOTTOM);</p><p>  button.setHorizontalTextPosition(JButton.CENTER);</p><p>  re

67、turn button;</p><p><b>  }</b></p><p><b>  /**</b></p><p>  *產(chǎn)生游戲中的隨機(jī)數(shù)字</p><p><b>  *數(shù)字至少兩兩相同</b></p><p><b>  */&

68、lt;/b></p><p>  public void randomBuild() </p><p><b>  { </b></p><p>  int randoms,cols,rows; </p><p>  for(int twins=1;twins<=15;twins++) </p>

69、<p><b>  { </b></p><p>  randoms=(int)(Math.random()*25+1);//隨機(jī)產(chǎn)生一個(gè)1~25的數(shù)字 </p><p>  for(int alike=1;alike<=2;alike++) </p><p>  { //產(chǎn)生兩個(gè)隨機(jī)的坐標(biāo)來存放同一個(gè)數(shù)字</p>

70、<p>  cols=(int)(Math.random()*6+1); </p><p>  rows=(int)(Math.random()*5+1); </p><p>  while(grid[cols][rows]!=0)//避免出現(xiàn)重復(fù)的坐標(biāo)</p><p><b>  { </b></p><p&

71、gt;  cols=(int)(Math.random()*6+1); </p><p>  rows=(int)(Math.random()*5+1); </p><p><b>  } </b></p><p>  this.grid[cols][rows]=randoms; </p><p><b>  

72、} </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  //計(jì)算得分</b></p><p>  public void fraction()</p><p><b&

73、gt;  { </b></p><p>  fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100)); </p><p><b>  } </b></p><p><b>  //重列</b><

74、/p><p>  public void reload()</p><p><b>  { </b></p><p>  int save[] = new int[30]; </p><p>  int n=0,cols,rows; </p><p>  int grid[][]= new int[8

75、][7];</p><p>  //time.setVisible(false);</p><p>  for(int i=0;i<=6;i++) </p><p><b>  { </b></p><p>  for(int j=0;j<=5;j++) </p><p><

76、b>  { </b></p><p>  if(this.grid[i][j]!=0) </p><p>  { //將未消去的圖片的數(shù)字放在save數(shù)組中</p><p>  save[n]=this.grid[i][j]; </p><p><b>  n++; </b></p>&l

77、t;p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  n=n-1; </b></p><p>  this.grid=grid; //把grid數(shù)組全部初始化

78、為零</p><p>  while(n>=0)</p><p>  { //將剩下的所有圖片數(shù)字重新隨機(jī)放在數(shù)組grid中</p><p>  cols=(int)(Math.random()*6+1); </p><p>  rows=(int)(Math.random()*5+1); </p><p>  

79、while(grid[cols][rows]!=0)//避免出現(xiàn)重復(fù)的坐標(biāo)</p><p><b>  { </b></p><p>  cols=(int)(Math.random()*6+1); </p><p>  rows=(int)(Math.random()*5+1); </p><p><b> 

80、 } </b></p><p>  this.grid[cols][rows]=save[n]; </p><p><b>  n--; </b></p><p><b>  } </b></p><p>  mainFrame.setVisible(false); </p>

81、<p>  //將按鈕點(diǎn)擊信息歸為初始 </p><p>  pressInformation=false;</p><p><b>  init(); </b></p><p>  for(int i = 0;i < 6;i++)</p><p><b>  { </b><

82、;/p><p>  for(int j = 0;j < 5;j++ )</p><p><b>  { </b></p><p>  if(grid[i+1][j+1]==0)</p><p>  {//將消去的按鈕設(shè)置為不可見 </p><p>  diamondsButton[i][j].s

83、etVisible(false); </p><p><b>  } </b></p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }</b></p><p>  //選中按

84、鈕信息的存儲與操作</p><p>  public void estimateEven(int placeX,int placeY,JButton bz) </p><p><b>  {</b></p><p>  if(pressInformation==false)</p><p>  {//如果第一個(gè)按鈕未被擊

85、中,則將傳來的按鈕坐標(biāo)賦給(x,y) </p><p>  x=placeX; </p><p>  y=placeY; </p><p>  fristMsg=grid[x][y];//將按鈕上的數(shù)字賦給fristMsg</p><p>  fristButton=bz;//將(placeX,placey)位置上的按鈕bz賦給fristBu

86、tton</p><p>  pressInformation=true;//將按鈕點(diǎn)擊信息設(shè)置為true </p><p><b>  }</b></p><p><b>  else</b></p><p><b>  { /**</b></p><p&

87、gt;  *如果第一個(gè)按鈕被擊中 ,則將第一個(gè)按鈕坐標(biāo)賦給(x0,y0)</p><p>  *將fristButton按鈕賦給secondButton按鈕</p><p>  *將傳來的按鈕坐標(biāo)賦給坐標(biāo)(x,y)</p><p>  *如果當(dāng)兩個(gè)不同的按鈕上的數(shù)字相等時(shí)則調(diào)用remove()函數(shù)消去</p><p><b>  *

88、/</b></p><p><b>  x0=x; </b></p><p><b>  y0=y; </b></p><p>  secondMsg=fristMsg;//將擊中的第一個(gè)按鈕上的數(shù)字賦給第二個(gè)按鈕</p><p>  secondButton=fristButton;/

89、/將第一個(gè)按鈕賦給第二個(gè)按鈕</p><p>  x=placeX; </p><p>  y=placeY; </p><p>  fristMsg=grid[x][y];//將傳過來的按鈕上的數(shù)字賦給fristMsg</p><p>  fristButton=bz;//將傳過來的按鈕賦給fristButton </p>&

90、lt;p>  if(fristMsg==secondMsg && secondButton!=fristButton)</p><p>  { //如果當(dāng)兩個(gè)不同的按鈕上的數(shù)字相等時(shí)則消去</p><p><b>  xiao(); </b></p><p><b>  } </b></p>

91、;<p><b>  } </b></p><p><b>  } </b></p><p><b>  //消去</b></p><p>  public void xiao() </p><p><b>  { </b></p>

92、;<p>  if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y)))</p><p>  { //如果兩個(gè)按鈕相鄰,則消去 </p><p>  remove(); </p><p><b>  } </b></p&g

93、t;<p><b>  else</b></p><p>  { //如果兩個(gè)按鈕不相鄰</p><p>  //判斷與第一按鈕同行的情況</p><p>  for (j=0;j<7;j++ ) </p><p>  { //判斷第一個(gè)按鈕同行哪個(gè)按鈕為空</p><p> 

94、 if (grid[x0][j]==0)</p><p>  { //如果同行有空按鈕</p><p><b>  if (y>j) </b></p><p>  { //如果第二個(gè)按鈕的y坐標(biāo)大于空按鈕的j坐標(biāo)說明空按鈕在第二按鈕左邊 </p><p>  for (i=y-1;i>=j;i--)</

95、p><p>  { //判斷第二按鈕左側(cè)直到位置(x,j)有沒有按鈕 </p><p>  //即判斷與空按鈕同列、與第二按鈕同行的位置到第二按鈕的左側(cè)為止有沒有按鈕</p><p>  if (grid[x][i]!=0) </p><p>  {//如果有按鈕,則將k初始化為零,并將跳出循環(huán) </p><p><

96、b>  k=0; </b></p><p><b>  break; </b></p><p><b>  } </b></p><p><b>  else</b></p><p>  { //如果沒有按鈕</p><p>  k=

97、1;//K=1說明通過了第一次驗(yàn)證 </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  if (k==1)</b></p><p>  { //k==1說明橫坐標(biāo)為x,縱坐標(biāo)從j到(y-1)的位置都沒有按鈕<

98、/p><p>  //即說明與空按鈕同列、與第二按鈕同行的位置到第二按鈕的左側(cè)為止沒有按鈕</p><p>  linePassOne(); </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  if (y&l

99、t;j)</b></p><p>  { //如果第二個(gè)按鈕的y坐標(biāo)小于空按鈕的j坐標(biāo)說明空按鈕在第二按鈕右邊 </p><p>  for (i=y+1;i<=j;i++)</p><p>  { //判斷第二按鈕右側(cè)直到位置(x,j)有沒有按鈕 </p><p>  if (grid[x][i]!=0)</p>

100、;<p>  { //如果有按鈕,則將k初始化為零,并將跳出循環(huán)</p><p><b>  k=0; </b></p><p><b>  break; </b></p><p><b>  } </b></p><p><b>  else <

101、/b></p><p><b>  {//如果沒有按鈕</b></p><p><b>  k=1;</b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>

102、;  if (k==1)</b></p><p>  { //通過第一次驗(yàn)證,即第二按鈕右側(cè)直到位置(x,j)沒有按鈕</p><p>  linePassOne(); </p><p><b>  } </b></p><p><b>  } </b></p><p

103、>  if (y==j ) </p><p>  { //第二個(gè)按鈕與空按鈕同列,即第二按鈕與第一按鈕同行</p><p>  linePassOne(); </p><p><b>  } </b></p><p><b>  } </b></p><p>  if

104、(k==2) </p><p><b>  {//通過第二驗(yàn)證</b></p><p>  if (x0==x) </p><p>  { //兩個(gè)按鈕在同一行</p><p>  remove(); </p><p><b>  } </b></p><

105、p>  if (x0<x) </p><p>  { //第二個(gè)按鈕所在行在第一按鈕所在行的下面</p><p>  for (n=x0;n<=x-1;n++)</p><p>  { //判斷空按鈕下側(cè)直到位置(x-1,j)有沒有按鈕</p><p>  if (grid[n][j]!=0)</p><

106、p>  { //如果有按鈕,將k初始化為零,并跳出循環(huán)</p><p><b>  k=0; </b></p><p><b>  break; </b></p><p><b>  } </b></p><p>  if(grid[n][j]==0&&n

107、==x-1) </p><p>  { //如果直到位置(x-1,j)沒有按鈕</p><p>  remove(); </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b><

108、/p><p>  if (x0>x) </p><p>  { //第二個(gè)按鈕所在行在第一按鈕所在行的上面</p><p>  for (n=x0;n>=x+1;n--)</p><p>  { //判斷空按鈕上側(cè)直到位置(x+1,j)有沒有按鈕</p><p>  if (grid[n][j]!=0) <

109、;/p><p>  { //如果有按鈕,將k初始化為零,并跳出循環(huán)</p><p><b>  k=0; </b></p><p><b>  break; </b></p><p><b>  } </b></p><p>  if(grid[n][j]=

110、=0&&n==x+1) </p><p>  { //如果直到位置(x+1,j)沒有按鈕</p><p>  remove(); </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } &

111、lt;/b></p><p><b>  } </b></p><p><b>  } </b></p><p>  //判斷與第一按鈕同列情況</p><p>  for (i=0;i<8;i++)</p><p>  { //判斷第一個(gè)按鈕同列哪個(gè)按鈕為空&l

112、t;/p><p>  if (grid[i][y0]==0)</p><p>  { //同列有空按鈕</p><p><b>  if (x>i)</b></p><p>  { //如果第二個(gè)按鈕的x坐標(biāo)大于空按鈕的i坐標(biāo)說明空按鈕在第二按鈕上邊</p><p>  for(j=x-1;j&

113、gt;=i;j--) </p><p>  {//判斷第二按鈕上側(cè)直到位置(i,y)有沒有按鈕 </p><p>  if (grid[j][y]!=0)</p><p>  { //如果有按鈕,將k初始化為零,并跳出循環(huán)</p><p><b>  k=0; </b></p><p><b

114、>  break; </b></p><p><b>  } </b></p><p><b>  else</b></p><p>  { //如果沒有按鈕</p><p>  k=1; //說明通過第一次驗(yàn)證</p><p><b>  } &

115、lt;/b></p><p><b>  } </b></p><p>  if (k==1) </p><p>  { //第二按鈕上側(cè)直到位置(i,y)沒有按鈕</p><p>  rowPassOne(); </p><p><b>  } </b></p&

116、gt;<p><b>  } </b></p><p><b>  if (x<i)</b></p><p>  { //空按鈕在第二按鈕下邊</p><p>  for (j=x+1;j<=i;j++) </p><p>  { //判斷第二按鈕下側(cè)直到位置(i,y)有沒

117、有按鈕</p><p>  if (grid[j][y]!=0)</p><p><b>  { </b></p><p><b>  k=0; </b></p><p><b>  break; </b></p><p><b>  } &l

118、t;/b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  k=1; </b></p><p><b>  } </b></p><p><b>  

119、} </b></p><p><b>  if (k==1)</b></p><p>  { //第二按鈕下側(cè)直到位置(i,y)沒有按鈕</p><p>  rowPassOne(); </p><p><b>  } </b></p><p><b>

120、  } </b></p><p>  if (x==i) </p><p>  { //第二按鈕與空按鈕同行</p><p>  rowPassOne(); </p><p><b>  } </b></p><p><b>  } </b></p>

121、<p><b>  if (k==2)</b></p><p>  { //通過第二次驗(yàn)證</p><p>  if (y0==y) </p><p>  { //兩個(gè)按鈕同列</p><p>  remove(); </p><p><b>  } </b>&l

122、t;/p><p>  if (y0<y) </p><p>  { //第二按鈕所在行在第一按鈕所在行的下面</p><p>  for (n=y0;n<=y-1;n++)</p><p>  { //判斷空按鈕右側(cè)直到位置(i,y-1)有沒有按鈕</p><p>  if (grid[i][n]!=0)<

123、;/p><p>  { //如果有按鈕,將k初始化為零,并跳出循環(huán)</p><p><b>  k=0; </b></p><p><b>  break; </b></p><p><b>  } </b></p><p>  if(grid[i][n]=

124、=0&&n==y-1)</p><p>  { //空按鈕右側(cè)直到位置(i,y-1)沒有按鈕</p><p>  remove(); </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }

125、 </b></p><p>  if (y0>y) </p><p>  { //第二按鈕所在行在第一按鈕所在行的上面</p><p>  for (n=y0;n>=y+1;n--) </p><p>  { //判斷空按鈕左側(cè)直到位置(i,y+1)有沒有按鈕</p><p>  if (gr

126、id[i][n]!=0)</p><p><b>  { </b></p><p><b>  k=0; </b></p><p><b>  break; </b></p><p><b>  } </b></p><p>  i

127、f(grid[i][n]==0&&n==y+1) </p><p>  { //空按鈕左側(cè)直到位置(i,y+1)沒有按鈕</p><p>  remove(); </p><p><b>  } </b></p><p><b>  } </b></p><p&g

128、t;<b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p>

129、;<b>  /**</b></p><p>  * 第一按鈕的同行中存在空按鈕</p><p>  * 判斷在同一行中空按鈕與第一個(gè)按鈕之間的位置是否有按鈕存在,如果有則k=0,否則k=2</p><p><b>  * */</b></p><p>  public void linePassO

130、ne()</p><p><b>  { </b></p><p><b>  if (y0>j)</b></p><p>  { //第一按鈕在同行空按鈕的右邊 </p><p>  for (i=y0-1;i>=j;i--)</p><p>  { //判斷第

131、一按鈕同左側(cè)空按鈕之間有沒按鈕 </p><p>  if (grid[x0][i]!=0) </p><p>  { //如果有按鈕,將k初始化為零,并跳出循環(huán)</p><p><b>  k=0; </b></p><p><b>  break; </b></p><p

132、><b>  } </b></p><p><b>  else</b></p><p><b>  {//如果沒有按鈕</b></p><p>  k=2;//K=2說明通過了第二次驗(yàn)證 </p><p><b>  } </b></p&g

133、t;<p><b>  } </b></p><p><b>  } </b></p><p><b>  if (y0<j)</b></p><p>  { //第一按鈕在同行空按鈕的左邊 </p><p>  for (i=y0+1;i<=j;i+

134、+)</p><p>  { //判斷第一按鈕同右側(cè)空按鈕之間有沒按鈕 </p><p>  if (grid[x0][i]!=0)</p><p>  { //如果有按鈕,將k初始化為零,并跳出循環(huán)</p><p><b>  k=0; </b></p><p><b>  break

135、; </b></p><p><b>  } </b></p><p><b>  else</b></p><p><b>  { </b></p><p><b>  k=2;</b></p><p><b&g

136、t;  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  /**</b></p><p>  * 第一

137、按鈕的同列中存在空按鈕</p><p>  * 判斷在同一列中空按鈕與第一個(gè)按鈕之間的位置是否有按鈕存在,如果有則k=0,否則k=2</p><p><b>  * */</b></p><p>  public void rowPassOne()</p><p><b>  { </b></

138、p><p>  if (x0>i) </p><p>  { //第一按鈕在同列空按鈕的下邊</p><p>  for (j=x0-1;j>=i;j--)</p><p>  { //判斷第一按鈕同上側(cè)空按鈕之間有沒按鈕</p><p>  if (grid[j][y0]!=0) </p>&l

139、t;p>  { //如果有按鈕,將k初始化為零,并跳出循環(huán)</p><p><b>  k=0; </b></p><p><b>  break; </b></p><p><b>  } </b></p><p><b>  else </b>&

140、lt;/p><p><b>  {//如果沒有按鈕</b></p><p>  k=2;//K=2說明通過了第二次驗(yàn)證 </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </

溫馨提示

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

評論

0/150

提交評論