當前位置:九游会j9娱乐平台-九游ag登录中心网址 » 操作系統 » 連連看演算法

連連看演算法-九游会j9娱乐平台

發布時間: 2022-01-08 03:57:33

a. 連連看演算法

第一個:
bool isclear(int row1,int col1,int row2,int col2)
{
int row,col;
for(row=1;row

b. 我要一個用c語言做連連看(有圖片),怎樣生成地圖,怎樣實現演算法。

太麻煩了,要調用windows api 。估計一天都不一定能搞定。
用mfc .net 估計都沒人幫你做。
生成地圖你可以將 每種圖片的數量保存好 比如 蘋果用 1表示 西瓜用2 表示 ,可以弄一個鏈表,方便刪除, 生成地圖時隨機一個數,到鏈表裡取出,然後在從連表裡刪除。

判斷的話 你可以將 地圖在加大一格(不顯示),然後用類似尋路演算法來做。
我沒實踐過,你可以試試。

c. java連連看使用廣度優先演算法實現,求具體解釋廣度優先演算法和代碼

void bfs(treenode t){
queue q = new linkedlist();
q.enqueue(t);
while(!q.isempty && q.peek().element != null){
treenode temp = q.dequeue();
system.out.println(temp.element);
q.enqueue(temp.leftchild);
q.enqueue(temp.rightchild);
}
}
class treenode {
anytype element;
treenode rightchild;
treenode leftchild;
}

d. 給個連連看演算法或源碼,c#,或jav的都可以

/*
* 連連看游戲c語言源代碼
*/#include
#include
#include
#include
#include #define true 1
#define false 0/* ---------------------全局變數------------------------------------ */
int bkgndcolor=black;
int bordercolor=lightgray;
int linecolor=lightblue;/* 消除一對方塊時時候的連線顏色 */
/* pb - progressbar */
int pbcolor=lightgreen;
int pby=4;
int pbheight=4;
int pbvalue; /* 進度條百分比,初始值為100.*/
long starttime; /* 開始時間的秒數,只統計分鍾,秒 */
long totaltime; /* 游戲總共的最大秒數!,*//* boarddatas: a small-size board */
/* board[x][y][0] - 0:empty, 1:filled */
/* board[x][y][1] - cell's key; */
unsigned char board[10][10][2];
int cellsize=30;
int boardx=20;
int boardy=60;
int boardwidth=10;
int boardheight=10;
int cellcolor=white;
int selcolor=blue; /* selcell's border rect color */
int curcolor=red; /* curcell's border rect color */
int eracolor=cyan; /* 用於擦除cell的顏色!*/
int pairscount; /* how much pairs we have put on board *//* 用於存儲邏輯坐標(索引) */
typedef struct _tagcell
{
char x;
char y;
} cell;cell selcell,curcell;/*緩存前一個被選中的位置以及當前所處位置!*//*scan codes define*/
enum keycodes
{
k_esc =0x011b,
k_up =0x4800, /* upward arrow */
k_left =0x4b00,
k_down =0x5000,
k_right =0x4d00,
k_space =0x3920,
k_p =0x1970,
k_return =0x1c0d, /* enter */
}; /* ---------------------函數列表------------------------------------ */
void initgame(char *bgipath);
void playgame();
void quitgame();
void initprogressbar();
void updateprogressbar(int percent);
void drawcell(int key,int x,int y,int color);
void erasecell(int x,int y);
void drawborderrect(cell *c,int color);
void drawgameover(char* info);
int getkeycode();
int findpath(cell *c1,cell *c2);
/*繪制消除方塊時候的連接路徑!,用指定顏色!*/
void drawpath(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int color);/* ----------------------函數實現----------------------------------- *//* ----------------------[ 核心演算法 ]---------------------------------
* 先進行水平方向判斷,找出兩點所在的水平直線活動范圍,
* 算出這兩條線段在垂直方向的共同區域!!!,
* 遍歷該區域判斷能否在兩線段間架起公垂線,能則兩點連接上;
* 接著進行垂直方向判斷,類同。無論兩點在不在一條直線上,
* 都能使用該演算法,因為兩點同線只是兩點作為矩形對角點的特例而已。
*//* 找到兩個cell之間的路徑,成功返回true */
int findpath(cell *c1,cell *c2)
{
int i,j,path,min1,max1,min2,max2,left,right,top,bottom;
/*---------------(0)判斷是否點中相同塊! ------------*/
if(board[c1->x][c1->y][1] != board[c2->x][c2->y][1])
return false;
/*---------------(1)查找水平方向公共區域!-----------*/
min1=max1=c1->x;
min2=max2=c2->x;
while(min1-1>=0 && board[min1-1][c1->y][0]==0) min1--;
while(min2-1>=0 && board[min2-1][c2->y][0]==0) min2--;
left=max(min1,min2); /* 左邊界 */
while(max1 1y][0]==0) max1 ;
while(max2 1y][0]==0) max2 ;
right=min(max1,max2); /* 右邊界 */ /* 檢查兩條水平線之間是否有公垂線連通!*/
/* 可以在邊緣連通 */
if(left==0)
{
/* 左邊緣連通 */
drawpath(c1->x,c1->y, -1,c1->y, -1,c2->y, c2->x,c2->y, linecolor);
delay(6000);
drawpath(c1->x,c1->y, -1,c1->y, -1,c2->y, c2->x,c2->y, bkgndcolor);/*插除線條!*/
return true;
}
if(right==(boardwidth-1))
{
drawpath(c1->x,c1->y, boardwidth,c1->y, boardwidth,c2->y, c2->x,c2->y, linecolor);
delay(6000);
drawpath(c1->x,c1->y, boardwidth,c1->y, boardwidth,c2->y, c2->x,c2->y, bkgndcolor);/*插除線條!*/
return true;
} for(i=left;i<=right;i )
{
path=0;/*統計垂直的公垂線長度!*/
for(j=min(c1->y,c2->y) 1;jy,c2->y);j )
{
path =board[i][j][0];
if(path>0) break;
}
if(path==0)
{
drawpath(c1->x,c1->y, i,c1->y, i,c2->y, c2->x,c2->y, linecolor);
delay(6000);
drawpath(c1->x,c1->y, i,c1->y, i,c2->y, c2->x,c2->y, bkgndcolor);/*插除線條!*/
return true;
}
} /*---------------(2)查找垂直方向公共區域!-----------*/
min1=max1=c1->y;
min2=max2=c2->y;
while(min1-1>=0 && board[c1->x][min1-1][0]==0) min1--;
while(min2-1>=0 && board[c2->x][min2-1][0]==0) min2--;
top=max(min1,min2);
while(max1 1x][max1 1][0]==0) max1 ;
while(max2 1x][max2 1][0]==0) max2 ;
bottom=min(max1,max2); /* 檢查兩條垂直線之間是否有公垂線連通!*/
/* 可以在邊緣連通 */
if(top==0)
{
/* 同在頂端消除 */
drawpath(c1->x,c1->y, c1->x,-1, c2->x,-1, c2->x,c2->y, linecolor);
delay(6000);
drawpath(c1->x,c1->y, c1->x,-1, c2->x,-1, c2->x,c2->y, bkgndcolor);/*插除線條!*/
return true;
}
if(bottom==(boardheight-1))
{
drawpath(c1->x,c1->y, c1->x,boardheight, c2->x,boardheight, c2->x,c2->y, linecolor);
delay(6000);
drawpath(c1->x,c1->y, c1->x,boardheight, c2->x,boardheight, c2->x,c2->y, bkgndcolor);/*插除線條!*/
return true;
} for(j=top;j<=bottom;j )
{
path=0;/*統計水平的公垂線長度!*/
for(i=min(c1->x,c2->x) 1; ix,c2->x); i )
{
path =board[i][j][0];
if(path>0) break;
}
if(path==0)
{
/* 水平公垂線 */
drawpath(c1->x,c1->y, c1->x,j, c2->x,j, c2->x,c2->y, linecolor);
delay(6000);
drawpath(c1->x,c1->y, c1->x,j, c2->x,j, c2->x,c2->y, bkgndcolor);/*插除線條!*/
return true;
}
} /* 到達這里說明沒有任何通路 */
return false;
}
/*get key code */
int getkeycode()
{
int key=0;
if(bioskey(1))
{
key=bioskey(0);
}
return key;
}/*繪制消除方塊時候的連接路徑!,用指定顏色!,坐標是cell邏輯坐標!*/
void drawpath(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int color)
{
setcolor(color);
moveto(boardx cellsize/2 cellsize*x1,boardy cellsize/2 cellsize*y1);
lineto(boardx cellsize/2 cellsize*x2,boardy cellsize/2 cellsize*y2);
lineto(boardx cellsize/2 cellsize*x3,boardy cellsize/2 cellsize*y3);
lineto(boardx cellsize/2 cellsize*x4,boardy cellsize/2 cellsize*y4);
}
/* congratulations info,the user has success finish the game ! */
void drawgameover(char* info)
{
/*計算棋盤的中心點*/
int cx=boardx cellsize*boardwidth/2;
int cy=boardy cellsize*boardheight/2;
struct textsettingstype textinfos;
/*獲取此前的文字信息*/
gettextsettings(&textinfos);
setcolor(darkgray);
setfillstyle(solid_fill,blue);
/* 文字居中 */
rectangle(cx-102,cy-22,cx 102,cy 22);
floodfill(cx,cy,darkgray);
rectangle(cx-100,cy-20,cx 100,cy 20);
settextjustify(center_text,center_text);
setcolor(lightblue);
outtextxy(cx,cy,info);
/*restore orignal text settings */
settextjustify(textinfos.horiz, textinfos.vert);
}/* draw a focus rect on the cell with the color */
/* 用制定顏色繪制一個選中的外邊框 */
void drawborderrect(cell *c,int color)
{
setcolor(color);
rectangle(boardx (c->x)*cellsize 1, boardy (c->y)*cellsize 1, boardx (c->x 1)*cellsize-2, boardy (c->y 1)*cellsize-2);
rectangle(boardx (c->x)*cellsize, boardy (c->y)*cellsize, boardx (c->x 1)*cellsize-1, boardy (c->y 1)*cellsize-1);
}/* 在x,y處用指定顏色繪制鍵為key的 cell,key在2,3,4,5,6,7,8,9,10,11之間隨機 */
void drawcell(int key,int x,int y,int color)
{
setcolor(color);
rectangle(boardx x*cellsize 2, boardy y*cellsize 2, boardx (x 1)*cellsize-3, boardy (y 1)*cellsize-3);
setfillstyle(key, color);
floodfill(boardx x*cellsize 3, boardy y*cellsize 3,color);
}/* 擦除cell */
void erasecell(int x,int y)
{
setcolor(eracolor);
rectangle(boardx x*cellsize 2, boardy y*cellsize 2, boardx (x 1)*cellsize-3, boardy (y 1)*cellsize-3);
setfillstyle(solid_fill, bkgndcolor);
floodfill(boardx x*cellsize 3, boardy y*cellsize 3,eracolor);
setcolor(bkgndcolor);
rectangle(boardx x*cellsize 2, boardy y*cellsize 2, boardx (x 1)*cellsize-3, boardy (y 1)*cellsize-3);
}
/* 初始化進度條 */
void initprogressbar()
{
int width=cellsize*boardwidth;
/* progress bar border rect */
setcolor(bordercolor);
rectangle(boardx-2,pby-2,boardx width 2,pby pbheight 2); /* draw a value = 100% progress bar */
setcolor(pbcolor);
rectangle(boardx,pby,boardx width,pby pbheight);
setfillstyle(solid_fill,pbcolor);
floodfill(boardx 1,pby 1,pbcolor);
}

e. 連連看的游戲,用的是什麼原理演算法,求指教一二

連連看核心演算法如下:

#include
using namespace std;

int board[102][102];
int nrowcount, ncolcount;

bool ishorizontallinevalid(int c1, int c2, int r)
{
if(c1>c2) // 交換 c1, c2
{
c1 ^= c2 ^= c1 ^= c2;
}
for(int i=c1 1; i<=c2-1; i )
{
if(board[r][i]!=0)
return false;
}
return true;
}

bool isverticallinevalid(int r1, int r2, int c)
{
if(r1>r2) // 交換 r1, r2
{
r1 ^= r2 ^= r1 ^= r2;
}
for(int i=r1 1; i<=r2-1; i )
{
if(board[i][c]!=0)
return false;
}
return true;
}

bool check(int r1, int c1, int r2, int c2)
{
// 如果該位置沒有棋子或者兩棋子不一致,則返回假
if(board[r1][c1]==0 || board[r2][c2]==0 || board[r1][c1]!=board[r2][c2])
return false;

// 兩條水平線和一條垂直線
for(int i=0; i<=ncolcount 1; i )
{
if( (i!=c1 && board[r1][i]!=0) || (i!=c2 && board[r2][i]!=0) )
continue;
if( ishorizontallinevalid(i, c1, r1) &&
isverticallinevalid(r1, r2, i) &&
ishorizontallinevalid(i, c2, r2))
{
board[r1][c1] = board[r2][c2] = 0;
return true;
}
}
// 兩條垂直線和一條水平線
for(int i=0; i<=nrowcount 1; i )
{
if( (i!=r1 && board[i][c1]!=0) || (i!=r2 && board[i][c2]!=0) )
continue;
if( isverticallinevalid(i, r1, c1) &&
ishorizontallinevalid(c1, c2, i) &&
isverticallinevalid(i, r2, c2))
{
board[r1][c1] = board[r2][c2] = 0;
return true;
}
}

return false;
}

int main(int argc, char** argv)
{
int nround, nsuccess;
int x1, y1, x2, y2;

// 輸入棋盤數據
cin >> nrowcount >> ncolcount;
for(int i = 1; i <= nrowcount; i)
for(int j = 1; j <= ncolcount; j)
cin >> board[i][j];

cin >> nround;

for(int i = 0; i < nround; i)
{
cin >> x1 >> y1 >> x2 >> y2;
if( check(x1, y1, x2, y2) )
cout << "yes\n";
else
cout << "no\n";
}

system("pause");
return 0;
}

測試數據:
3 4
1 1 2 2
3 3 4 4
2 2 1 1
6
1 1 1 2
1 3 1 4
2 1 2 2
2 3 2 4
3 1 3 2
3 3 3 4

c1 ^= c2 ^= c1 ^= c2;語句中對於a^=b就相當於a=a^b,即代表a與b取位異或運算之後再把值賦給a的。樓主如果覺得還行的話請加點分的哦。

f. 求連連看源代碼

連連看的代碼(基本演算法)加了部分注釋
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements actionlistener
{
static string s="no"; //用來紀錄點擊按鈕的信息
int x0=0,y0=0,x=0,y=0,n1=0,n2=0; //用來紀錄按鈕的位置信息
frame f,f1;
button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10; //用比較笨的方法添加了
button b11,b12,b13,b14,b15,b16,b17,b18; //30個按鈕來實現游戲界面
button b19,b20,b21,b22,b23,b24,b25; //可以用數組實現,這是本人
button b26,b27,b28,b29,b30,bc; //學java時,入門的聯系,所以
button b,ba,br,bt1,bt2; //有些東西很業余!!嘻嘻
panel p1,p2,p3;
textfield t; //用來顯示一些隨機信息,方法是下面的guli().
label l;
int d[][]={ //用來和界面的按鈕建立映射關系
{0,0,0,0,0,0,0},

{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0}
};
public static void main(string[] args)
{

lianliankan t=new lianliankan();
t.suiji();
t.go();

}
public void actionperformed(actionevent e) //再來一次按鈕的響應事件。
{
int d[][]={
{0,0,0,0,0,0,0},

{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0}
};
this.d=d;
suiji();
f.setvisible(false);
f1.setvisible(false);
s="no";
go();

}

public void go()//初始化界面
{
l=new label("親愛的玩家,");
f=new frame("連連看");
t=new textfield();
p2=new panel();
p1=new panel();
p3=new panel();
bc=new button("退出");
br=new button("重列");
b=new button();
b1=new button(string.valueof(d[1][1]));
b2=new button(string.valueof(d[1][2]));
b3=new button(string.valueof(d[1][3]));
b4=new button(string.valueof(d[1][4]));
b5=new button(string.valueof(d[1][5]));
b6=new button(string.valueof(d[2][1]));
b7=new button(string.valueof(d[2][2]));
b8=new button(string.valueof(d[2][3]));
b9=new button(string.valueof(d[2][4]));
b10=new button(string.valueof(d[2][5]));
b11=new button(string.valueof(d[3][1]));
b12=new button(string.valueof(d[3][2]));
b13=new button(string.valueof(d[3][3]));
b14=new button(string.valueof(d[3][4]));
b15=new button(string.valueof(d[3][5]));
b16=new button(string.valueof(d[4][1]));
b17=new button(string.valueof(d[4][2]));
b18=new button(string.valueof(d[4][3]));
b19=new button(string.valueof(d[4][4]));
b20=new button(string.valueof(d[4][5]));
b21=new button(string.valueof(d[5][1]));
b22=new button(string.valueof(d[5][2]));
b23=new button(string.valueof(d[5][3]));
b24=new button(string.valueof(d[5][4]));
b25=new button(string.valueof(d[5][5]));
b26=new button(string.valueof(d[6][1]));
b27=new button(string.valueof(d[6][2]));
b28=new button(string.valueof(d[6][3]));
b29=new button(string.valueof(d[6][4]));
b30=new button(string.valueof(d[6][5]));
p3.setlayout(null);
p1.setsize(250,300);
p2.setsize(100,40);
p3.setsize(300,30);
t.setsize(60,30);
l.setsize(70,30);
p1.setlayout(new gridlayout(6,5));
p1.setbackground(color.pink);
p1.setlocation(100,100);
p2.setlocation(0,400);
p3.setlocation(50,50);
t.setlocation(230,2);
l.setlocation(150,2);
bc.setlocation(0,40);
br.setlocation(0,100);
f.add(p1);
f.add(p2);
f.add(p3);
p3.add(l);
p3.add(t);
p2.add(bc);
p2.add(br);
p1.add(b1);
p1.add(b2);
p1.add(b3);
p1.add(b4);
p1.add(b5);
p1.add(b6);
p1.add(b7);
p1.add(b8);
p1.add(b9);
p1.add(b10);
p1.add(b11);
p1.add(b12);
p1.add(b13);
p1.add(b14);
p1.add(b15);
p1.add(b16);
p1.add(b17);
p1.add(b18);
p1.add(b19);
p1.add(b20);
p1.add(b21);
p1.add(b22);
p1.add(b23);
p1.add(b24);
p1.add(b25);
p1.add(b26);
p1.add(b27);
p1.add(b28);
p1.add(b29);
p1.add(b30);
f.pack();
f.setbounds(280,100,500,450);
f.setresizable(false);
f.setvisible(true);
bc.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
ex();
}

});
br.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
chonglie();
}

});
b1.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(1,1,b1);

}

});
b2.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(1,2,b2);
}

});
b3.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{

wei(1,3,b3);

}

});
b4.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{

wei(1,4,b4);
}

});
b5.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(1,5,b5);
}
});
b6.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(2,1,b6);
}
});
b7.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(2,2,b7);
}
});
b8.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(2,3,b8);
}
});
b9.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(2,4,b9);
}
});
b10.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(2,5,b10);
}
});
b11.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(3,1,b11);
}
});
b12.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(3,2,b12);
}
});
b13.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(3,3,b13);
}
});
b14.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(3,4,b14);
}
});
b15.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(3,5,b15);
}
});
b16.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(4,1,b16);
}
});
b17.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(4,2,b17);
}
});
b18.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(4,3,b18);
}
});
b19.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(4,4,b19);
}
});
b20.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(4,5,b20);
}
});
b21.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(5,1,b21);
}
});
b22.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(5,2,b22);
}
});
b23.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(5,3,b23);
}
});
b24.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(5,4,b24);
}
});
b25.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(5,5,b25);
}
});
b26.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(6,1,b26);
}
});
b27.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(6,2,b27);
}
});
b28.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(6,3,b28);
}
});
b29.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(6,4,b29);
}
});
b30.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
wei(6,5,b30);
}
});

}

public void ex() //退出界面,可用diolog來實現有模式的類型,更加符合
{
f1=new frame("游戲作業");
f1.setlayout(new gridlayout(1,1));
bt1=new button("確定退出");
bt2=new button("再來一局");
f1.add(bt1);
f1.add(bt2);
f1.pack();
f1.setbounds(400,250,90,60);
f1.setresizable(false);
f1.show();
f1.setvisible(true);
bt1.addmouselistener(new mouseadapter(){
public void mouseclicked(mouseevent e)
{
system.exit(0);
}
});
bt2.addactionlistener(this);
}

public void suiji() //產生隨機數,來填充游戲界面對應的數組的各個位置
{
int m,n,k=0,k1,k2,k3;
for(m=1;m<=15;m )
{
k1=(int)(math.random()*25 1);
for(n=1;n<=2;n )
{
k2=(int)(math.random()*6 1);
k3=(int)(math.random()*5 1);
while(d[k2][k3]!=0 && k!=30)
{
k2=(int)(math.random()*6 1);
k3=(int)(math.random()*5 1);
}
this.d[k2][k3]=k1;
k ;
}
}
}

public void guli() //隨機信息
{
int l=0;
t.settext("");
l=(int)(math.random()*10);
system.out.println(l);
switch(l)
{
case 1:
t.settext("好!加油!");
break;

case 3:
t.settext("你真棒!");
break;

case 5:
t.settext("加快速度!");
break;

case 6:
t.settext("不錯啊!");
break;

case 8:
t.settext("加油吧!");
break;

case 9:
t.settext("夠聰明!");
break;

default:
break;

}
}
public void chonglie() //重列方法
{
int save[],i,j,n=0,k2,k3,k;
int d[][]={
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0}
};
save=new int[30];
for(n=0;n<30;n )
save[n]=0; //定義一個數組來保存當前的每個按鈕位置上的信息
n=0;
for(i=0;i<=6;i )
for(j=0;j<=5;j )
{
if(this.d[i][j]!=0)
{
save[n]=this.d[i][j];
n ;
}
}
n=n-1;
this.d=d;
while(n>=0) //產生隨機位置,放置按鈕
{
k2=(int)(math.random()*6 1);
k3=(int)(math.random()*5 1);
while(d[k2][k3]!=0)
{
k2=(int)(math.random()*6 1);
k3=(int)(math.random()*5 1);
}
this.d[k2][k3]=save[n];
n--;
}
f.setvisible(false);
s="no"; //這里一定要將按鈕點擊信息歸為初始
go();
ling();
}
public void ling() //將數組中為零的成員對應的按鈕消去
{ //用按鈕類型的數組實現會簡化得多,
if(d[1][1]==0)
b1.setvisible(false);
if(d[1][2]==0)
b2.setvisible(false);
if(d[1][3]==0)
b3.setvisible(false);
if(d[1][4]==0)
b4.setvisible(false);
if(d[1][5]==0)
b5.setvisible(false);
if(d[2][1]==0)
b6.setvisible(false);
if(d[2][2]==0)
b7.setvisible(false);
if(d[2][3]==0)
b8.setvisible(false);
if(d[2][4]==0)
b9.setvisible(false);
if(d[2][5]==0)
b10.setvisible(false);
if(d[3][1]==0)
b11.setvisible(false);
if(d[3][2]==0)
b12.setvisible(false);
if(d[3][3]==0)
b13.setvisible(false);
if(d[3][4]==0)
b14.setvisible(false);
if(d[3][5]==0)
b15.setvisible(false);
if(d[4][1]==0)
b16.setvisible(false);
if(d[4][2]==0)
b17.setvisible(false);
if(d[4][3]==0)
b18.setvisible(false);
if(d[4][4]==0)
b19.setvisible(false);
if(d[4][5]==0)
b20.setvisible(false);
if(d[5][1]==0)
b21.setvisible(false);
if(d[5][2]==0)
b22.setvisible(false);
if(d[5][3]==0)
b23.setvisible(false);
if(d[5][4]==0)
b24.setvisible(false);
if(d[5][5]==0)
b25.setvisible(false);
if(d[6][1]==0)
b26.setvisible(false);
if(d[6][2]==0)
b27.setvisible(false);
if(d[6][3]==0)
b28.setvisible(false);
if(d[6][4]==0)
b29.setvisible(false);
if(d[6][5]==0)
b30.setvisible(false);
}

public void wei(int w1,int w2,button bz) //判斷並紀錄每次點擊按鈕的信息
{ //當兩次的按鈕相同才能消去
if((s.trim()).equals("no"))
{
s=b1.getlabel();
x0=w1;
y0=w2;
n1=d[x0][y0];
b=bz;
x=w1;
y=w2;
n2=d[x][y];
ba=bz;

}
else
{
x0=x;
y0=y;
n1=d[x0][y0];
b=ba;
x=w1;
y=w2;
n2=d[x][y];
ba=bz;
if(n1==n2 && ba!=b)
{
xiao();
}
}
}

public void xiao() //這里是整個游戲最重要的部分,就是判斷兩個按鈕在信息
{ //相同的情況下能不能消去。仔細分析,不一條條注釋
int i=0, j=0,n=0,k=0;
if((x0==x &&(y0==y 1||y0==y-1)) || ((x0==x 1||x0==x-1)&&(y0==y))) //相鄰的情況
{
ba.setvisible(false);
b.setvisible(false);
guli();
s="no";
d[x0][y0]=0;
d[x][y]=0;
}
else
{
for (j=0;j<7;j ) //兩個按鈕按行分析,看能否消去
{
if (d[x0][j]==0)
{
if (y>j)
{

for (i=y-1;i>=j;i-- )
{
if (d[x][i]!=0)
{
k=0;
break;
}
else
{
k=1;
}
}
if (k==1)
{
if (y0>j)
{
for (i=y0-1;i>=j ;i-- )
{
if (d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if (y0{
for (i=y0 1;i<=j ;i )
{
if (d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if (y{

for (i=y 1;i<=j ;i )
{

if (d[x][i]!=0)
{
k=0;
break;
}
else
{
k=1;
}
}
if (k==1)
{
if (y0>j)
{
for (i=y0-1;i>=j ;i-- )
{
if (d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if (y0{
for (i=y0 1;i<=j ;i )
{
if (d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if (y==j )
{
if (y0>j)
{
for (i=y0-1;i>=j ;i-- )
{

if (d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if (y0{
for (i=y0 1;i<=j ;i )
{
if (d[x0][i]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if (k==2)
{ if (x0==x)
{
b.setvisible(false);
ba.setvisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;
}
if (x0{
for (n=x0;n<=x-1;n )
{
if (d[n][j]!=0)
{
k=0;
break;
}
if(d[n][j]==0 && n==x-1)
{
b.setvisible(false);
ba.setvisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;
}
}
}
if (x0>x)
{
for (n=x0;n>=x 1 ;n-- )
{
if (d[n][j]!=0)
{
k=0;
break;
}
if(d[n][j]==0 && n==x 1)
{
b.setvisible(false);
ba.setvisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;

}
}
}
}
}

for (i=0;i<8;i ) //按列分析,看能不能消去
{
if (d[i][y0]==0)
{
if (x>i)
{

for (j=x-1;j>=i ;j-- )
{
if (d[j][y]!=0)
{
k=0;
break;
}
else
{
k=1;
}
}

if (k==1)
{
if (x0>i)
{
for (j=x0-1;j>=i ;j-- )
{
if (d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if (x0{
for (j=x0 1;j<=i;j )
{
if (d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if (x{

for (j=x 1;j<=i;j )
{
if (d[j][y]!=0)
{
k=0;
break;
}
else
{
k=1;
}
}
if (k==1)
{
if (x0>i)
{
for (j=x0-1;j>=i ;j-- )
{
if (d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if (x0{
for (j=x0 1;j<=i ;j )
{
if (d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
}
}
if (x==i)
{

if (x0>i)
{
for (j=x0-1;j>=i ;j-- )
{
if (d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}
if (x0{
for (j=x0 1;j<=i ;j )
{
if (d[j][y0]!=0)
{
k=0;
break;
}
else
{
k=2;
}
}
}

}
}
if (k==2)
{
if (y0==y)
{
b.setvisible(false);
ba.setvisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;

}
if (y0{
for (n=y0;n<=y-1 ;n )
{
if (d[i][n]!=0)
{
k=0;
break;
}
if(d[i][n]==0 && n==y-1)
{
b.setvisible(false);
ba.setvisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;

}
}
}
if (y0>y)
{
for (n=y0;n>=y 1 ;n--)
{
if (d[i][n]!=0)
{
k=0;
break;
}
if(d[i][n]==0 && n==y 1)
{
b.setvisible(false);
ba.setvisible(false);
guli();
s="no";
k=0;
d[x0][y0]=0;
d[x][y]=0;

}
}
}
}
}

}
}
}

g. qq連連看的積分是怎麼算的

積分貌似根據你的連擊次數和游戲人數來確定的,具體我也不知道啊。有空咱倆玩玩

h. 連連看中無數個折點相連的演算法是怎樣的

無數個折點的問題其實就是一個迷宮探路的問題,可以用一個棧或者隊列來實現。

以棧為例,這個其實是深度優先的查找,設每次只走一格
0)把起點放入棧中;
1)從棧頂取一個元素(如果棧已經空,說明不通,是死路);
2)看該元素的下一步元素是否有終點,如果有,找到通路,循環結束;否則把該元素的下一步每一個可能走的格放入棧中;
3)不斷重復1-2。

i. 求一連連看演算法 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 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 for( col1=1;col1 if( a[row1][co1]!=0 )
for( row2=row1;row2 for( col2=1;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函數就可以了,我就不貼出來了
=================================================
含有很多簡單的函數沒寫,不懂再問我吧

j. 高分求多層連連看的演算法

我也想要,頂一個

熱點內容
resin下jsp不能正常編譯 發布:2024-07-17 16:34:44 瀏覽:229
sqlserver如何切換主備伺服器 發布:2024-07-17 16:23:02 瀏覽:299
mc18伺服器ip 發布:2024-07-17 16:23:02 瀏覽:379
仙境傳說手游腳本 發布:2024-07-17 16:09:24 瀏覽:691
matlab命令窗口和新建腳本 發布:2024-07-17 15:51:26 瀏覽:375
建ftp文件夾 發布:2024-07-17 15:51:26 瀏覽:955
魔獸撿物腳本 發布:2024-07-17 15:27:56 瀏覽:130
開發ip伺服器 發布:2024-07-17 15:24:42 瀏覽:388
安卓系統視頻製作哪個好用 發布:2024-07-17 15:10:47 瀏覽:210
androidapk結構 發布:2024-07-17 15:10:43 瀏覽:945
网站地图