连连看简单终端版
头文件linksee.h
#ifndef LINKSEE_H
#define LINKSEE_H
#define N 10
/*************************************************
*函数名:initBlocks
*说明:初始化每个方块,并且使方块顺序打乱
*参数:int allBlocks[]要保存方块的二维数组
*返回值:无
*************************************************/
void initBlocks(int allBlocks[][N]);
/************************************************
*函数名:display
*说明:显示方块到屏幕
*参数:int allBlocks[],要显示的方块的二维数组
*返回值:无
************************************************/
void display(int allBlocks[][N]);
/***********************************************
*函数名:checkConnect
*说明:判断两个方块是否可以消除
*参数:int x1,第一个方块的横坐标
int y1,第一个方块的纵坐标
int x2,第二个方块的横坐标
int y2,第二个方块的纵坐标
*返回值:bool型,若能消除则返回1,否则返回0
***********************************************/
int checkConnect(int allBlocks[][N],int x1,int y1,int x2,int y2);
/************************************************
*函数名:connect1
*说明:判断能否在一条直线上连接两个方块
*参数:int allBlocks[][N]保存方块的数组
int x1,int y1第一个方块的坐标
int x2,int y2第二个方块的坐标
*返回值:若能连接返回1,否则返回0
************************************************/
int connect1(int allBlocks[][N],int x1,int y1,int x2,int y2);
/************************************************
*函数名:connect2
*说明:判断能否在只转一个湾的情况下连接两个方块
*参数:int allBlocks[][N]保存方块的数组
int x1,int y1第一个方块的坐标
int x2,int y2第二个方块的坐标
*返回值:若能连接返回1,否则返回0
************************************************/
int connect2(int allBlocks[][N],int x1,int y1,int x2,int y2);
/************************************************
*函数名:connect3
*说明:判断能否在转两个湾的情况下连接两个方块
*参数:int allBlocks[][N]保存方块的数组
int x1,int y1第一个方块的坐标
int x2,int y2第二个方块的坐标
*返回值:若能连接返回1,否则返回0
************************************************/
int connect3(int allBlocks[][N],int x1,int y1,int x2,int y2);
/************************************************
*函数名:isGameOver
*说明:判断玩家是否完成游戏
*参数:int allBlocks[][N]保存方块的数组
*返回值:若完成游戏(即数组的值全为0)返回1,否则返回0
************************************************/
int isGameOver(int allBlocks[][N]);
/************************************************
*函数名:playgame
*说明:玩游戏的过程
*参数:int allBlocks[][N]保存方块的数组
*返回值:无
************************************************/
void playgame(int allBlocks[][N]);
#endif
源文件:linksee.c
#include <stdio.h>
#include "linksee.h"
#include <stdlib.h>
#include <time.h>
void initBlocks(int allBlocks[][N])
{
int i=1;
int k=1;
for(;i<N-1;i++)
{
int j=1;
for(;j<N-1;j+=2)
{
allBlocks[i][j]=k;
allBlocks[i][j+1]=k;
k++;
}
}
srand((unsigned)time(NULL));
i=0;
for(;i<(N-2)*(N-2);i++)
{
int indexX1=rand()%(N-2)+1;
int indexY1=rand()%(N-2)+1;
int indexX2=rand()%(N-2)+1;
int indexY2=rand()%(N-2)+1;
int temp=allBlocks[indexX1][indexY1];
allBlocks[indexX1][indexY1]=allBlocks[indexX2][indexY2];
allBlocks[indexX2][indexY2]=temp;
}
return ;
}
void display(int allBlocks[][N])
{
int i=0;
for(;i<N;i++)
{
int j=0;
for(;j<N;j++)
{
if(allBlocks[i][j]==0)
{
printf(" ");
}
else
{
printf("%3d",allBlocks[i][j]);
}
}
printf("/n");
}
return;
}
int connect1(int allBlocks[][N],int x1,int y1,int x2,int y2)
{
int sum=0;
if(x1==x2&&y1!=y2)
{
if(y2>y1)
{
int temp=y1;
y1=y2;
y2=temp;
}
int i=y2+1;
for(;i<=y1-1;i++)
{
sum+=allBlocks[x1][i];
}
if(sum==0)
{
//printf("11连接%d/t%d/t%d/t%d/n",x1,y1,x2,y2);//////////
return 1;
}
}
else if(y1==y2&&x1!=x2)
{
if(x2>x1)
{
int temp=x1;
x1=x2;
x2=temp;
}
int i=x2+1;
for(;i<=x1-1;i++)
{
sum+=allBlocks[i][y1];
}
if(sum==0)
{
//printf("12连接%d/t%d/t%d/t%d/n",x1,y1,x2,y2);//////////
return 1;
}
}
return 0;
}
int connect2(int allBlocks[][N],int x1,int y1,int x2,int y2)
{
if((allBlocks[x1][y2]==0)&&connect1(allBlocks,x1,y1,x1,y2)&&connect1(allBlocks,x1,y2,x2,y2))
{
//printf("21连接%d/t%d/t%d/t%d/n",x1,y1,x2,y2);//////////
return 1;
}
else if((allBlocks[x2][y1]==0)&&connect1(allBlocks,x1,y1,x2,y1)&&connect1(allBlocks,x2,y1,x2,y2))
{
//printf("22连接%d/t%d/t%d/t%d/n",x1,y1,x2,y2);//////////
return 1;
}
return 0;
}
int connect3(int allBlocks[][N],int x1,int y1,int x2,int y2)
{
int i=0;
for(;i<N;i++)
{
int j=0;
for(;j<N;j++)
{
if((allBlocks[i][j]==0)&&connect1(allBlocks,x2,y2,i,j)&&connect2(allBlocks,x1,y1,i,j))
{
//printf("31连接%d/t%d/t%d/t%d/n",x1,y1,x2,y2);//////////
return 1;
}
}
}
return 0;
}
int checkConnect(int allBlocks[][N],int x1,int y1,int x2,int y2)
{
if(allBlocks[x1][y1]!=allBlocks[x2][y2])
{
return 0;
}
else if(connect1(allBlocks,x1,y1,x2,y2))
{
//printf("1连接成功!");//////////
return 1;
}
else if(connect2(allBlocks,x1,y1,x2,y2))
{
//printf("2连接成功!");//////////
return 1;
}
else if(connect3(allBlocks,x1,y1,x2,y2))
{
//printf("3连接成功!");//////////
return 1;
}
return 0;
}
int isGameOver(int allBlocks[][N])
{
int i=0;
for(;i<N;i++)
{
int j=0;
for(;j<N;j++)
{
if(allBlocks[i][j])
{
return 0;
}
}
}
return 1;
}
void playgame(int allBlocks[][N])
{
int x1;
int y1;
int x2;
int y2;
do
{
printf("请输入你要连接的两个方块坐标:/n");
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(checkConnect(allBlocks,x1,y1,x2,y2))
{
allBlocks[x1][y1]=0;
allBlocks[x2][y2]=0;
display(allBlocks);
}
else
{
printf("此两方块不能连接!/n");
}
}
while(!isGameOver(allBlocks));
printf("恭喜你完成了游戏!/n");
return ;
}
main函数源文件
#include <stdio.h>
#include "linksee.h"
int allBlocks[N][N];
int main()
{
//int allBlocks[N][N];
initBlocks(allBlocks);
display(allBlocks);
playgame(allBlocks);
return 0;
}