龙哥叫我们一个组做一个小游戏项目,而我们组要做的是打砖块,窗体上面的砖块其实和连连看一样,怎么样显示出来,怎么样消掉,都和连连看差不多,所以我就先做一个连连看试试刀。
连连看实现其实不难,就是使用JTable和TableModel,再加上监听器,就可以实现一个简单的连连看:
1.和以往相同,先用Swing组建实现一个窗体,现在都是小菜一碟了
2.再写一个类,继承MouseAdapter,实现TableModel接口。
1.继承MouseAdapter,就是为了重写mouseReleased方法,而后实现点击两个图片,从而
消除两个图片。
2.实现TableModel,我们要给数组加上图片,还有得到每个图片的值。
很多东西都写在代码上面,这里不多说,我现在做的连连看还只是实现了一些基本功能,有的功能还没实现,其实只是几个方法的实现问题。现在我主要是纠结算法。连连看难就难在算法,我写的这点算法,花了我一天一夜,能连起来的图片我基本都实现了,但是有的不能连起来的图片也能连起来并且消掉,我就有点郁闷了,我看了很多次我写的算法,实在看不出哪里存在问题,希望各位高手能指点指点。。。在下感激不尽 = =。。还有,我没有让每个图片都出现偶数个,所以最后一班都不能全部消掉。。。我现在只想先把算法搞定。
这是一些截图
算法代码
//判断相连的方法
public boolean connected(int r1,int c1,int r2,int c2){
//===============================没有拐点==================================//
//同行
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;
}
}
//有两个拐点的部分方法
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;
}
}
//有两个拐点的部分方法
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;
}
}
}
}
}
}
//=============================只有一个拐点================================//
//右上角或左上角为空
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;
}
}
}
}
}
//==============================有两个拐点=================================//
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;
}