?龍哥叫我們一個(gè)組做一個(gè)小游戲項(xiàng)目,而我們組要做的是打磚塊,窗體上面的磚塊其實(shí)和連連看一樣,怎么樣顯示出來(lái),怎么樣消掉,都和連連看差不多,所以我就先做一個(gè)連連看試試刀。
??????? ?連連看實(shí)現(xiàn)其實(shí)不難,就是使用JTable和TableModel,再加上監(jiān)聽(tīng)器,就可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的連連看:
??????? 1.和以往相同,先用Swing組建實(shí)現(xiàn)一個(gè)窗體,現(xiàn)在都是小菜一碟了
??????? 2.再寫(xiě)一個(gè)類,繼承MouseAdapter,實(shí)現(xiàn)TableModel接口。
???????????????????1.繼承MouseAdapter,就是為了重寫(xiě)mouseReleased方法,而后實(shí)現(xiàn)點(diǎn)擊兩個(gè)圖片,從而
??????????????????? 消除兩個(gè)圖片。
?????????????????? 2.實(shí)現(xiàn)TableModel,我們要給數(shù)組加上圖片,還有得到每個(gè)圖片的值。
?
?
?
很多東西都寫(xiě)在代碼上面,這里不多說(shuō),我現(xiàn)在做的連連看還只是實(shí)現(xiàn)了一些基本功能,有的功能還沒(méi)實(shí)現(xiàn),其實(shí)只是幾個(gè)方法的實(shí)現(xiàn)問(wèn)題?,F(xiàn)在我主要是糾結(jié)算法。連連看難就難在算法,我寫(xiě)的這點(diǎn)算法,花了我一天一夜,能連起來(lái)的圖片我基本都實(shí)現(xiàn)了,但是有的不能連起來(lái)的圖片也能連起來(lái)并且消掉,我就有點(diǎn)郁悶了,我看了很多次我寫(xiě)的算法,實(shí)在看不出哪里存在問(wèn)題,希望各位高手能指點(diǎn)指點(diǎn)。。。在下感激不盡? = =。。還有,我沒(méi)有讓每個(gè)圖片都出現(xiàn)偶數(shù)個(gè),所以最后一班都不能全部消掉。。。我現(xiàn)在只想先把算法搞定。
?
這是一些截圖
?
?
?
?
算法代碼
//判斷相連的方法 public boolean connected(int r1,int c1,int r2,int c2){ //===============================沒(méi)有拐點(diǎn)==================================// //同行 if(r1==r2){ //在第一行或者最后一行 if(r1==0||r1==11){ return true; } //不在第一行和最后一行 //相鄰 if((r1!=0&&r1!=11)&&(c1==c2+1||c1==c2-1)){ return true; } //不相鄰 if((r1!=0&&r1!=11)&&(c1!=c2+1||c1!=c2-1)){ for(int i = c1+1;i<c2;i++){ if(data[r1][i]==""){ return true; } } //有兩個(gè)拐點(diǎn)的部分方法 for(int a1 = 0;a1<r1;a1++){ for(int i = a1;i<r1;i++){ for(int j = c1+1;j<c2;j++){ if((data[i][c1]=="")&&(data[i][c2]=="")&&(data[a1][j]=="")){ return true; } } } } for(int a2 = r1+1;a2<12;a2++){ for(int i = r1+1;i<a2+1;i++){ for(int j = c1+1;j<c2;j++){ if((data[i][c1]=="")&&(data[i][c2]=="")&&(data[a2][j]=="")){ return true; } } } } } } //同列 if(c1==c2){ //在第一列或者最后一列 if(c1==0||c1==11){ return true; } //不在第一列和最后一列 //相鄰 if((c1!=0||c1!=11)&&(r1==r2+1||r1==r2-1)){ return true; } //不相鄰 if((c1!=0||c1!=11)&&(r1!=r2+1||r1!=r2-1)){ for(int i = r1+1;i<r2;i++){ if(data[i][c1]==""){ return true; } } //有兩個(gè)拐點(diǎn)的部分方法 for(int b1 = 0;b1<c1;b1++){ for(int i = b1;i<c1;i++){ for(int j = r1+1;j<r2;j++){ if((data[r1][i]=="")&&(data[r2][i]=="")&&(data[j][b1]=="")){ return true; } } } } for(int b2 = c1+1;b2<12;b2++){ for(int i = c1+1;i<b2+1;i++){ for(int j = r1+1;j<r2;j++){ if((data[r1][i]=="")&&(data[r2][i]=="")&&(data[j][b2]=="")){ return true; } } } } } } //=============================只有一個(gè)拐點(diǎn)================================// //右上角或左上角為空 if(data[r1][c2]==""){ //列相鄰 if(c1==c2+1||c1==c2-1){ //行相鄰 if(r1==r2+1||r1==r2-1){ return true; } //行不相鄰 if(r1!=r2+1||r1!=r2-1){ for(int i = r1+1;i<r2;i++){ if(data[i][c2]==""){ return true; } } } } //行相鄰 if(r1==r2+1||r1==r2-1){ //列不相鄰 if(c1!=c2+1||c1!=c2-1){ for(int i = c1+1;i<c2;i++){ if(data[r1][i]==""){ return true; } } for(int i = c2+1;i<c1;i++){ if(data[r1][i]==""){ return true; } } } } //行和列都不相鄰 if((r1!=r2+1||r1!=r2-1)&&(c1!=c2+1||c1!=c2-1)){ for(int i = r1+1;i<r2;i++){ for(int j = c1+1;j<c2;j++){ if((data[i][c2]=="")&&(data[r1][j]=="")){ return true; } } } for(int i = r1+1;i<r2;i++){ for(int j = c2+1;j<c1;j++){ if((data[i][c2]=="")&&(data[r1][j]=="")){ return true; } } } } } //左下角或右下角為空 if(data[r2][c1]==""){ //列相鄰 if(c1==c2+1||c1==c2-1){ //行相鄰 if(r1==r2+1||r1==r2-1){ return true; } //行不相鄰 if(r1!=r2+1||r1!=r2-1){ for(int i = r1+1;i<r2;i++){ if(data[i][c1]==""){ return true; } } } } //行相鄰 if(r1==r2+1||r1==r2-1){ //列不相鄰 if(c1!=c2+1||c1!=c2-1){ for(int i = c1+1;i<c2;i++){ if(data[r2][i]==""){ return true; } } for(int i = c2+1;i<c1;i++){ if(data[r2][i]==""){ return true; } } } } //行和列都不相鄰 if((r1!=r2+1||r1!=r2-1)&&(c1!=c2+1||c1!=c2-1)){ for(int i = r1+1;i<r2;i++){ for(int j = c1+1;j<c2;j++){ if((data[i][c1]=="")&&(data[r2][j]=="")){ return true; } } } for(int i = r1+1;i<r2;i++){ for(int j = c2+1;j<c1;j++){ if((data[i][c1]=="")&&(data[r2][j]=="")){ return true; } } } } } //==============================有兩個(gè)拐點(diǎn)=================================// for(int d1 = 0;d1<c1;d1++){ for(int i = d1;i<c1;i++){ for(int j = r1+1;j<r2;j++){ for(int t = d1;t<c2;t++){ if((data[r1][i]=="")&&(data[r2][t]=="")&&(data[j][d1]=="")){ return true; } } } } } for(int d2 = c2+1;d2<12;d2++){ for(int i = c2+1;i<d2+1;i++){ for(int j = r1+1;j<r2;j++){ for(int t = c1+1;t<d2+1;t++){ if((data[r1][t]=="")&&(data[r2][i]=="")&&(data[j][d2]=="")){ return true; } } } } } for(int e1 = 0;e1<r1;e1++){ for(int i = e1;i<r1;i++){ for(int j = c1+1;j<c2;j++){ for(int t = e1;t<r2;t++){ if((data[i][c1]=="")&&(data[t][c2]=="")&&(data[e1][j]=="")){ return true; } } } } } for(int e2 = r2+1;e2<12;e2++){ for(int i = r2+1;i<e2+1;i++){ for(int j = c1+1;j<c2;j++){ for(int t = r1+1;t<e2+1;t++){ if((data[i][c2]=="")&&(data[t][c1]=="")&&(data[e2][j]=="")){ return true; } } } } } for(int f1 = c1+1;f1<c2;f1++){ for(int i = c1+1;i<f1+1;i++){ for(int j = f1;j<c2;j++){ for(int t = r1+1;t<r2;t++){ if((data[r1][i]=="")&&(data[r2][j]=="")&&(data[t][f1]=="")){ return true; } } } } } for(int f2 = r1+1;f2<r2;f2++){ for(int i = r1+1;i<f2+1;i++){ for(int j = f2;j<r2;j++){ for(int t = c1+1;t<c2;t++){ if((data[i][c1]=="")&&(data[j][c2]=="")&&(data[f2][t]=="")){ return true; } } } } } //其他的都返回false return false; }
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
