版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
"高級(jí)語(yǔ)言程序設(shè)計(jì)〔2〕"課程設(shè)計(jì)任務(wù)書題目圖片連連看游戲程序?qū)W生****專業(yè)班級(jí)設(shè)計(jì)內(nèi)容與要求【問(wèn)題描述】圖片連連看游戲是利用java圖形用戶界面設(shè)計(jì)而設(shè)計(jì)的圖片連連看游戲界面。它的游戲規(guī)則就是選擇一對(duì)內(nèi)容一樣的圖案進(jìn)展連線,但此連線不能穿跨其他圖案。連線的轉(zhuǎn)折點(diǎn)不能多于兩個(gè),如果符合規(guī)定則消除此對(duì)圖案。如果游戲找不到可連接消除的圖案,可以通過(guò)鼠標(biāo)點(diǎn)擊重列按鈕讓它重新排列圖案,也可以通過(guò)鼠標(biāo)重新開(kāi)場(chǎng)新的游戲,時(shí)間完畢后游戲自動(dòng)完畢,還可以通過(guò)鼠標(biāo)退出游戲?!拒浖δ堋?利用awt實(shí)現(xiàn)良好的游戲界面,游戲界面盡可能美觀。2游戲開(kāi)場(chǎng)時(shí),能產(chǎn)生隨機(jī)數(shù)字和隨機(jī)位置以及限制的時(shí)間。3在按動(dòng)鼠標(biāo)和鍵盤時(shí),游戲能玩起來(lái),即能響應(yīng)鼠標(biāo)事件。4能消去滿足條件的含有一樣數(shù)字的圖片。5能重列圖片順序。6能選擇退出游戲和重新再來(lái)一局?!靖疽蟆?用二維數(shù)組存放游戲按鈕的位置坐標(biāo)。
2用二維數(shù)組存放隨機(jī)位置。3調(diào)用按鈕方法將圖片添加到游戲按鈕上。4要求用戶界面采用圖形用戶界面,響應(yīng)鼠標(biāo)事件。5利用awt實(shí)現(xiàn)良好的GUI界。6用GridLayout類以矩形網(wǎng)格形式和BorderLayout類以界面布局形式對(duì)容器中的組件進(jìn)展布局。7源程序中要有充分的注釋,報(bào)告中要有詳細(xì)的流程圖和文字材料。8運(yùn)行的結(jié)果以及圖形用戶界面要進(jìn)展屏幕拷貝,插入報(bào)告中?!咎峤怀晒?“"高級(jí)語(yǔ)言程序設(shè)計(jì)(2)"課程設(shè)計(jì)任務(wù)書〞和“"高級(jí)語(yǔ)言程序設(shè)計(jì)(2)"課程設(shè)計(jì)報(bào)告〞打印件各一份;2先將上面兩項(xiàng)內(nèi)容的word文檔,通過(guò)電子交到指導(dǎo)教師,待許可后,打印裝袋。起止時(shí)間2012年12月24日至2012年12月30日指導(dǎo)教師簽名2012年12月22日系〔教研室〕主任簽名2012年12月22日學(xué)生簽名2012年12月25日"高級(jí)語(yǔ)言程序設(shè)計(jì)〔2〕"課程設(shè)計(jì)報(bào)告專業(yè):班級(jí):**:**:完成日期:指導(dǎo)教師一、程序設(shè)計(jì)說(shuō)明書【設(shè)計(jì)題目】圖片連連看游戲程序【問(wèn)題描述】圖片連連看游戲是利用java圖形用戶界面設(shè)計(jì)而設(shè)計(jì)的圖片連連看游戲界面。它的游戲規(guī)則就是選擇一對(duì)內(nèi)容一樣的圖案進(jìn)展連線,但此連線不能穿跨其他圖案。連線的轉(zhuǎn)折點(diǎn)不能多于兩個(gè),如果符合規(guī)定則消除此對(duì)圖案。如果游戲找不到可連接消除的圖案,可以通過(guò)鼠標(biāo)點(diǎn)擊重列按鈕讓它重新排列圖案,也可以通過(guò)鼠標(biāo)重新開(kāi)場(chǎng)新的游戲,時(shí)間完畢后游戲自動(dòng)完畢,還可以通過(guò)鼠標(biāo)退出游戲?!拒浖δ堋?利用awt實(shí)現(xiàn)良好的游戲界面,游戲界面盡可能美觀。2游戲開(kāi)場(chǎng)時(shí),能產(chǎn)生隨機(jī)數(shù)字和隨機(jī)位置以及限制的時(shí)間。3在按動(dòng)鼠標(biāo)和鍵盤時(shí),游戲能玩起來(lái),即能響應(yīng)鼠標(biāo)事件。4能消去滿足條件的含有一樣數(shù)字的圖片。5能重列圖片順序。6能選擇退出游戲和重新再來(lái)一局?!舅惴ㄋ枷搿吭跈z驗(yàn)兩個(gè)圖片能否消掉的時(shí)候,要讓兩個(gè)圖片同時(shí)滿足兩個(gè)條件才行,就是兩者配對(duì)并且連線成功。分3種情況:這三種情況都需要三個(gè)檢測(cè),這三個(gè)檢測(cè)分別檢測(cè)一條直路經(jīng)。這樣就會(huì)有三條路經(jīng)。假設(shè)這三條路經(jīng)上都是空按鈕,則就剛好是三種直線〔兩個(gè)轉(zhuǎn)彎點(diǎn)〕把兩個(gè)按鈕連接起來(lái)了。(1)、相鄰(2)、假設(shè)不相鄰的先在第一個(gè)按鈕的同行找一個(gè)空按鈕。1.找到后看第二個(gè)按鈕橫向到這個(gè)空按鈕所在的列是否有按鈕。2.沒(méi)有的話再看第一個(gè)按鈕到與它同行的那個(gè)空按鈕之間是否有按鈕。3.沒(méi)有的話,再?gòu)呐c第一個(gè)按鈕同行的那個(gè)空按鈕豎向到與第二個(gè)按鈕的同行看是否有按鈕。沒(méi)有的話路經(jīng)就通了可以消了.(3)、假設(shè)(2)失敗后,再在第一個(gè)按鈕的同列找一個(gè)空按鈕。1.找到后看第二個(gè)按鈕豎向到這個(gè)空按鈕所在的行是否有按鈕2.沒(méi)有的話,再看第一個(gè)按鈕到與它同列的那個(gè)空按鈕之間是否有按鈕。3.沒(méi)有的話,再?gòu)呐c第一個(gè)按鈕同列的那個(gè)空按鈕橫向到與第二個(gè)按鈕同列看是否有按鈕。沒(méi)有的話路經(jīng)就通了,可以消了。假設(shè)以上三步都失敗,說(shuō)明這兩個(gè)按鈕不可以消去兩圖能相連的所有情況:【類的設(shè)計(jì)】圖片連連看游戲程序中只有一個(gè)類,類名為L(zhǎng)ianLianKan,該類實(shí)現(xiàn)了接口ActionListener;該類總共有十三個(gè)方法,他們的功能分別是:init()初始化;createImgBtn()傳進(jìn)兩個(gè)String類型的參數(shù),返回帶有數(shù)字和圖片的按鈕;randomBuild(),產(chǎn)生十五對(duì)隨機(jī)的數(shù)字;fraction()計(jì)算得分;reload()將游戲按鈕重列;estimateEven()傳進(jìn)兩個(gè)int型和一個(gè)utton型的三個(gè)參數(shù)(分別是擊中的按鈕位置坐標(biāo)和按鈕),選中按鈕信息的存儲(chǔ)與操作;*iao()消去符合游戲規(guī)則的一樣的兩個(gè)按鈕;linePassOne()在第一按鈕同行有空按鈕的條件下判斷第二轉(zhuǎn)折點(diǎn)出現(xiàn)的情況;rowPassOne()在第一按鈕同列有空按鈕的條件下判斷第二轉(zhuǎn)折點(diǎn)出現(xiàn)的情況;remove()將一樣的兩個(gè)按鈕消去;actionPerformed()實(shí)現(xiàn)按鈕事件的監(jiān)聽(tīng);timerDemo()時(shí)間提示;main()主方法;【用戶界面】【程序技巧】1. 程序采用圖形用戶界面,簡(jiǎn)單大方,且易于操作;2. 連連看圖片采用大家熟悉的圖片,能激起玩家的游戲興趣;3. 游戲功能較為齊全,可實(shí)現(xiàn)退出、重列和下一局的功能,重列功能可對(duì)游戲中剩余的圖片進(jìn)展重新排列,使游戲繼續(xù)進(jìn)展,下一局功能可以使游戲重新開(kāi)場(chǎng)4. 游戲具有倒計(jì)時(shí)功能,能夠控制游戲時(shí)限,使游戲具有一定難度,倒計(jì)時(shí)完畢時(shí)顯示“gameover〞5. 游戲可以統(tǒng)計(jì)玩家的游戲得分【模塊劃分及調(diào)用關(guān)系】根據(jù)對(duì)連連看游戲的分析,該游戲可分化為三個(gè)模塊:算法模塊、界面顯示模塊、菜單控制模塊。調(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對(duì)象【模塊流程圖】主模塊流程圖:連連看游戲連連看游戲用戶界面模塊菜單模塊算法模塊用戶界面模塊菜單模塊算法模塊用戶界面模塊流程圖:Button下一局Button重列Button退出Label:您的得分Label:Fraction(分?jǐn)?shù))Label:TimeLabel:剩余時(shí)間EastPanelBorderLayout布局WestPanelBorderLayout布局thisContainer主界面NorthPanelBorderLayout布局SouthPanelBorderLayout布局Button下一局Button重列Button退出Label:您的得分Label:Fraction(分?jǐn)?shù))Label:TimeLabel:剩余時(shí)間EastPanelBorderLayout布局WestPanelBorderLayout布局thisContainer主界面NorthPanelBorderLayout布局SouthPanelBorderLayout布局CCenterPanelGriLayout布局〔7*8〕算法模塊流程圖:消去是否直線相連消去是否相鄰消去是否直線相連是否相鄰是否為同一圖片消去不能消去是否在一條豎線是否在一條橫線是否在同一位置消去是否直線相連消去是否相鄰消去是否直線相連是否相鄰是否為同一圖片消去不能消去是否在一條豎線是否在一條橫線是否在同一位置否是是否是否否是是是否是否否當(dāng)兩圖不在一條直線上,則以兩圖在*\、Y方向的延長(zhǎng)線上去找兩個(gè)點(diǎn),使其能連成直線當(dāng)兩圖不在一條直線上,則以兩圖在*\、Y方向的延長(zhǎng)線上去找兩個(gè)點(diǎn),使其能連成直線是否不能消去不能消去消去消去【運(yùn)行說(shuō)明】將25個(gè)圖片和LianLianKan.java文件存在同一個(gè)文件夾里javacLianLianKan.javajavaLianLianKan程序上機(jī)調(diào)試報(bào)告【語(yǔ)法錯(cuò)誤及其排除】將圖片加載在按鈕上,并在調(diào)用按鈕時(shí)會(huì)出現(xiàn)隨機(jī)的圖片時(shí)出現(xiàn)錯(cuò)誤,最后創(chuàng)立了一個(gè)方法uttoncreateImgBtn(Stringing,Stringt*t),作用是傳進(jìn)兩個(gè)String類型的參數(shù),返回帶有數(shù)字和圖片的按鈕,方法中的主要內(nèi)容有ImageIconimage=newImageIcon(getClass().getResource(ing));uttonbutton=newutton(t*t,image);通過(guò)調(diào)用這個(gè)方法就可以將圖片與按鈕固定在一起。加載計(jì)時(shí)器時(shí)出現(xiàn)錯(cuò)誤,即如果只在初始方法init()里調(diào)用timerDemo()方法時(shí),在點(diǎn)擊重列按鈕或者下一局按鈕時(shí),時(shí)間提示里的時(shí)間是兩次時(shí)間相摻雜的;改為只在main()方法里調(diào)用timerDemo()方法,在點(diǎn)擊重列按鈕時(shí)沒(méi)有問(wèn)題,但在點(diǎn)擊下一局按鈕時(shí),時(shí)間還是相摻雜著出現(xiàn);最后改為在main()方法里調(diào)用timerDemo()方法的同時(shí)在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(); }【算法錯(cuò)誤及其排除】在編輯randomBuild()方法產(chǎn)生隨機(jī)的兩兩一樣的數(shù)字時(shí),程序中會(huì)出現(xiàn)并非兩兩一樣的圖片,達(dá)不到預(yù)期的效果,后改為在randomBuild()方法里添加如下這樣的程序:while(grid[cols][rows]!=0){ cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); }程序才正確。在編輯程序時(shí),定義了一個(gè)grid數(shù)組,用來(lái)存放游戲按鈕的位置,剛開(kāi)場(chǎng)定義的是6行5列,結(jié)果玩游戲時(shí),周邊的按鈕不能被消去,后將數(shù)組改為8行7列時(shí)才可以,這樣按鈕周邊的一圈就是空按鈕,周邊的按鈕就可以被消去。程序測(cè)試結(jié)果【測(cè)試數(shù)據(jù)】1、程序運(yùn)行結(jié)果:2、點(diǎn)擊重列按鈕結(jié)果:3、點(diǎn)擊下一局:4、游戲完畢界面:【輸出結(jié)果】【收獲及體會(huì)】通過(guò)這次圖片連連看游戲的設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正的提高自己的水平,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,并且還發(fā)現(xiàn)了自己的許多缺乏之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠結(jié)實(shí)。同時(shí)在這次的設(shè)計(jì)中也小小的體驗(yàn)了一下做工程的感受。我完成了這次JAVA課程設(shè)計(jì),不過(guò)這只是我學(xué)習(xí)路上的驛站。我相信我在未來(lái)的學(xué)習(xí)中會(huì)記住從本次課程設(shè)計(jì)中所學(xué)到的東西,并將它用到未來(lái)的學(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]; //開(kāi)場(chǎng),退出,重列,重新開(kāi)場(chǎng)按鈕 uttone*itButton,resetButton,newlyButton;// uttonstartButton; //分?jǐn)?shù)標(biāo)簽 JLabelfractionLable=newJLabel("0"); //時(shí)間標(biāo)簽 JLabeltime=newJLabel(""); //分別記錄兩次被選中的按鈕uttonfristButton,secondButton;//儲(chǔ)存游戲按鈕位置intgrid[][]=newint[8][7];//判斷是否有按鈕被擊中staticbooleanpressInformation=false;//被選中的兩個(gè)游戲按鈕的位置坐標(biāo)(*0,y0),(*,y)int*0=0,y0=0,*=0,y=0;//兩個(gè)被選中按鈕上相應(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三個(gè)區(qū)域 *North區(qū)域添加分?jǐn)?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("剩余時(shí)間:"); 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("剩余時(shí)間:")); 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("剩余時(shí)間:")); * 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)指定按鈕為空時(shí)傳空字符串即照片為傳的照片為空 diamondsButton[cols][rows]=createImgBtn("",String.valueOf(grid[cols+1][rows+1])); }/** * else * { * //當(dāng)指定按鈕為空時(shí)將其定義為新的按鈕 * diamondsButton[cols][rows]=newutton(); * }*/ diamondsButton[cols][rows].addActionListener(this); centerPanel.add(diamondsButton[cols][rows]); } }// startButton=newutton("開(kāi)場(chǎng)");// 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è)置一個(gè)文本字符串 *該字符串為標(biāo)簽字符串所顯示的文本字符串作為有符號(hào)的十進(jìn)制整數(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)立一個(gè)ImageIcon。 ImageIconimage=newImageIcon(getClass().getResource(ing)); uttonbutton=newutton(t*t,image); //設(shè)置文本〔即數(shù)字〕相對(duì)于圖標(biāo)的垂直位置為底及水平位置為中心 button.setVerticalTe*tPosition(utton.BOTTOM); button.setHorizontalTe*tPosition(utton.CENTER); returnbutton; } /** *產(chǎn)生游戲中的隨機(jī)數(shù)字 *數(shù)字至少兩兩一樣 */ publicvoidrandomBuild() { intrandoms,cols,rows; for(inttwins=1;twins<=15;twins++) { randoms=(int)(Math.random()*25+1);//隨機(jī)產(chǎn)生一個(gè)1~25的數(shù)字 for(intalike=1;alike<=2;alike++) {//產(chǎn)生兩個(gè)隨機(jī)的坐標(biāo)來(lái)存放同一個(gè)數(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; } } } //計(jì)算得分 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ù)字重新隨機(jī)放在數(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); //將按鈕點(diǎn)擊信息歸為初始 pressInformation=false; init(); for(inti=0;i<6;i++) { for(intj=0;j<5;j++) {if(grid[i+1][j+1]==0) {//將消去的按鈕設(shè)置為不可見(jiàn) diamondsButton[i][j].setVisible(false); } } } } //選中按鈕信息的存儲(chǔ)與操作 publicvoidestimateEven(intplace*,intplaceY,uttonbz) { if(pressInformation==false) {//如果第一個(gè)按鈕未被擊中,則將傳來(lái)的按鈕坐標(biāo)賦給(*,y) *=place*; y=placeY; fristMsg=grid[*][y];//將按鈕上的數(shù)字賦給fristMsg fristButton=bz;//將(place*,placey)位置上的按鈕bz賦給fristButton pressInformation=true;//將按鈕點(diǎn)擊信息設(shè)置為true } else {/** *如果第一個(gè)按鈕被擊中,則將第一個(gè)按鈕坐標(biāo)賦給(*0,y0) *將fristButton按鈕賦給secondButton按鈕 *將傳來(lái)的按鈕坐標(biāo)賦給坐標(biāo)〔*,y〕 *如果當(dāng)兩個(gè)不同的按鈕上的數(shù)字相等時(shí)則調(diào)用remove()函數(shù)消去 */ *0=*; y0=y; secondMsg=fristMsg;//將擊中的第一個(gè)按鈕上的數(shù)字賦給第二個(gè)按鈕 secondButton=fristButton;//將第一個(gè)按鈕賦給第二個(gè)按鈕 *=place*; y=placeY; fristMsg=grid[*][y];//將傳過(guò)來(lái)的按鈕上的數(shù)字賦給fristMsg fristButton=bz;//將傳過(guò)來(lái)的按鈕賦給fristButton if(fristMsg==secondMsg&&secondButton!=fristButton) {//如果當(dāng)兩個(gè)不同的按鈕上的數(shù)字相等時(shí)則消去 *iao(); } } } //消去 publicvoid*iao() { if((*0==*&&(y0==y+1||y0==y-1))||((*0==*+1||*0==*-1)&&(y0==y))) {//如果兩個(gè)按鈕相鄰,則消去 remove(); } else {//如果兩個(gè)按鈕不相鄰 //判斷與第一按鈕同行的情況 for(j=0;j<7;j++) {//判斷第一個(gè)按鈕同行哪個(gè)按鈕為空 if(grid[*0][j]==0) {//如果同行有空按鈕 if(y>j) {//如果第二個(gè)按鈕的y坐標(biāo)大于空按鈕的j坐標(biāo)說(shuō)明空按鈕在第二按鈕左邊 for(i=y-1;i>=j;i--) {//判斷第二按鈕左側(cè)直到位置(*,j)有沒(méi)有按鈕 //即判斷與空按鈕同列、與第二按鈕同行的位置到第二按鈕的左側(cè)為止有沒(méi)有按鈕 if(grid[*][i]!=0) {//如果有按鈕,則將k初始化為零,并將跳出循環(huán) k=0; break; } else {//如果沒(méi)有按鈕 k=1;//K=1說(shuō)明通過(guò)了第一次驗(yàn)證 } } if(k==1) {//k==1說(shuō)明橫坐標(biāo)為*,縱坐標(biāo)從j到(y-1)的位置都沒(méi)有按鈕 //即說(shuō)明與空按鈕同列、與第二按鈕同行的位置到第二按鈕的左側(cè)為止沒(méi)有按鈕 linePassOne(); } } if(y<j) {//如果第二個(gè)按鈕的y坐標(biāo)小于空按鈕的j坐標(biāo)說(shuō)明空按鈕在第二按鈕右邊 for(i=y+1;i<=j;i++) {//判斷第二按鈕右側(cè)直到位置(*,j)有沒(méi)有按鈕 if(grid[*][i]!=0) {//如果有按鈕,則將k初始化為零,并將跳出循環(huán) k=0; break; } else {//如果沒(méi)有按鈕 k=1; } } if(k==1) {//通過(guò)第一次驗(yàn)證,即第二按鈕右側(cè)直到位置(*,j)沒(méi)有按鈕 linePassOne(); } } if(y==j) {//第二個(gè)按鈕與空按鈕同列,即第二按鈕與第一按鈕同行 linePassOne(); } } if(k==2) {//通過(guò)第二驗(yàn)證 if(*0==*) {//兩個(gè)按鈕在同一行 remove(); } if(*0<*) {//第二個(gè)按鈕所在行在第一按鈕所在行的下面 for(n=*0;n<=*-1;n++) {//判斷空按鈕下側(cè)直到位置(*-1,j)有沒(méi)有按鈕 if(grid[n][j]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } if(grid[n][j]==0&&n==*-1) {//如果直到位置(*-1,j)沒(méi)有按鈕 remove(); } } } if(*0>*) {//第二個(gè)按鈕所在行在第一按鈕所在行的上面 for(n=*0;n>=*+1;n--) {//判斷空按鈕上側(cè)直到位置(*+1,j)有沒(méi)有按鈕 if(grid[n][j]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } if(grid[n][j]==0&&n==*+1) {//如果直到位置(*+1,j)沒(méi)有按鈕 remove(); } } } } } //判斷與第一按鈕同列情況 for(i=0;i<8;i++) {//判斷第一個(gè)按鈕同列哪個(gè)按鈕為空 if(grid[i][y0]==0) {//同列有空按鈕 if(*>i) {//如果第二個(gè)按鈕的*坐標(biāo)大于空按鈕的i坐標(biāo)說(shuō)明空按鈕在第二按鈕上邊 for(j=*-1;j>=i;j--) {//判斷第二按鈕上側(cè)直到位置(i,y)有沒(méi)有按鈕 if(grid[j][y]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } else {//如果沒(méi)有按鈕 k=1;//說(shuō)明通過(guò)第一次驗(yàn)證 } } if(k==1) {//第二按鈕上側(cè)直到位置(i,y)沒(méi)有按鈕 rowPassOne(); } } if(*<i) {//空按鈕在第二按鈕下邊 for(j=*+1;j<=i;j++) {//判斷第二按鈕下側(cè)直到位置(i,y)有沒(méi)有按鈕 if(grid[j][y]!=0) { k=0; break; } else { k=1; } } if(k==1) {//第二按鈕下側(cè)直到位置(i,y)沒(méi)有按鈕 rowPassOne(); } } if(*==i) {//第二按鈕與空按鈕同行 rowPassOne(); } } if(k==2) {//通過(guò)第二次驗(yàn)證 if(y0==y) {//兩個(gè)按鈕同列 remove(); } if(y0<y) {//第二按鈕所在行在第一按鈕所在行的下面 for(n=y0;n<=y-1;n++) {//判斷空按鈕右側(cè)直到位置(i,y-1)有沒(méi)有按鈕 if(grid[i][n]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } if(grid[i][n]==0&&n==y-1) {//空按鈕右側(cè)直到位置(i,y-1)沒(méi)有按鈕 remove(); } } } if(y0>y) {//第二按鈕所在行在第一按鈕所在行的上面 for(n=y0;n>=y+1;n--) {//判斷空按鈕左側(cè)直到位置(i,y+1)有沒(méi)有按鈕 if(grid[i][n]!=0) { k=0; break; } if(grid[i][n]==0&&n==y+1) {//空按鈕左側(cè)直到位置(i,y+1)沒(méi)有按鈕 remove(); } } } } } } } /** *第一按鈕的同行中存在空按鈕 *判斷在同一行中空按鈕與第一個(gè)按鈕之間的位置是否有按鈕存在,如果有則k=0,否則k=2 **/ publicvoidlinePassOne() { if(y0>j) {//第一按鈕在同行空按鈕的右邊 for(i=y0-1;i>=j;i--) {//判斷第一按鈕同左側(cè)空按鈕之間有沒(méi)按鈕 if(grid[*0][i]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } else {//如果沒(méi)有按鈕 k=2;//K=2說(shuō)明通過(guò)了第二次驗(yàn)證 } } } if(y0<j) {//第一按鈕在同行空按鈕的左邊 for(i=y0+1;i<=j;i++) {//判斷第一按鈕同右側(cè)空按鈕之間有沒(méi)按鈕 if(grid[*0][i]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } else { k=2; } } }} /** *第一按鈕的同列中存在空按鈕 *判斷在同一列中空按鈕與第一個(gè)按鈕之間的位置是否有按鈕存在,如果有則k=0,否則k=2 **/ publicvoidrowPassOne() { if(*0>i) {//第一按鈕在同列空按鈕的下邊 for(j=*0-1;j>=i;j--) {//判斷第一按鈕同上側(cè)空按鈕之間有沒(méi)按鈕 if(grid[j][y0]!=0) {//如果有按鈕,將k初始化為零,并跳出循環(huán) k=0; break; } else {//如果沒(méi)有按鈕 k=2;//K=2說(shuō)明通過(guò)了第二次驗(yàn)證 } } } if(*0<i) {//第一按鈕在同列空按鈕的上邊 for(j=*0+1;j<=i;j++) {//判斷第一按鈕同下側(cè)空按鈕之間有沒(méi)按鈕 if(grid[j][y0]!=0) { k=0; break; } else { k=2; } } } } //將一樣兩個(gè)按鈕消去,即設(shè)為不可見(jiàn) publicvoidremove() { fristButton.setVisible(false); secondButton.setVisible(false); fraction();//每消去一對(duì)按鈕則加100分 /** *將點(diǎn)擊按鈕信息歸為初始 *將K和被消去的兩個(gè)按鈕的坐標(biāo)初始為零 */ pressInformation=false; k=0; grid[*0][y0]=0; grid[*][y]=0; } //實(shí)現(xiàn)事件監(jiān)聽(tīng) publicvoidactionPerformed(ActionEvente) {// if(e.getSource()==startButton)// {//點(diǎn)擊開(kāi)場(chǎng)按鈕事件//// init();// centerPanel.setVisible(true);// timerDemo();// flag=true;// } if(e.getSource()==newlyButton) {//點(diǎn)擊下一局按鈕事件// t.cancel(); flag=true; intgrid[][]=newint[8][7]; this.grid=grid;//將grid數(shù)組初始化為零 randomBuild();//重新獲取15個(gè)隨機(jī)的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) {//點(diǎn)擊退出按鈕事件 System.e*it(0); } if(e.getSource()==resetButton) {//點(diǎn)擊重列按鈕事件 reload(); } for(intcols=0;cols<6;cols++) { for(introws=0;rows<5;rows++) { if(e.getSource()==diamondsButton[cols][rows]) {//當(dāng)點(diǎn)擊按鈕時(shí),調(diào)用estimateEven方法 estimateEven(cols+1,rows+1,diamondsButton[cols][rows]); } } }} /** *publicvoidtimerDemo() *{ *t.schedule(new
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育心理學(xué)題庫(kù)檢測(cè)試卷A卷附答案
- 2024年度山西省高校教師資格證之高等教育法規(guī)能力提升試卷A卷附答案
- 2024年度年福建省高校教師資格證之高等教育學(xué)練習(xí)題及答案
- 全國(guó)職業(yè)院校技能大賽中職組(母嬰照護(hù)賽項(xiàng))考試題及答案
- 四年級(jí)數(shù)學(xué)(小數(shù)加減運(yùn)算)計(jì)算題專項(xiàng)練習(xí)與答案
- 建筑會(huì)議紀(jì)要
- 內(nèi)蒙古英語(yǔ)高二上學(xué)期期末試卷及解答參考(2024年)
- 高溫?zé)峁軗Q熱器的穩(wěn)定性設(shè)計(jì)和結(jié)構(gòu)參數(shù)優(yōu)化
- 2024房產(chǎn)領(lǐng)域聯(lián)合投資建設(shè)協(xié)議
- 吊車租賃業(yè)務(wù)協(xié)議2024詳細(xì)條款
- 小學(xué)科學(xué)教育科學(xué)三年級(jí)上冊(cè)天氣《認(rèn)識(shí)氣溫計(jì)》教學(xué)設(shè)計(jì)
- 液化氣站氣質(zhì)分析報(bào)告管理制度
- 砍伐工程方案35963
- 《大醫(yī)精誠(chéng)》說(shuō)課(新)
- 牛羊屠宰管理辦法
- 《微觀經(jīng)濟(jì)學(xué)》課程思政教學(xué)案例(一等獎(jiǎng))
- DBJ50T-232-2016 建設(shè)工程監(jiān)理工作規(guī)程
- 國(guó)際人力資源管理課程教學(xué)大綱
- 深信服園區(qū)級(jí)雙活數(shù)據(jù)中心
- T-CSCS 016-2021 鋼結(jié)構(gòu)制造技術(shù)標(biāo)準(zhǔn)
- 回彈強(qiáng)度對(duì)應(yīng)表
評(píng)論
0/150
提交評(píng)論