C语言连连看

还没写完,先晾在这边

#include<stdio.h>
int row_len;
int column_len;
int arr[1000][1000];
void start();
void show();
void init();


int max(int n1,int n2);
int min(int n1,int n2);
struct Point {
	int x;
	int y;
};
struct Point p1;
struct Point p2;
struct Point p3;
struct Point p;
struct Point temp;
int isSameLine(struct Point pi1,struct Point pi2);
int isSingleBrokenLine(struct Point pi1,struct Point pi2);
int  horizonVerify();//水平判定
int docheck(struct Point pi1,struct Point pi2);
void getPoint(struct Point p1, struct Point p2);
void main(){
	start();
	while(1){
	  docheck(p1,p2);	
	}
}
void start(){
	printf("难度系数控制\n");
	printf("输入行数\n");
	scanf("%d",&row_len);
	printf("\n输入列数\n");
	scanf("%d",&column_len);
	if(column_len%2!=0){
		printf("请保证输入的列数是偶数\n");
		exit();
	}
	init();
	show();
}
void getPoint(){
	printf("输入第一点的坐标x\n");
	scanf("%d",&p1.x);
	printf("输入第一点的坐标y\n");
	scanf("%d",&p1.y);
	printf("输入第二点的坐标x\n");
	scanf("%d",&p2.x);
	printf("输入第二点的坐标y\n");
	scanf("%d",&p2.y);
	
}

int docheck(struct Point pi1,struct Point pi2){
	 
	printf("输入第一点的坐标x\n");
	scanf("%d",&pi1.x);
	printf("输入第一点的坐标y\n");
	scanf("%d",&pi1.y);
	printf("输入第二点的坐标x\n");
	scanf("%d",&pi2.x);
	printf("输入第二点的坐标y\n");
	scanf("%d",&pi2.y);
	
     printf("%d=%d\n",pi1.x,pi1.y);
	
	if(arr[pi1.y][pi1.x]==arr[pi2.y][pi2.x]){
		if(isSameLine(pi1,pi2)||isSingleBrokenLine(pi1,pi2)){
			arr[pi1.y][pi1.x]=0;
			arr[pi2.y][pi2.x]=0;
		}
		show();
	}else{
		printf("两点值不同");
	}
}
int max(int n1,int n2){
	if(n1>n2){
		return n1;
	}
	return n2;
}
int min(int n1,int n2){
    if(n1<n2){
		return n1;
	}
	return n2;
}
/*
	直线连通
*/
int isSameLine(struct Point p1,struct Point p2){
	int min_y;
	int max_y;
	int min_x;
	int max_x;
	int i;
	if(p1.x==p2.x){
		min_y=min(p1.y,p2.y);
		max_y=max(p2.y,p1.y);
		
		for(i=min_y+1;i<max_y;i++){
			if(arr[i][p1.x]!=0){
				return 0;
			}
		}
			if(i==max_y){
				return 1;
			} 
	}else if(p1.y==p2.y){
	    min_x=min(p1.x,p2.x);
		max_x=max(p1.x,p2.x);
		for(i=min_x+1;i<max_x;i++){
			if(arr[p1.y][i]!=0){
				return 0;
				}
			}
			if(i==max_x){
				return 1;
			}
	}
	return 0;
}
int isSingleBrokenLine(struct Point pi1,struct Point pi2){
	int min_x;
	int max_x;
	int min_y;
	int max_y;
	int flag;
	int flag1;
	int i;
	int j;
	min_x=min(pi1.x,pi2.x);
	max_x=max(pi1.x,pi2.x);
	min_y=min(pi1.y,pi2.y);
	max_y=max(pi1.y,pi2.y);
	temp.x=min_x;
	temp.y=min_y;
	/*
       一拐点  
	*/
	if((temp.x==pi1.x && temp.y==pi1.y)|| (temp.x==pi2.x && temp.y==pi2.y)){
			flag=1;
			/*
		  左右两拐点都不为零的就返回零
		*/
		if(arr[max_y][min_x]!=0 && arr[min_y][max_x]!=0){
			return 0;
		}else if(arr[max_y][min_x]==0){//拐点为零
			for(i=min_y+1;i<max_y;i++){
				if(arr[i][min_x]!=0){
				   flag=0;
				   break;
				}
				if(flag){
					for(j=min_x+1;j<max_x;j++){
						if(arr[max_y][j]!=0){
							flag=0;
							break;
						}
					}	
				}
			}
				if(flag){
				 return 1;
			}	
		}else if(arr[min_y][max_x]==0){
			for(i=min_y+1;i<max_y;i++){
				if(arr[i][max_x]!=0){
				   flag=0;
				   break;
				}
				if(flag){
					for(j=min_x+1;j<max_x;j++){
						if(arr[min_y][j]!=0){
							flag=0;
							break;
						}
					}	
				}
			}
				if(flag){
				 return 1;
			}
		}
	}else if(pi1.x!=pi2.x&&pi1.y!=pi2.y){
		flag1=1;
		if(arr[min_y][min_x]!=0 && arr[max_y][max_x]!=0){
				return 0;
		}else if(arr[min_y][min_x]==0){
			for(i=min_y+1;i<max_y;i++){
					if(arr[i][min_x]!=0){
						flag1=0;
						break;
				}

				if(flag1){
					for(j=min_x+1;j<max_x;j++){
						if(arr[min_y][j]!=0){
						  flag1=0;
						  break;
						}
					}
				}
			}
				if(flag1){
					return 1;
				}
		}else if(arr[max_y][max_x]==0){
				for(i=min_y+1;i<max_y;i++){
					if(arr[i][max_x]!=0){
						flag1=0;
						break;
					}
					if(flag1){
						for(j=min_x+1;j<max_x;j++){
							if(arr[max_y][j]!=0){
							  flag1=0;
							  break;
							}
						}
					}
				}
				if(flag1){
					return 1;
			}
		}
	}
	return 0;
}

int horizonVerify(){
     int i;
	/*
		循环列
	*/
	 for(i=0;i<column_len;i++){
		 if(i!=p1.x && arr[p1.y][i]){
			 p.y=p1.y;
			 p.x=i;
		/*	 if(isSingleBrokenLine()&&isSingleBrokenLine()){
			 }*/
		 }
	 }

}
void init(){
	int i;
	int j;
	int z;
	int value;

	for(i=1;i<row_len-1;i++){
		for(j=1;j<column_len-1;j+=2){
			value=rand()%9+1;
			arr[i][j]=value;
			arr[i][j+1]=value;
		}
	}
			//随机交换
	for(z=0;z<column_len*row_len;z++){
		int x1;
		int y1;
		int x2;
		int y2;
		int temp;
		temp=0;
		x1=0;
		y1=0;
		x2=0;
		y2=0;
		while(x1==0){
		   x1=rand()%(column_len-1);
		}
		while(x2==0){
			x2=rand()%(column_len-1);
		}
		while(y1==0){
			y1=rand()%(row_len-1);
		}
		while(y2==0){
			y2=rand()%(row_len-1);
		}
	//printf("%d,%d",x1,y1);
	temp=arr[y1][x1];
	arr[y1][x1]=arr[y2][x2];
	arr[y2][x2]=temp;
	}

}
void show(){
	int i;
	int j;
	int k;

	printf("    ");	
	for(i=1;i<column_len-1;i++){
		printf("*%d*",i);
	}
	printf("\n");
	for(j=0;j<row_len;j++){
		if(j!=0 && j!=row_len-1 ){
			printf("%d",j);
		}else{
			printf(" ");
		}
		for(k=0;k<column_len;k++){
			printf(" %d ",arr[j][k]);
		}
	   printf("\n");
	}


}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值