c语言 EasyX图形设计————2048

c语言版2048

一.前言

  1. 环境准备:vc系列(vc 6.0,vs2005等等)编译器,下载easy x
  2. easy x下载链接
  3. easy x简介:相当于多加了一个库函数,头文件为:#include < graphics.h > 可以绘图,加载图片,音乐,获取鼠标信息。
  4. easy x官网链接

二. 效果截图

主界面

游戏介绍

游戏操作

游戏界面

胜利界面

失败界面

三. 程序框架和函数调用关系

1. 所有函数
main()//主函数
lent()//开始
show1()//主页面
show2()//游戏简介页面
show3()//操作界面
show4()//游戏画面
start()//游戏
rands()//随机生成数字块
updateWithInput()//与输入有关的更新
judge()//判断是否失败
win()//成功界面
lose()//失败界面
2. 函数框架-伪代码
int mian(void)
{
    lent();//开始 
} 
void lent
{
    while(1)
    {
        show1(); //主页面 
        1.获取鼠标信息
        2.根据鼠标信息进行选择界面
        if(鼠标点击游戏界面这个选项)
            start();//游戏界面 
        else if()
            show2();//游戏说明界面 
        else if()
            show3();//操作说明界面 
        else if()
            exit(0);//退出 

    } 
} 
void start()
{
    1.使map数组元素清零 map(二维数组,保存2048游戏4*4格子中每个数的信息);
    rands();//随机位置生成2/4 
    rands();
    while(1)
    {
        show4()//游戏界面
        updateWithInput();//与输入有关的更新
        if(score_i>=2048)//本次得分超过2048胜利 
            win();//胜利界面    
    } 
} 
void rands()
{
    随机位置生成2/4
    judge();//判断是否失败 失败进入失败界面 
}
void updateWithInput()
{
    1.根据wasd 或者方向键进行2048中所有数字块的移动,合并碰撞 
    2.每次移动后计算本次得分,总分
    3.每次移动后调用rands函数. 
} 
3. 函数框架-思维导图

这里写图片描述

四. 部分功能实行思路

1. 各种界面的绘制所用的的函数
  • setbkcolor()//设置背景颜色
  • setfillcolor()//设置填充颜色
  • settextcolor()//设置字体颜色
  • setfont()//设置字体大小,字体样式
  • drawtext()//指定位置写入字符串
  • solidroundrect()//绘制圆角矩形
  • 具体用法可以看easy x帮助文件
2. 鼠标的应用
    MOUSEMSG m;//定义鼠标类型变量
    while(1)
    {
        m=GetMouseMsg();//获取鼠标信息
        if(m.uMsg==WM_LBUTTONDOWN)//此时鼠标左键按下
        {
            if(m.x>WIDTH/2-45&&m.x<WIDTH/2+45&&m.y>HEIGHT/3&&m.y<HEIGHT/3+30)/\/鼠标座标所在位置
                start();
        }
    }
    getch();

}

更多操作可以看easy x的帮助

3. 图片的加载
IMAGE img0;//定义图片类型变量
loadimage(&img0,"pic\\0.jpg");//类似于赋值
putimage(i*165+30,j*165+230,&img0);//将图片写入屏幕上
4. 随机位置产生数字块
void rands()
{
    int x,y,temp,num;
    srand((int)time(0));
    while(1)
    {
        x=rand()%4;
        y=rand()%4;
        temp=rand()%5;
        if(temp==1)
            num=4;
        else 
            num=2;
        if(map[y][x]==0)//随机生成的坐标为0时,将2/4赋给它,并跳出循环
        {
            map[y][x]=num;
            break;
        }
        if(judge())//当格子内没有空位置并且有相邻相同的时跳出循环
            break;
    }
}
5. 失败判断
int judge()
{
    int i,j;
    //检查是否有0值
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            if(map[i][j]==0)
                return 0;
    //查看边界是否有相同的
    for(i=0;i<4;i+=3)
        for(j=1;j<3;j++)
            if(map[i][j-1]==map[i][j]||map[i][j+1]==map[i][j])
                return 1;
    for(i=1;i<3;i++)
        for(j=0;j<4;j+=3)
            if(map[i-1][j]==map[i][j]||map[i+1][j]==map[i][j])
                return 1;
    //查看中心是否有相同
    for(i=1;i<3;i++)
        for(j=1;j<3;j++)
            if(map[i-1][j]==map[i][j]||map[i+1][j]==map[i][j]||map[i][j-1]==map[i][j]||map[i][j+1]==map[i][j])
                return 1;
    lose();//失败界面
}
6. 与输入有关的更新(以上为例)
if(keyboard=='w'||keyboard=='W'||keyboard==72)//上
    {
        for(n=0;n<4;n++)//次数
        for(i=1;i<4;i++)//行
        for(j=0;j<4;j++)//列
            if(map[i][j]!=0)//若当前元素不为0
            {
                if(map[i-1][j]==0)//上方元素为0,当前元素上移
                {
                    map[i-1][j]=map[i][j];
                    map[i][j]=0;
                }
                if(map[i-1][j]==map[i][j])//当前元素和上方元素相同碰撞
                {
                    num=map[i][j]*2;//得分
                    score_i=score_i+num;//本次操作得分
                    map[i-1][j]=map[i][j]*2;
                    map[i][j]=0;
                }
            }
            score=score+score_i;//目前累计的分
            rands();//随机位置生成数组块
    }

五.源代码

  • 29
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值