連連看java程序設(shè)計_第1頁
連連看java程序設(shè)計_第2頁
連連看java程序設(shè)計_第3頁
連連看java程序設(shè)計_第4頁
連連看java程序設(shè)計_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

"高級語言程序設(shè)計〔2〕"課程設(shè)計任務(wù)書題目圖片連連看游戲程序?qū)W生****專業(yè)班級設(shè)計內(nèi)容與要求【問題描述】圖片連連看游戲是利用java圖形用戶界面設(shè)計而設(shè)計的圖片連連看游戲界面。它的游戲規(guī)則就是選擇一對內(nèi)容一樣的圖案進展連線,但此連線不能穿跨其他圖案。連線的轉(zhuǎn)折點不能多于兩個,如果符合規(guī)定則消除此對圖案。如果游戲找不到可連接消除的圖案,可以通過鼠標(biāo)點擊重列按鈕讓它重新排列圖案,也可以通過鼠標(biāo)重新開場新的游戲,時間完畢后游戲自動完畢,還可以通過鼠標(biāo)退出游戲?!拒浖δ堋?利用awt實現(xiàn)良好的游戲界面,游戲界面盡可能美觀。2游戲開場時,能產(chǎn)生隨機數(shù)字和隨機位置以及限制的時間。3在按動鼠標(biāo)和鍵盤時,游戲能玩起來,即能響應(yīng)鼠標(biāo)事件。4能消去滿足條件的含有一樣數(shù)字的圖片。5能重列圖片順序。6能選擇退出游戲和重新再來一局?!靖疽蟆?用二維數(shù)組存放游戲按鈕的位置坐標(biāo)。

2用二維數(shù)組存放隨機位置。3調(diào)用按鈕方法將圖片添加到游戲按鈕上。4要求用戶界面采用圖形用戶界面,響應(yīng)鼠標(biāo)事件。5利用awt實現(xiàn)良好的GUI界。6用GridLayout類以矩形網(wǎng)格形式和BorderLayout類以界面布局形式對容器中的組件進展布局。7源程序中要有充分的注釋,報告中要有詳細的流程圖和文字材料。8運行的結(jié)果以及圖形用戶界面要進展屏幕拷貝,插入報告中?!咎峤怀晒?“"高級語言程序設(shè)計(2)"課程設(shè)計任務(wù)書〞和“"高級語言程序設(shè)計(2)"課程設(shè)計報告〞打印件各一份;2先將上面兩項內(nèi)容的word文檔,通過電子交到指導(dǎo)教師,待許可后,打印裝袋。起止時間2012年12月24日至2012年12月30日指導(dǎo)教師簽名2012年12月22日系〔教研室〕主任簽名2012年12月22日學(xué)生簽名2012年12月25日"高級語言程序設(shè)計〔2〕"課程設(shè)計報告專業(yè):班級:**:**:完成日期:指導(dǎo)教師一、程序設(shè)計說明書【設(shè)計題目】圖片連連看游戲程序【問題描述】圖片連連看游戲是利用java圖形用戶界面設(shè)計而設(shè)計的圖片連連看游戲界面。它的游戲規(guī)則就是選擇一對內(nèi)容一樣的圖案進展連線,但此連線不能穿跨其他圖案。連線的轉(zhuǎn)折點不能多于兩個,如果符合規(guī)定則消除此對圖案。如果游戲找不到可連接消除的圖案,可以通過鼠標(biāo)點擊重列按鈕讓它重新排列圖案,也可以通過鼠標(biāo)重新開場新的游戲,時間完畢后游戲自動完畢,還可以通過鼠標(biāo)退出游戲?!拒浖δ堋?利用awt實現(xiàn)良好的游戲界面,游戲界面盡可能美觀。2游戲開場時,能產(chǎn)生隨機數(shù)字和隨機位置以及限制的時間。3在按動鼠標(biāo)和鍵盤時,游戲能玩起來,即能響應(yīng)鼠標(biāo)事件。4能消去滿足條件的含有一樣數(shù)字的圖片。5能重列圖片順序。6能選擇退出游戲和重新再來一局?!舅惴ㄋ枷搿吭跈z驗兩個圖片能否消掉的時候,要讓兩個圖片同時滿足兩個條件才行,就是兩者配對并且連線成功。分3種情況:這三種情況都需要三個檢測,這三個檢測分別檢測一條直路經(jīng)。這樣就會有三條路經(jīng)。假設(shè)這三條路經(jīng)上都是空按鈕,則就剛好是三種直線〔兩個轉(zhuǎn)彎點〕把兩個按鈕連接起來了。(1)、相鄰(2)、假設(shè)不相鄰的先在第一個按鈕的同行找一個空按鈕。1.找到后看第二個按鈕橫向到這個空按鈕所在的列是否有按鈕。2.沒有的話再看第一個按鈕到與它同行的那個空按鈕之間是否有按鈕。3.沒有的話,再從與第一個按鈕同行的那個空按鈕豎向到與第二個按鈕的同行看是否有按鈕。沒有的話路經(jīng)就通了可以消了.(3)、假設(shè)(2)失敗后,再在第一個按鈕的同列找一個空按鈕。1.找到后看第二個按鈕豎向到這個空按鈕所在的行是否有按鈕2.沒有的話,再看第一個按鈕到與它同列的那個空按鈕之間是否有按鈕。3.沒有的話,再從與第一個按鈕同列的那個空按鈕橫向到與第二個按鈕同列看是否有按鈕。沒有的話路經(jīng)就通了,可以消了。假設(shè)以上三步都失敗,說明這兩個按鈕不可以消去兩圖能相連的所有情況:【類的設(shè)計】圖片連連看游戲程序中只有一個類,類名為LianLianKan,該類實現(xiàn)了接口ActionListener;該類總共有十三個方法,他們的功能分別是:init()初始化;createImgBtn()傳進兩個String類型的參數(shù),返回帶有數(shù)字和圖片的按鈕;randomBuild(),產(chǎn)生十五對隨機的數(shù)字;fraction()計算得分;reload()將游戲按鈕重列;estimateEven()傳進兩個int型和一個utton型的三個參數(shù)(分別是擊中的按鈕位置坐標(biāo)和按鈕),選中按鈕信息的存儲與操作;*iao()消去符合游戲規(guī)則的一樣的兩個按鈕;linePassOne()在第一按鈕同行有空按鈕的條件下判斷第二轉(zhuǎn)折點出現(xiàn)的情況;rowPassOne()在第一按鈕同列有空按鈕的條件下判斷第二轉(zhuǎn)折點出現(xiàn)的情況;remove()將一樣的兩個按鈕消去;actionPerformed()實現(xiàn)按鈕事件的監(jiān)聽;timerDemo()時間提示;main()主方法;【用戶界面】【程序技巧】1. 程序采用圖形用戶界面,簡單大方,且易于操作;2. 連連看圖片采用大家熟悉的圖片,能激起玩家的游戲興趣;3. 游戲功能較為齊全,可實現(xiàn)退出、重列和下一局的功能,重列功能可對游戲中剩余的圖片進展重新排列,使游戲繼續(xù)進展,下一局功能可以使游戲重新開場4. 游戲具有倒計時功能,能夠控制游戲時限,使游戲具有一定難度,倒計時完畢時顯示“gameover〞5. 游戲可以統(tǒng)計玩家的游戲得分【模塊劃分及調(diào)用關(guān)系】根據(jù)對連連看游戲的分析,該游戲可分化為三個模塊:算法模塊、界面顯示模塊、菜單控制模塊。調(diào)用關(guān)系:rowPassOne()linePassOne()remove()*iao()init()timerDemo()randomBuild()estimateEven()reload()actionPerformed()createImgBtn()fractionLabel()init()timerDemo()main方法randomBuild()rowPassOne()linePassOne()remove()*iao()init()timerDemo()randomBuild()estimateEven()reload()actionPerformed()createImgBtn()fractionLabel()init()timerDemo()main方法randomBuild()新建LianLianKan對象【模塊流程圖】主模塊流程圖:連連看游戲連連看游戲用戶界面模塊菜單模塊算法模塊用戶界面模塊菜單模塊算法模塊用戶界面模塊流程圖:Button下一局Button重列Button退出Label:您的得分Label:Fraction(分數(shù))Label:TimeLabel:剩余時間EastPanelBorderLayout布局WestPanelBorderLayout布局thisContainer主界面NorthPanelBorderLayout布局SouthPanelBorderLayout布局Button下一局Button重列Button退出Label:您的得分Label:Fraction(分數(shù))Label:TimeLabel:剩余時間EastPanelBorderLayout布局WestPanelBorderLayout布局thisContainer主界面NorthPanelBorderLayout布局SouthPanelBorderLayout布局CCenterPanelGriLayout布局〔7*8〕算法模塊流程圖:消去是否直線相連消去是否相鄰消去是否直線相連是否相鄰是否為同一圖片消去不能消去是否在一條豎線是否在一條橫線是否在同一位置消去是否直線相連消去是否相鄰消去是否直線相連是否相鄰是否為同一圖片消去不能消去是否在一條豎線是否在一條橫線是否在同一位置否是是否是否否是是是否是否否當(dāng)兩圖不在一條直線上,則以兩圖在*\、Y方向的延長線上去找兩個點,使其能連成直線當(dāng)兩圖不在一條直線上,則以兩圖在*\、Y方向的延長線上去找兩個點,使其能連成直線是否不能消去不能消去消去消去【運行說明】將25個圖片和LianLianKan.java文件存在同一個文件夾里javacLianLianKan.javajavaLianLianKan程序上機調(diào)試報告【語法錯誤及其排除】將圖片加載在按鈕上,并在調(diào)用按鈕時會出現(xiàn)隨機的圖片時出現(xiàn)錯誤,最后創(chuàng)立了一個方法uttoncreateImgBtn(Stringing,Stringt*t),作用是傳進兩個String類型的參數(shù),返回帶有數(shù)字和圖片的按鈕,方法中的主要內(nèi)容有ImageIconimage=newImageIcon(getClass().getResource(ing));uttonbutton=newutton(t*t,image);通過調(diào)用這個方法就可以將圖片與按鈕固定在一起。加載計時器時出現(xiàn)錯誤,即如果只在初始方法init()里調(diào)用timerDemo()方法時,在點擊重列按鈕或者下一局按鈕時,時間提示里的時間是兩次時間相摻雜的;改為只在main()方法里調(diào)用timerDemo()方法,在點擊重列按鈕時沒有問題,但在點擊下一局按鈕時,時間還是相摻雜著出現(xiàn);最后改為在main()方法里調(diào)用timerDemo()方法的同時在actionPerformed()方法里將if(e.getSource()==newlyButton) {intgrid[][]=newint[8][7];this.grid=grid; randomBuild();mainFrame.setVisible(false);pressInformation=false; Init(); }改為:if(e.getSource()==newlyButton) {flag=true;intgrid[][]=newint[8][7];this.grid=grid; randomBuild();mainFrame.setVisible(false);pressInformation=false; init(); timerDemo(); }【算法錯誤及其排除】在編輯randomBuild()方法產(chǎn)生隨機的兩兩一樣的數(shù)字時,程序中會出現(xiàn)并非兩兩一樣的圖片,達不到預(yù)期的效果,后改為在randomBuild()方法里添加如下這樣的程序:while(grid[cols][rows]!=0){ cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); }程序才正確。在編輯程序時,定義了一個grid數(shù)組,用來存放游戲按鈕的位置,剛開場定義的是6行5列,結(jié)果玩游戲時,周邊的按鈕不能被消去,后將數(shù)組改為8行7列時才可以,這樣按鈕周邊的一圈就是空按鈕,周邊的按鈕就可以被消去。程序測試結(jié)果【測試數(shù)據(jù)】1、程序運行結(jié)果:2、點擊重列按鈕結(jié)果:3、點擊下一局:4、游戲完畢界面:【輸出結(jié)果】【收獲及體會】通過這次圖片連連看游戲的設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正的提高自己的水平,從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,并且還發(fā)現(xiàn)了自己的許多缺乏之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠結(jié)實。同時在這次的設(shè)計中也小小的體驗了一下做工程的感受。我完成了這次JAVA課程設(shè)計,不過這只是我學(xué)習(xí)路上的驛站。我相信我在未來的學(xué)習(xí)中會記住從本次課程設(shè)計中所學(xué)到的東西,并將它用到未來的學(xué)習(xí)中去。源程序代碼importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Container;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.Timer;importjava.util.TimerTask;importjava*.swing.ImageIcon;importjava*.swing.utton;importjava*.swing.JFrame;importjava*.swing.JLabel;importjava*.swing.JPanel;publicclassLianLianKanimplementsActionListener{//主面板 JFramemainFrame; //面板容器 ContainerthisContainer; //子面板 JPanelcenterPanel,southPanel,northPanel,westPanel,eastPanel; //游戲按鈕數(shù)組 uttondiamondsButton[][]=newutton[6][5]; //開場,退出,重列,重新開場按鈕 uttone*itButton,resetButton,newlyButton;// uttonstartButton; //分數(shù)標(biāo)簽 JLabelfractionLable=newJLabel("0"); //時間標(biāo)簽 JLabeltime=newJLabel(""); //分別記錄兩次被選中的按鈕uttonfristButton,secondButton;//儲存游戲按鈕位置intgrid[][]=newint[8][7];//判斷是否有按鈕被擊中staticbooleanpressInformation=false;//被選中的兩個游戲按鈕的位置坐標(biāo)(*0,y0),(*,y)int*0=0,y0=0,*=0,y=0;//兩個被選中按鈕上相應(yīng)的數(shù)字 intfristMsg=0,secondMsg=0; inti,j,k,n;// ints=0; finalTimert=newTimer(); Colorb=Color.orange; Colorg=Color.cyan; Colorm=Color.pink;// Colorc=Color.blue; booleanflag; //初始化 publicvoidinit() {//創(chuàng)立主面板,并命為連連看 mainFrame=newJFrame("連連看"); thisContainer=mainFrame.getContentPane();// thisContainer.setBackground(c); /** *把thisContainer劃分為Center、South、North三個區(qū)域 *North區(qū)域添加分數(shù) *Center區(qū)域添加游戲按鈕 *South區(qū)域添加退出、重列、下一局等按鈕 */ thisContainer.setLayout(newBorderLayout()); centerPanel=newJPanel(); centerPanel.setBackground(b); southPanel=newJPanel(); southPanel.setBackground(g); northPanel=newJPanel(newBorderLayout());// northPanel.setBackground(m); westPanel=newJPanel(); westPanel.setBackground(m); eastPanel=newJPanel(); eastPanel.setBackground(m);// Labeltime=newLabel("剩余時間:"); thisContainer.add(centerPanel,"Center"); thisContainer.add(southPanel,"South"); thisContainer.add(northPanel,"North"); northPanel.add(westPanel,"West"); northPanel.add(eastPanel,"Center"); westPanel.add(BorderLayout.WEST,newJLabel("剩余時間:")); westPanel.add(BorderLayout.EAST,time); eastPanel.add(BorderLayout.CENTER,newJLabel("您的得分:")); eastPanel.add(BorderLayout.EAST,fractionLable); eastPanel.add(fractionLable,"Center");// northPanel.add(fractionLable);/** *eastPanel.add(newJLabel("您的得分:"));*eastPanel.add(fractionLable); *westPanel.add(BorderLayout.WEST,newJLabel("剩余時間:")); * westPanel.add(BorderLayout.EAST,newJLabel(time)); *northPanel.add(westPanel); */ //把CenterPanel區(qū)域設(shè)置為網(wǎng)格布局 centerPanel.setLayout(newGridLayout(6,5)); for(intcols=0;cols<6;cols++) { for(introws=0;rows<5;rows++) { if(grid[cols+1][rows+1]!=0) {//給指定按鈕添加圖片 diamondsButton[cols][rows]=createImgBtn(grid[cols+1][rows+1]+".jpg",String.valueOf(grid[cols+1][rows+1])); } else {//當(dāng)指定按鈕為空時傳空字符串即照片為傳的照片為空 diamondsButton[cols][rows]=createImgBtn("",String.valueOf(grid[cols+1][rows+1])); }/** * else * { * //當(dāng)指定按鈕為空時將其定義為新的按鈕 * diamondsButton[cols][rows]=newutton(); * }*/ diamondsButton[cols][rows].addActionListener(this); centerPanel.add(diamondsButton[cols][rows]); } }// startButton=newutton("開場");// startButton.addActionListener(this); e*itButton=newutton("退出"); e*itButton.addActionListener(this); resetButton=newutton("重列"); resetButton.addActionListener(this); newlyButton=newutton("下一局"); newlyButton.addActionListener(this);// southPanel.add(startButton); southPanel.add(e*itButton); southPanel.add(resetButton); southPanel.add(newlyButton); /** *為該標(biāo)簽設(shè)置一個文本字符串 *該字符串為標(biāo)簽字符串所顯示的文本字符串作為有符號的十進制整數(shù)為參數(shù)的字符串 */ fractionLable.setTe*t(String.valueOf(Integer.parseInt(fractionLable.getTe*t()))); mainFrame.setBounds(180,10,800,650);//設(shè)置主面板的位置和大小 mainFrame.setVisible(false); mainFrame.setVisible(true);// centerPanel.setVisible(false);// timerDemo(); } //創(chuàng)立帶有圖片的按鈕 publicuttoncreateImgBtn(Stringing,Stringt*t) {//根據(jù)給定名稱的資源創(chuàng)立一個ImageIcon。 ImageIconimage=newImageIcon(getClass().getResource(ing)); uttonbutton=newutton(t*t,image); //設(shè)置文本〔即數(shù)字〕相對于圖標(biāo)的垂直位置為底及水平位置為中心 button.setVerticalTe*tPosition(utton.BOTTOM); button.setHorizontalTe*tPosition(utton.CENTER); returnbutton; } /** *產(chǎn)生游戲中的隨機數(shù)字 *數(shù)字至少兩兩一樣 */ publicvoidrandomBuild() { intrandoms,cols,rows; for(inttwins=1;twins<=15;twins++) { randoms=(int)(Math.random()*25+1);//隨機產(chǎn)生一個1~25的數(shù)字 for(intalike=1;alike<=2;alike++) {//產(chǎn)生兩個隨機的坐標(biāo)來存放同一個數(shù)字 cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); while(grid[cols][rows]!=0)//防止出現(xiàn)重復(fù)的坐標(biāo) { cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); } this.grid[cols][rows]=randoms; } } } //計算得分 publicvoidfraction() { fractionLable.setTe*t(String.valueOf(Integer.parseInt(fractionLable.getTe*t())+100)); } //重列 publicvoidreload() { intsave[]=newint[30]; intn=0,cols,rows; intgrid[][]=newint[8][7];// time.setVisible(false); for(inti=0;i<=6;i++) { for(intj=0;j<=5;j++) { if(this.grid[i][j]!=0) {//將未消去的圖片的數(shù)字放在save數(shù)組中 save[n]=this.grid[i][j]; n++; } } } n=n-1; this.grid=grid;//把grid數(shù)組全部初始化為零 while(n>=0) {//將剩下的所有圖片數(shù)字重新隨機放在數(shù)組grid中 cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); while(grid[cols][rows]!=0)//防止出現(xiàn)重復(fù)的坐標(biāo) { cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); } this.grid[cols][rows]=save[n]; n--; } mainFrame.setVisible(false); //將按鈕點擊信息歸為初始 pressInformation=false; init(); for(inti=0;i<6;i++) { for(intj=0;j<5;j++) {if(grid[i+1][j+1]==0) {//將消去的按鈕設(shè)置為不可見 diamondsButton[i][j].setVisible(false); } } } } //選中按鈕信息的存儲與操作 publicvoidestimateEven(intplace*,intplaceY,uttonbz) { if(pressInformation==false) {//如果第一個按鈕未被擊中,則將傳來的按鈕坐標(biāo)賦給(*,y) *=place*; y=placeY; fristMsg=grid[*][y];//將按鈕上的數(shù)字賦給fristMsg fristButton=bz;//將(place*,placey)位置上的按鈕bz賦給fristButton pressInformation=true;//將按鈕點擊信息設(shè)置為true } else {/** *如果第一個按鈕被擊中,則將第一個按鈕坐標(biāo)賦給(*0,y0) *將fristButton按鈕賦給secondButton按鈕 *將傳來的按鈕坐標(biāo)賦給坐標(biāo)〔*,y〕 *如果當(dāng)兩個不同的按鈕上的數(shù)字相等時則調(diào)用remove()函數(shù)消去 */ *0=*; y0=y; secondMsg=fristMsg;//將擊中的第一個按鈕上的數(shù)字賦給第二個按鈕 secondButton=fristButton;//將第一個按鈕賦給第二個按鈕 *=place*; y=placeY; fristMsg=grid[*][y];//將傳過來的按鈕上的數(shù)字賦給fristMsg fristButton=bz;//將傳過來的按鈕賦給fristButton if(fristMsg==secondMsg&&secondButton!=fristButton) {//如果當(dāng)兩個不同的按鈕上的數(shù)字相等時則消去 *iao(); } } } //消去 publicvoid*iao() { if((*0==*&&(y0==y+1||y0==y-1))||((*0==*+1||*0==*-1)&&(y0==y))) {//如果兩個按鈕相鄰,則消去 remove(); } else {//如果兩個按鈕不相鄰 //判斷與第一按鈕同行的情況 for(j=0;j<7;j++) {//判斷第一個按鈕同行哪個按鈕為空 if(grid[*0][j]==0) {//如果同行有空按鈕 if(y>j) {//如果第二個按鈕的y坐標(biāo)大于空按鈕的j坐標(biāo)說明空按鈕在第二按鈕左邊 for(i=y-1;i>=j;i--) {//判斷第二按鈕左側(cè)直到位置(*,j)有沒有按鈕 //即判斷與空按鈕同列、與第二按鈕同行的位置到第二按鈕的左側(cè)為止有沒有按鈕 if(grid[*][i]!=0) {//如果有按鈕,則將k初始化為零,并將跳出循環(huán) k=0; break; } else {//如果沒有按鈕 k=1;//K=1說明通過了第一次驗證 } } if(k==1) {//k==1說明橫坐標(biāo)為*,縱坐標(biāo)從j到(y-1)的位置都沒有按鈕 //即說明與空按鈕同列、與第二按鈕同行的位置到第二按鈕的左側(cè)為止沒有按鈕 linePassOne(); } } if(y<j) {//如果第二個按鈕的y坐標(biāo)小于空按鈕的j坐標(biāo)說明空按鈕在第二按鈕右邊 for(i=y+1;i<=j;i++) {//判斷第二按鈕右側(cè)直到位置(*,j)有沒有按鈕 if(grid[*][i]!=0) {//如果有按鈕,則將k初始化為零,并將跳出循環(huán) k=0; break; } else {//如果沒有按鈕 k=1; } } if(k==1) {//通過第一次驗證,即第二按鈕右側(cè)直到位置(*,j)沒有按鈕 linePassOne(); } } if(y==j) {//第二個按鈕與空按鈕同列,即第二按鈕與第一按鈕同行 linePassOne(); } } if(k==2) {//通過第二驗證 if(*0==*) {//兩個按鈕在同一行 remove(); } if(*0<*) {//第二個按鈕所在行在第一按鈕所在行的下面 for(n=*0;n<=*-1;n++) {//判斷空按鈕下側(cè)直到位置(*-1,j)有沒有按鈕 if(grid[n][j]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } if(grid[n][j]==0&&n==*-1) {//如果直到位置(*-1,j)沒有按鈕 remove(); } } } if(*0>*) {//第二個按鈕所在行在第一按鈕所在行的上面 for(n=*0;n>=*+1;n--) {//判斷空按鈕上側(cè)直到位置(*+1,j)有沒有按鈕 if(grid[n][j]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } if(grid[n][j]==0&&n==*+1) {//如果直到位置(*+1,j)沒有按鈕 remove(); } } } } } //判斷與第一按鈕同列情況 for(i=0;i<8;i++) {//判斷第一個按鈕同列哪個按鈕為空 if(grid[i][y0]==0) {//同列有空按鈕 if(*>i) {//如果第二個按鈕的*坐標(biāo)大于空按鈕的i坐標(biāo)說明空按鈕在第二按鈕上邊 for(j=*-1;j>=i;j--) {//判斷第二按鈕上側(cè)直到位置(i,y)有沒有按鈕 if(grid[j][y]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } else {//如果沒有按鈕 k=1;//說明通過第一次驗證 } } if(k==1) {//第二按鈕上側(cè)直到位置(i,y)沒有按鈕 rowPassOne(); } } if(*<i) {//空按鈕在第二按鈕下邊 for(j=*+1;j<=i;j++) {//判斷第二按鈕下側(cè)直到位置(i,y)有沒有按鈕 if(grid[j][y]!=0) { k=0; break; } else { k=1; } } if(k==1) {//第二按鈕下側(cè)直到位置(i,y)沒有按鈕 rowPassOne(); } } if(*==i) {//第二按鈕與空按鈕同行 rowPassOne(); } } if(k==2) {//通過第二次驗證 if(y0==y) {//兩個按鈕同列 remove(); } if(y0<y) {//第二按鈕所在行在第一按鈕所在行的下面 for(n=y0;n<=y-1;n++) {//判斷空按鈕右側(cè)直到位置(i,y-1)有沒有按鈕 if(grid[i][n]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } if(grid[i][n]==0&&n==y-1) {//空按鈕右側(cè)直到位置(i,y-1)沒有按鈕 remove(); } } } if(y0>y) {//第二按鈕所在行在第一按鈕所在行的上面 for(n=y0;n>=y+1;n--) {//判斷空按鈕左側(cè)直到位置(i,y+1)有沒有按鈕 if(grid[i][n]!=0) { k=0; break; } if(grid[i][n]==0&&n==y+1) {//空按鈕左側(cè)直到位置(i,y+1)沒有按鈕 remove(); } } } } } } } /** *第一按鈕的同行中存在空按鈕 *判斷在同一行中空按鈕與第一個按鈕之間的位置是否有按鈕存在,如果有則k=0,否則k=2 **/ publicvoidlinePassOne() { if(y0>j) {//第一按鈕在同行空按鈕的右邊 for(i=y0-1;i>=j;i--) {//判斷第一按鈕同左側(cè)空按鈕之間有沒按鈕 if(grid[*0][i]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } else {//如果沒有按鈕 k=2;//K=2說明通過了第二次驗證 } } } if(y0<j) {//第一按鈕在同行空按鈕的左邊 for(i=y0+1;i<=j;i++) {//判斷第一按鈕同右側(cè)空按鈕之間有沒按鈕 if(grid[*0][i]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } else { k=2; } } }} /** *第一按鈕的同列中存在空按鈕 *判斷在同一列中空按鈕與第一個按鈕之間的位置是否有按鈕存在,如果有則k=0,否則k=2 **/ publicvoidrowPassOne() { if(*0>i) {//第一按鈕在同列空按鈕的下邊 for(j=*0-1;j>=i;j--) {//判斷第一按鈕同上側(cè)空按鈕之間有沒按鈕 if(grid[j][y0]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } else {//如果沒有按鈕 k=2;//K=2說明通過了第二次驗證 } } } if(*0<i) {//第一按鈕在同列空按鈕的上邊 for(j=*0+1;j<=i;j++) {//判斷第一按鈕同下側(cè)空按鈕之間有沒按鈕 if(grid[j][y0]!=0) { k=0; break; } else { k=2; } } } } //將一樣兩個按鈕消去,即設(shè)為不可見 publicvoidremove() { fristButton.setVisible(false); secondButton.setVisible(false); fraction();//每消去一對按鈕則加100分 /** *將點擊按鈕信息歸為初始 *將K和被消去的兩個按鈕的坐標(biāo)初始為零 */ pressInformation=false; k=0; grid[*0][y0]=0; grid[*][y]=0; } //實現(xiàn)事件監(jiān)聽 publicvoidactionPerformed(ActionEvente) {// if(e.getSource()==startButton)// {//點擊開場按鈕事件//// init();// centerPanel.setVisible(true);// timerDemo();// flag=true;// } if(e.getSource()==newlyButton) {//點擊下一局按鈕事件// t.cancel(); flag=true; intgrid[][]=newint[8][7]; this.grid=grid;//將grid數(shù)組初始化為零 randomBuild();//重新獲取15個隨機的1~25的數(shù)字 //將一切信息歸為初始 mainFrame.setVisible(false); pressInformation=false;// fractionLable.setTe*t("0"); init();// t.cancel(); timerDemo();// time.setVisible(false);// timerDemo();// time.setVisible(true); } if(e.getSource()==e*itButton) {//點擊退出按鈕事件 System.e*it(0); } if(e.getSource()==resetButton) {//點擊重列按鈕事件 reload(); } for(intcols=0;cols<6;cols++) { for(introws=0;rows<5;rows++) { if(e.getSource()==diamondsButton[cols][rows]) {//當(dāng)點擊按鈕時,調(diào)用estimateEven方法 estimateEven(cols+1,rows+1,diamondsButton[cols][rows]); } } }} /** *publicvoidtimerDemo() *{ *t.schedule(new

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論