连连看简单终端版

头文件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;
}

posted @ 2010-07-29 18:35  $逝水无痕$  阅读(127)  评论(0编辑  收藏  举报