㈠ javascript連連看計分
這個超級簡單,寫個循環就可以了
㈡ 用C++寫一個連連看程序,最好有注釋,謝謝
也許呵呵
㈢ 我用Java編寫的連連看。運行後全是按鈕。怎樣導入圖片呢。求導入圖片的完整代碼。在線等。
很簡單,你用的Button是JButton?那參考如下代碼。
Iconicon=newImageIcon(newURL("http://www..com/img/logo-yy.gif"));
JButtonjb=newJButton(icon);
㈣ 軟體開發一般學什麼
IT技術領域可以分為18個領域:
人工智慧,雲計算,大數據,區塊鏈,物聯網,設計,Web開發,移動開發, 游戲 開發,服務端開發,資料庫,架構,測試,運維,網路管理,安全技術,認證考試,信息化建設。
軟體開發一般指web開發、移動開發、 游戲 開發、服務端開發、資料庫這幾類,你可以選擇其中一類或幾類學習和研究,現在比較火的屬於移動開發和 游戲 開發了。技術其實都是觸類旁通的,能學號一個,就能學號好外一個。
高端的軟體開發就是人工智慧、雲計算、大數據、區塊鏈、物聯網等,這里就不深入討論。先從基本的軟體開發開始吧。
web開發:
移動開發
游戲 開發
服務端開發
資料庫
作為一名計算機專業的研究生導師,我來回答一下這個問題。
在當前的大數據時代背景下,計算機相關專業受到了廣泛的關注,也是當前的熱門專業。軟體開發專業主要涉及到三方面知識結構,分別是基礎學科、計算機基礎以及軟體開發技術。
基礎學科包括高數、線性代數、概率論、離散數學、物理、數電、模電等課程,其中數學是軟體開發專業的重點課程,一定要引起足夠的重視。數學不僅是計算機專業考研的必考內容,對於軟體開發也具有重要的意義,因為軟體開發問題說到底就是數學問題。如果想在軟體開發的道路上有更好的發展,一定要有一個扎實的數學基礎。
計算機基礎課程包括操作系統體系結構、計算機網路、數據結構、演算法設計、編譯原理、編程語言、資料庫等內容,這些課程都是非常重要的基礎課,尤其是數據結構和演算法設計。對於軟體開發專業的學生來說,這些基礎課將為以後的讀研和工作打下扎實的基礎。一個比較好的學習方法是在本科階段讀一下Linux操作系統的核心源代碼,這樣不僅能夠系統的了解操作系統,也能夠鍛煉自己的編程能力。
軟體開發技術則主要針對於當前流行的技術方向,比如Web開發、大數據開發、移動互聯網開發等內容。不同的學校通常會有具體的細分方向,學生可以根據自身的知識結構和興趣愛好進行選擇。如果學習能力比較強,可以考慮一下大數據開發方向,當前正處在大數據落地應用的初期,所以未來大數據開發崗位會比較多,就業前景也比較值得期待。
如果有互聯網方面的問題,或者考研方面的問題,都可以咨詢我,謝謝!
1、一門編程語言(C、C++、Java、PHP、Python、Html等),
2、熟悉一種操作系統(Windows、Unix、Linux/類Linux、Android、IOS等),
3、簡單的演算法和數據結構。
先確定你學習完軟體開發後想從事的工作,比如 游戲 開發(LOL,吃雞,手游等);前端開發(網頁、微信小 游戲 、Android/IOS APP等);後台伺服器,資料庫(支撐前端運行的技術和數據);嵌入式(驅動、單片機等)。
確定方向後,再選擇相應的編程語言,如 游戲 開發(C++為主);網站,小 游戲 (H5/CSS/js等)、Android(Java為主);IOS(Objective-C、switch);後台伺服器(Java、Python等);資料庫(Mysql、Oracle、SQL Server等);嵌入式(C、匯編等)
如果選擇學習Java,建議來我們學校實地考察。我們作為一個12年的老牌培訓機構,專業只教Java語言,且有專業團隊為不同學習需求的學員打造的不同課程,十幾年未變,是學員們口口相傳,靠譜的Java培訓學校!找一家適合自己的培訓機構主要看他的專業程度,口碑,師資力量還有課程,建議可以多找幾家培訓機構線下實地考察一下~而且現在成都也有分校啦!有意向的小夥伴可以前去一試~
如果你想成為一名java軟體工程師,我給你整些具體的技術,掌握這些技術,你基本可以成為一名高級軟體工程師了。別看回答者說到的什麼人工智慧,物聯網,區塊鏈什麼的,相信我,一般軟體開發根本用不到。我是一名5年經驗的軟體工程師,相信我。
jdbc、servlet、jsp、struts、hibernate、jpa、spring、springmvc、springboot、springcloud、mybatis、mysql、mongodb、maven、gradle、git、nginx、redis、memcache、bbo、zookeeper、tomcat、netty、jetty、kafka、docker、k8s、linux、hadoop、spark、hive、hdfs、hbase、sqoop、flume等。
掌握這些技術,然後再加強自己軟技能的培養,溝通,協作等能力,你就算的上一名優秀的軟體工程師了。
軟體開發需要學習的東西很多,但也不是一天就學完,很多知識可能需要幾個月、幾年甚至十幾年去學習。不過對於一個初學者來說,主要還是以掌握一兩門語言、基本演算法、一兩種資料庫為主,下面簡單介紹一下。
一、語言。推薦Java、csharp、php或者Python。不建議C++,因為現在大多數是web項目,以上幾種語言對於web開發非常合適。
二、演算法。純粹的演算法學習不是很多,很多演算法學習都融合到語言學習中。比如排序演算法、過濾演算法、搜索演算法等等。在高級語言的列表、字典和數組類型,基本上都包含了這些演算法。
三、資料庫。目前中小型web項目的資料庫以MySQL為多,所以建議學習MySQL,也有的公司使用sqlserver,有時間可以學一下,此外,移動端使用sqlite小型資料庫,可以掌握一下。
除此之外,就是要了解一些編程調試的基本方法,也要了解一些實施部署的套路,就基本上可以應付一些開發工作了。
什麼叫軟體開發?就是通過計算機所識別的計算機語言來開發系統,從而解決生活,工作或者是學習中遇到的問題,更加的方便人們的工作和學習。
先學習一門編程語言,目前企業用的最多的就是Java了,很多企業的軟體,系統,網站都是用Java來開發的。
以前學習Java是在「如鵬網」上學習的,有詳細的教程和學習路線,可以作為參考。
1、Java基礎,還是挺不錯的,通過開發超級瑪麗,飛機大戰,吃金幣,連連看,湯姆貓,電影的彈幕動畫等來講解Java的基礎知識點,做出這些項目來還是蠻有成就感的
2、Java高級技術
3、web前端
4、Java web(核心階段)
5、框架
6、企業項目實戰
7、企業專題
有網路的地方就可以學習,根據自己的時間來靈活安排學習進度,每個章節的後面都有相應的練習和面試,需要通過錄音的方式來進行提交,夯實基礎,為面試做准備,有新的課程更新了,也是可以繼續來學習的。
有需要相關Java教程的可在後台私信哦(備註:Java)。
一般大學的軟體開發課程:面向對象程序設計、計算機組成原理、操作系統、數據結構、計算 機網路、軟體工程、編譯原理、分布式系統、軟體項目管理、Oracle資料庫系統等。
但是個人認為學習軟體開發,除了以上那些課程,還需要大量的項目實戰課,實戰的最終目的是全面提高學生的職業素質,最終達到學生滿意就業、企業滿意用人的目的。合理的實戰教育本應該是大學教育的一個重要組成部分,但是目前卻成為了 社會 培訓機構、企業內訓的責任。對於學生來說,通過實站課程,一方面可以增加實踐經驗;另一方面,可以降低就業的成本和風險;增加就業的機會;實戰教學是有一定理論基礎的學生,在擁有多年實戰經驗老師的指導下,在真實條件下,最終達到企業的用人要求,並獲得國家認可的職業資格證書的過程。所以實戰課程在大學也應該是必不可少的。
當初再幫我弟弟找大學的時候,我看到一所學校的課程還是挺靠譜的,也就是現在他們的學校,以下是我在他們官網上面截下來的課程截圖。
他們除了基礎課以外,還有一些實戰課程以及職業規劃課,以前不覺得項目實戰課有多重要,只是後來我弟弟在傳智專修學院學習的時候,他們老師經常帶他們做實戰項目,完全模擬企業實際項目開發的場景,從項目經理到搭建項目架構到最後組合項目,每個人的開發經驗都相當成熟,如果時間允許的話,他們甚至可以具備單獨開發項目的能力,相對於當初計算機專業畢業的我來說,我當初畢業的時候寫個網頁都困難,更何況寫項目,還得經過企業長時間的培養和鍛煉才具備他們現在具備的能力。他們現在不管對於自身還是企業來說都是非常有利的,對於自身來說節省了中間的過程,對於企業來說節省了培養一個新人的成本。所以個人感覺實戰課程還是挺重要的。
所以當你在選擇學校的時候,可以多研究一下他們的課程設置,這是經驗所得,希望可以幫助到你。
如果只是為了開發某一個小軟體,達到某一個功能的話,還不如找人家給你做了,花點錢就能解決了,不需要花費大量時間學習。如果是為了從事軟體開發的話,建議學習python 網上教程多,簡單易入門。
軟體開發是一個廣義的概念,其中包含了很多技術方向,如前端和後端,而前端又可以細分為UE、UI、前端程序員,後端也可以細分為java、php、C#、GO、Ruby、C、C++、Python等。而目前人數最多且比較容易就業的就應該是java後端開發人員了,而我也是一名java後端開發人員,所以具體介紹下如果想要做一名java開發,需要學哪些技術。
滿足以上幾點,你已經是一名合格的初級開發人員了,其他的包括技術和業務就需要在工作中慢慢的積累了。
以上為個人觀點,歡迎在評論中發表自己不同的觀點,喜歡的加個關注,謝謝。
現在小學已經開始教授軟體開發的相關課程了,所以掌握軟體開發在未來 社會 發展中占據著重要的地位,如果之前沒有軟體開發的相關學習自學起來還是有些麻煩的,不同的程序語言學習路線是不同的,單純從掌握語言的角度看一般可以這么開始學習:
1)找一本好的學習教材。建議最好是紙質的,雖然現在網路上各種資料比較容易找到,但是書上寫的一般還是比較系統和基礎的。從最初的開發環境配置到一些簡單的項目開發都會有關鍵代碼提供,這樣學習起來會比較直接。現在視頻教育網站也很多,也可以看視頻學習。只不過在一段視頻和多個視頻之間切換時沒有翻書那麼方便。
2)准備一台電腦。軟體開發最關鍵的是實際動手的能力,它比機械,建築等行業好的太多,一個人在家坐著就可以實際動手操作積累項目經驗。按照教材從最基礎的開發環境配置到基礎語言熟悉再到簡單項目實踐,教材中的代碼都自己敲過一遍並且正確運行過,這樣就可以算是基礎軟體開發了。
3)找技術論壇,公眾號。在看書的過程中總會遇到一時理解不了的問題,這個時候就要去專門的論壇找答案了,這個也是培養自己解決問題的能力,是軟體開發人員的基礎能力,通常高級開發人員並不是什麼都懂,只不過他們知道解決問題的技巧能比別人更快的解決問題。
4)多於同道中人溝通,他們也會介紹自己的學習方法和學習經歷,這樣可以減少自己走彎路的代價,同時也鍛煉了自己的表達能力,是掌握知識的有效捷徑。
當一門開發語言學習的差不多了可以再學習資料庫相關知識,操作系統相關知識,軟體開發不是單獨的程序語言學習,還包括了很多其它計算機知識的學習。希望有自學軟體開發的小夥伴都能有恆心和毅力堅持下來。
㈤ 想用C++寫一個連連看的小游戲,求思路
一下是我的思路 我也是菜鳥 願交流
1.用一個線程來專門負責刷幀 (就是定時重繪界面)
2.用一個數組來存儲游戲的數據
3.從數組來繪制畫面
4.從用戶輸入 改變 數組
類的話應該有
GameView ---用於負責怎個游戲的繪制 裡面新建線程刷幀
GameData ---用於存儲游戲數據 和 改變數據
GameContrl ---由於接受用戶輸入
Game ---控制怎個游戲
㈥ 求一連連看演算法 C 語言
第一個:
bool isClear(int row1,int col1,int row2,int col2)
{
int row,col;
for(row=1;row<=ROW;row++)
if( check_point(row,col1) && check_point(row,col2) )
if( check_col(col1,row1,row) && check_row(row,col1,col2)
&& check_col(col2,row2,row) )
return true;
for( col=1;col<COL;col++)
if( check_point(row1,col) && check_point(row2,col) )
if( check_row(row1,col1,col) && check_col(col,row1,row2)
&& check_row(row2,col2,col) )
return true;
return false;
}
第二個:回溯演算法
bool ClearAll()
{
int row1,col1,row2,col2;
for( row1=1;row1<ROW;row1++)
for( col1=1;col1<COL;col1++)
if( A[row1][co1]!=0 )
for( row2=row1;row2<ROW;row2++)
for( col2=1;col2<COL;col2++)
if(row2>row1 || col2>col1)
if( A[row2][col2]==A[row1][col1]
&& isClear(row1,col1,row2,col2) )
{
SaveWay();
Delete(row1,col1,row2,col2);
if( ClearAll() )
return true;
else
Load();
}
return false;
}
第三個:改寫下Delete/Load函數就可以了,我就不貼出來了
=================================================
含有很多簡單的函數沒寫,不懂再問我吧
㈦ 用java寫個連連看app,想做出消除時的特效,比如閃電連線啊之類的,要怎麼繪制
我給你兩個靈感,建一個類是專門對應消除時的對象,在兩個圖的坐標之間生成一條線,具體的線轉彎我也不會,還有一個靈感,就是消除的時候用另一個圖片代替消除的圖片,然後再消失,可用炸彈圖片代替,這個簡單點,如果你覺得行的話給分謝謝
㈧ gamemaker怎麼做連連看,用按鈕做不用代碼,現在已經擺好了,就是不知道怎麼設定把兩個連起來在
不寫代碼幾乎很難實現,例如你的連連看有三種類型,正方形、圓形、三角形,你始終得用一個變數來記錄你滑鼠第一次點擊的是什麼圖形,然後第二次點擊時再判斷2次是不是點擊的同一個圖形,然後才能判斷是不是能連接消除;
寫代碼的話也很簡單,最好定義一個全局的變數(例如A):表示當前點擊的圖形類型(名稱隨意取);
然後在每種圖形里加上滑鼠點擊事件,在裡面判斷點擊的圖形是否等於變數A存好的值,如果等於就可以判斷連接消除了,如果不等就把新的圖形存入A裡面。
㈨ 誰能幫忙寫一個c語言連連看游戲,要4x4的,功能最簡單的就可以!但是要實現連連看應該有的功能
剛寫的,新鮮出爐:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#defineMAPSIZE4
#defineMAXLINESIZE60
//typedefenum{false,true}bool;
typedefstruct{
intx,y;
}Point;
constcharpictureTable[]={"ABCEDFGHI"};
booljudgeLine(char**MP,Point*start,Point*end){
inti;
if(start->x==end->x){
if(start->y>end->y){
for(i=start->y-1;i>end->y;i--)
if(MP[start->x][i]!=0)
returnfalse;
returntrue;
}
else{
for(i=start->y+1;i<end->y;i++)
if(MP[start->x][i]!=0)
returnfalse;
returntrue;
}
}
elseif(start->y==end->y){
if(start->x>end->x){
for(i=start->x-1;i>end->x;i--)
if(MP[i][start->y]!=0)
returnfalse;
returntrue;
}
else{
for(i=start->x+1;i<end->x;i++)
if(MP[i][start->y]!=0)
returnfalse;
returntrue;
}
}
returnfalse;
}
booljudgeTwoLines(char**MP,Point*start,Point*end,Point*mid){
Pointp1,p2;
mid->x=-1;
mid->y=-1;
if(judgeLine(MP,start,end)==true)returntrue;
p1.x=start->x;
p1.y=end->y;
p2.x=end->x;
p2.y=start->y;
mid->x=p1.x;
mid->y=p1.y;
if(MP[p1.x][p1.y]==0&&judgeLine(MP,start,&p1)&&judgeLine(MP,end,&p1))returntrue;
mid->x=p2.x;
mid->y=p2.y;
if(MP[p2.x][p2.y]==0&&judgeLine(MP,start,&p2)&&judgeLine(MP,end,&p2))returntrue;
returnfalse;
}
booljudgeTreeLines(char**MP,Point*start,Point*end,Point*mid1,Point*mid2,intn){
inti;
mid1->x=-1;mid1->y=-1;
mid2->x=-1;mid2->y=-1;
if(judgeTwoLines(MP,start,end,mid1))returntrue;
for(i=start->x-1;i>=0;i--){
if(MP[i][start->y]!=0)break;
mid1->x=i;
mid1->y=start->y;
if(judgeTwoLines(MP,mid1,end,mid2))returntrue;
}
for(i=start->x+1;i<=n+1;i++){
if(MP[i][start->y]!=0)break;
mid1->x=i;
mid1->y=start->y;
if(judgeTwoLines(MP,mid1,end,mid2))returntrue;
}
for(i=start->y-1;i>=0;i--){
if(MP[start->x][i]!=0)break;
mid1->x=start->x;
mid1->y=i;
if(judgeTwoLines(MP,mid1,end,mid2))returntrue;
}
for(i=start->y+1;i<=n+1;i++){
if(MP[start->x][i]!=0)break;
mid1->x=start->x;
mid1->y=i;
if(judgeTwoLines(MP,mid1,end,mid2))returntrue;
}
returnfalse;
}
voidptMap(char**MP,intn){
intspace=(MAXLINESIZE-n*2)/2;
inti,j;
for(i=0;i<(MAXLINESIZE-10)/2;i++)
printf("");
printf("《連連看》 ");
for(i=2;i<space;i++)printf("");
printf("x ");
for(i=1;i<=n;i++){
for(j=2;j<space;j++)
printf("");
printf("%d",i);
for(j=1;j<=n;j++)
printf("%c",pictureTable[MP[i][j]]);
printf(" ");
}
for(i=0;i<space;i++)
printf("*");
for(i=0;i<n;i++)
printf("%d*",i+1);
for(i=1;i<space;i++)
printf("*");
printf(" ");
}
char**createMap(intn){
char**ret;
inti;
ret=(char**)malloc(sizeof(char*)*(n+2));
for(i=0;i<n+2;i++)
ret[i]=(char*)malloc(sizeof(char)*(n+2));
returnret;
}
voidranMap(char**MP,intn){
int*all=(int*)malloc(sizeof(int)*n*n);
inti,tmpi,tmp;
for(i=0;i<n*n;i++)
all[i]=i/4+1;
for(i=0;i<n*n;i++){
tmpi=rand()%(n*n-i);
tmp=all[tmpi];
all[tmpi]=all[n*n-i-1];
all[n*n-i-1]=tmp;
}
for(i=0;i<n+2;i++){
MP[0][i]=0;
MP[n+1][i]=0;
MP[i][0]=0;
MP[i][n+1]=0;
}
tmpi=0;
for(i=1;i<=n;i++)
for(tmp=1;tmp<=n;tmp++)
MP[i][tmp]=all[tmpi++];
}
voiddeletePoints(char**MP,Point*p1,Point*p2){
MP[p1->x][p1->y]=0;
MP[p2->x][p2->y]=0;
}
intplayTurns(intn){
intrest=n*n;
char**mp=createMap(n),c;
ranMap(mp,n);
Pointmid1,mid2,pt1,pt2;
while(1){
ptMap(mp,n);
printf("請輸入消去的坐標1(x1y1): ");
scanf("%d%d",&pt1.x,&pt1.y);
printf("請輸入消去的坐標2(x2y2): ");
scanf("%d%d",&pt2.x,&pt2.y);
if((pt1.x==pt2.x&&pt1.y==pt2.y)||(pt1.x<1||pt1.x>n||pt2.x<1||pt2.x>n||pt1.y<1||pt1.y>n||pt2.y<1||pt2.y>n)){
printf("無法消除這兩圖案,請再次檢查。");
}
elseif(mp[pt1.x][pt1.y]!=0&&mp[pt1.x][pt1.y]==mp[pt2.x][pt2.y]&&judgeTreeLines(mp,&pt1,&pt2,&mid1,&mid2,n)){
if(mid1.x==-1){
printf("Direct ");
}
elseif(mid2.x==-1){
printf("TwoLines:(%d,%d) ",mid1.x,mid1.y);
}
else{
printf("TreeLines:(%d,%d)(%d,%d) ",mid1.x,mid1.y,mid2.x,mid2.y);
}
deletePoints(mp,&pt1,&pt2);
printf("消去成功! ");
rest-=2;
if(rest==0){
printf("恭喜!你已消去所有圖案! ");
break;
}
}
else{
printf("無法消除這兩圖案,請再次檢查。");
}
printf("繼續游戲(N/n不繼續)?");
scanf("%c",&c);
if(c=='N'||c=='n')break;
}
printf("是否重新開局(Y/y繼續)?");
scanf("%c",&c);
if(c=='y'||c=='Y')return1;
return0;
}
intmain(){
srand(time(0));
while(playTurns(4));
return0;
}
㈩ 用JAVA編寫小游戲「連連看」
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class lianliankan implements ActionListener { JFrame mainFrame; //主面板 Container thisContainer; JPanel centerPanel,southPanel,northPanel; //子面板 JButton diamondsButton[][] = new JButton[6][5];//游戲按鈕數組 JButton exitButton,resetButton,newlyButton; //退出,重列,重新開始按鈕 JLabel fractionLable=new JLabel("0"); //分數標簽 JButton firstButton,secondButton; //分別記錄兩次被選中的按鈕 int grid[][] = new int[8][7];//儲存游戲按鈕位置 static boolean pressInformation=false; //判斷是否有按鈕被選中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戲按鈕的位置坐標 int i,j,k,n;//消除方法控制 public void init(){ mainFrame=new JFrame("JKJ連連看"); thisContainer = mainFrame.getContentPane(); thisContainer.setLayout(new BorderLayout()); centerPanel=new JPanel(); southPanel=new JPanel(); northPanel=new JPanel(); thisContainer.add(centerPanel,"Center"); thisContainer.add(southPanel,"South"); thisContainer.add(northPanel,"North"); centerPanel.setLayout(new GridLayout(6,5)); for(int cols = 0;cols < 6;cols++){ for(int rows = 0;rows < 5;rows++ ){ diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1])); diamondsButton[cols][rows].addActionListener(this); centerPanel.add(diamondsButton[cols][rows]); } } exitButton=new JButton("退出"); exitButton.addActionListener(this); resetButton=new JButton("重列"); resetButton.addActionListener(this); newlyButton=new JButton("再來一局"); newlyButton.addActionListener(this); southPanel.add(exitButton); southPanel.add(resetButton); southPanel.add(newlyButton); fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText()))); northPanel.add(fractionLable); mainFrame.setBounds(280,100,500,450); mainFrame.setVisible(true); } public void randomBuild() { int randoms,cols,rows; for(int twins=1;twins<=15;twins++) { randoms=(int)(Math.random()*25+1); for(int alike=1;alike<=2;alike++) { cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); while(grid[cols][rows]!=0) { cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); } this.grid[cols][rows]=randoms; } } } public void fraction(){ fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100)); } public void reload() { int save[] = new int[30]; int n=0,cols,rows; int grid[][]= new int[8][7]; for(int i=0;i<=6;i++) { for(int j=0;j<=5;j++) { if(this.grid[i][j]!=0) { save[n]=this.grid[i][j]; n++; } } } n=n-1; this.grid=grid; while(n>=0) { cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); while(grid[cols][rows]!=0) { 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(int i = 0;i < 6;i++){ for(int j = 0;j < 5;j++ ){ if(grid[i+1][j+1]==0) diamondsButton[i][j].setVisible(false); } } } public void estimateEven(int placeX,int placeY,JButton bz) { if(pressInformation==false) { x=placeX; y=placeY; secondMsg=grid[x][y]; secondButton=bz; pressInformation=true; } else { x0=x; y0=y; fristMsg=secondMsg; firstButton=secondButton; x=placeX; y=placeY; secondMsg=grid[x][y]; secondButton=bz; if(fristMsg==secondMsg && secondButton!=firstButton){ xiao(); } } } public void xiao() { //相同的情況下能不能消去。仔細分析,不一條條注釋 if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y))){ //判斷是否相鄰 remove(); } else{ for (j=0;j<7;j++ ) { if (grid[x0][j]==0){ //判斷第一個按鈕同行哪個按鈕為空 if (y>j) { //如果第二個按鈕的Y坐標大於空按鈕的Y坐標說明第一按鈕在第二按鈕左邊 for (i=y-1;i>=j;i-- ){ //判斷第二按鈕左側直到第一按鈕中間有沒有按鈕 if (grid[x][i]!=0) { k=0; break; } else{ k=1; } //K=1說明通過了第一次驗證 } if (k==1) { linePassOne(); } } if (y<j){ //如果第二個按鈕的Y坐標小於空按鈕的Y坐標說明第一按鈕在第二按鈕右邊 for (i=y+1;i<=j ;i++ ){ //判斷第二按鈕左側直到第一按鈕中間有沒有按鈕 if (grid[x][i]!=0){ k=0; break; } else { k=1; } } if (k==1){ linePassOne(); } } if (y==j ) { linePassOne(); } } if (k==2) { if (x0==x) { remove(); } if (x0<x) { for (n=x0;n<=x-1;n++ ) { if (grid[n][j]!=0) { k=0; break; } if(grid[n][j]==0 && n==x-1) { remove(); } } } if (x0>x) { for (n=x0;n>=x+1 ;n-- ) { if (grid[n][j]!=0) { k=0; break; } if(grid[n][j]==0 && n==x+1) { remove(); } } } } } for (i=0;i<8;i++ ) { //列 if (grid[i][y0]==0) { if (x>i) { for (j=x-1;j>=i ;j-- ) { if (grid[j][y]!=0) { k=0; break; } else { k=1; } } if (k==1) { rowPassOne(); } } if (x<i) { for (j=x+1;j<=i;j++ ) { if (grid[j][y]!=0) { k=0; break; } else { k=1; } } if (k==1) { rowPassOne(); } } if (x==i) { rowPassOne(); } } if (k==2){ if (y0==y) { remove(); } if (y0<y) { for (n=y0;n<=y-1 ;n++ ) { if (grid[i][n]!=0) { k=0; break; } if(grid[i][n]==0 && n==y-1) { remove(); } } } if (y0>y) { for (n=y0;n>=y+1 ;n--) { if (grid[i][n]!=0) { k=0; break; } if(grid[i][n]==0 && n==y+1) { remove(); } } } } } } } public void linePassOne(){ if (y0>j){ //第一按鈕同行空按鈕在左邊 for (i=y0-1;i>=j ;i-- ){ //判斷第一按鈕同左側空按鈕之間有沒按鈕 if (grid[x0][i]!=0) { k=0; break; } else { k=2; } //K=2說明通過了第二次驗證 } } if (y0<j){ //第一按鈕同行空按鈕在與第二按鈕之間 for (i=y0+1;i<=j ;i++){ if (grid[x0][i]!=0) { k=0; break; } else{ k=2; } } } } public void rowPassOne(){ if (x0>i) { for (j=x0-1;j>=i ;j-- ) { if (grid[j][y0]!=0) { k=0; break; } else { k=2; } } } if (x0<i) { for (j=x0+1;j<=i ;j++ ) { if (grid[j][y0]!=0) { k=0; break; } else { k=2; } } } } public void remove(){ firstButton.setVisible(false); secondButton.setVisible(false); fraction(); pressInformation=false; k=0; grid[x0][y0]=0; grid[x][y]=0; } public void actionPerformed(ActionEvent e) { if(e.getSource()==newlyButton){ int grid[][] = new int[8][7]; this.grid = grid; randomBuild(); mainFrame.setVisible(false); pressInformation=false; init(); } if(e.getSource()==exitButton) System.exit(0); if(e.getSource()==resetButton) reload(); for(int cols = 0;cols < 6;cols++){ for(int rows = 0;rows < 5;rows++ ){ if(e.getSource()==diamondsButton[cols][rows]) estimateEven(cols+1,rows+1,diamondsButton[cols][rows]); } } } public static void main(String[] args) { lianliankan llk = new lianliankan(); llk.randomBuild(); llk.init(); } }