c语言小项目————2048

来源:互联网 发布:网络女主播都是穷人 编辑:程序博客网 时间:2024/05/16 23:38

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();//随机位置生成数组块    }

五.源代码

  • test9
原创粉丝点击