求大神设计一个C语言的连连看!!谢谢!!

1 问题描述
连连看是一个经典的游戏,本课题要求实现一个文本界面的连连看游戏。
2 基本要求
要能提供以下几个基本功能:
(1)定义一个矩阵,随机产生字符布置地图,例如下面这个4x4 的地图。
1 2 3 4
B C H C 1
C F B E 2
A E D F 3
C H A D 4
(2)游戏者通过坐标(1,2)、(3,4)判定第一行第二列的字符与第三行第四列的字符是相同的),判定争取则相应位置的字符消失,如判断错误给出相应的错误提示,允许重新判定。
(3)如果找不出配对的字符,提供restart 模式,给现存的地图重新排序。
(4)定义成绩排行榜,记录前五名的用户名及时间。
(5)提供菜单功能,定义不同等级的连连看地图供选择。
(6)设定有时间限定的游戏模式和无时间限定的游戏模式。
(7) 成绩排行榜以文件形式保存。
3 选做内容
使用MFC 等开发工具,实现彩色或图形操作界面。
4 其他要求
(1)变量、函数命名符合规范。
(2)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。
(3)程序的层次清晰,可读性强。
5 开发环境
可以选择TC2.0、TC3.0、VC++6.0等。

MFC就先算了,我想先把黑屏程序学会了。。
谢谢!

#include<stdio.h>
#include<graphics.h>
#define FPS 100
#define WIN_SIZE 640
#define MAP_SIZE 10//一行多少图片
#define IMG_SIZE  //图片宽度
#define MAX_PICTURE_NUM  42//图片数量
#define WIN__SIZE MAP_SIZE*IMG_SIZE+2*IMG_SIZE
IMAGE img_total[2];//初始化数据
IMAGE img_picture[MAX_PICTURE_NUM 42] [2];
int map[MAP_SIZE + 2][MAP_SIZE + 2];//前后有边界+2
MOUSEMSG msg;
POINT begin = { -1,-1 }, end = { -1,-1 };//现代你记得坐标,后点击的坐标
enum STATE//表示点击的状态,第一次&第二次
{
    m_begin,
    m_end,
};
int flag = m_begin;

void GameInit()
{
    srand(GetTickCount());
    loadimage(&img_total[0], "/res/animal.bmp");
    loadimage(&img_total[1], "/res/bk.jpg",WIN_SIZE,WIN_SIZE);
    SetWorkingImage(&img_total[0]);//长图切片,保存数组;
    for(int i=0;i<MAX_PICTURE_NUM;i++)//二维数组双重循环
    {
        for (int k = 0; k < 2; k++)
        {
            getimage(&img_picture[i][k], k*IMG_SIZE, i*IMG_SIZE, IMG_SIZE, IMG_SIZE);
        }
    }
    SetWorkingImage();
    int temp = 1, _count = 1;//_count记录已经初始化的个数
    //每张图片10个
    for (int i = 0; i < MAP_SIZE; i++)//去头去尾,消除边界
    {
        for (int k = 1; k <= MAP_SIZE; k++)
        {
            map[i][k] = temp;
            if (_count % 10 == 0)
            {
                temp++;
            }
            _count++;
        }
    }
    //打乱数组
    for (int i = 1; i < MAP_SIZE; i++)
    {
        for (int k = 1; k <= MAP_SIZE; k++)
        {
            //也可以用i,k去与别的交换
            int x = rand() % 10 + 1;
            int y = rand() % 10 + 1;
            int x1 = rand() % 10 + 1;
            int y1 = rand() % 10 + 1;
            int _swap = map[x][y];
            map[x][y] = map[x1][y1];
            map[x1][y1] = _swap;
        }
    }
}

void GameDraw()
{
    cleardevice();//背景图
    putimage(0, 0, &img_total[1]);//绘制动物图片
    for(int i = 1; i <= MAP_SIZE, i++)
    {
        for (int k = 1; k <= MAP_SIZE; k++)
        {
            if (map[i][k] > 0)
            {
                putimage(k*IMG_SIZE, i*IMG_SIZE, &img_picture[i][k][1],SRCAND);
                putimage(k*IMG_SIZE, i*IMG_SIZE, &img_picture[i][k][0],SRCPAINT);
            }
        }
    }
}
//游戏控制,鼠标点击获得数组下标
void GameControl()
{
    if (MouseHit())
    {
        msg = GetMouseMsg();
        if (msg.uMsg == WM_LBUTTONDOWN && flag==m_begin)
        {
            begin.y=msg.x/IMG_SIZE;
            begin.x = msg.y; /IMG_SIZE;
            flag = m_end;
        }
        else if (msg.uMsg == WM_LBUTTONDOWN && flag == m_end)
        {
            end.y = msg.x / IMG_SIZE;
            end.x = msg.y; / IMG_SIZE;
            flag = m_begin;
        }
        printf("begin:(%d,%d)end:(%d,%d)\n", begin.x, begin.y, end.x, end.y);
    }
}
//判断某一点是否有障碍
static int isBlockeed(int x,int y)
{
    return map[x][y];
}
//同一水平是否能够消除
int horizon(POINT begin,POINT end)
{
    //首先判断是否点击的同一个
    if (begin.x == end.x&&begin.y == end.y)
    {
        return 0;
    }
    //是否在同一水平方向
    if (begin.x!=end.x)
    {
        return 0;
    }
    //判断两者之间是否有障碍
    int tx = min(begin.y, end.y);
    int maxx = max(begin.y, end.y);
    for (int i = minx + 1; i < maxx; i++)
    {
        if (isBlockeed( begin.y,i))
        {
            return 0;
        }
    }
    return 1;
}
//垂直方向消除
woid vertical()
{

}
//一个拐点
void turn_once()
{

}
//两个拐点
void turn_two()
{

}
voidprintf()
{
    for (int i = 0; i < MAP_SIZE + 2; i++)
    {
        for (int k = 0; k < MAP_SIZE + 2; k++)
        {
            printf("%d", map[i][k]);
        }
        printf("\n");
    }
}
int mian()
{
    initgraph(WIN_SIZE, WIN_SIZE,SHOWCONSOLE);
    printf("WELCOME");
    GameInit();
    //BeginBatchDraw();//开启双缓冲绘图

    while (true)
    {
         GameDraw();
         FlushBatchDraw();
         GameControl();
         if (horizon(begin,end) == 1&&map[begin.x][begin.y]==map[end.x][end.y])
         {
             map[begin.x][begin.y] = 0;
             map[end.x][end.y] = 0;
         }
         printf("%d", horizon(begin, end));
    }
    
    return 0;
}

 


 

支持下,待高手,当年的皮毛已经忘光了

C语言连连看

算了,太华精力了。这一般没人感兴趣的

大神好闲啊!还是多搜索下吧

做作业的话直接去淘宝找人做吧

你是找人给你写代码啊?这些出来得一天吧~没人会给你写的~百度看看有没有人家写好的~

建议直接去csdn下载频道那里去搜索一下,真的在这里没有人会帮你写完整代码的,而且又是免费的。