版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 連連看課程設(shè)計(jì)
- java連連看課程設(shè)計(jì)
- java連連看課程設(shè)計(jì)
- java課程設(shè)計(jì)—連連看
- 連連看課程設(shè)計(jì)報(bào)告
- java連連看課程設(shè)計(jì)報(bào)告
- labview連連看課程設(shè)計(jì)報(bào)告
- java連連看課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--連連看游戲設(shè)計(jì)
- 連連看c語言課程設(shè)計(jì)報(bào)告
- android課程設(shè)計(jì)連連看小游戲
- java課程設(shè)計(jì)--連連看游戲的開發(fā)
- 課程設(shè)計(jì)報(bào)告----java實(shí)現(xiàn)游戲連連看
- jav課程設(shè)計(jì)報(bào)告書——連連看
- java課程設(shè)計(jì)說明書---連連看
- 連連看
- 連連看.docx
- 連連看項(xiàng)目
- 連連看解釋
- 連連看游戲設(shè)計(jì)論文
評論
0/150
提交評論