C语言实现2048小游戏

用递归的核心思想,实现C语言2048游戏!!!

废话不多说,先上截图,看看效果

 

 

 

 颜色是会改变的,是随机的

好了大概就是这个效果, 实现的核心逻辑我是用的递归算法,这里贴出一部分

//游戏规则运算函数
//w为上方向
void up_W_scanf(int (*gameNums)[4], int x, int y, int t, int n)
{
        //t = x = 0坐标,大于3就说明后面没有数可以和自身(目标数) 对比了
        if( t >= 3 || n > 3)
        {
            return;
        }
        else
        {
            //如果第一个数是0 ,就把目标数移动到下一个位置,查找有没有不为0,且和自身相同的数,有就把自身数累加起来
            if(gameNums[t][y] == 0)
            {
                t += 1;
                //更改t的值后调用自己,重新判断
                up_W_scanf(gameNums, x, y, t, n);
            }
            //找到了和目标数相同的对比数
            else if(gameNums[n][y] == gameNums[t][y] &&  gameNums[n][y] != 0)
            {
                gameNums[t][y] = 2 *  gameNums[t][y];
                gameNums[n][y] = 0;
                //把目标数移动到对比数
                //把对比数移动到下一位
                t = n + 1;
                n = t + 1;
                up_W_scanf(gameNums, x, y, t, n);
            }
            //不相同也不为0,跳过当前目标数,重置这个不相同也不为0 的数为新的目标数
            else if(gameNums[n][y] != gameNums[t][y] &&  gameNums[n][y] != 0)
            {

                t = n;
                //对比数移动到目标数后面
                n += 1;
                //重置数值后递归自己
                up_W_scanf(gameNums, x, y, t, n);
            }
            else if(gameNums[n][y] != gameNums[t][y] && gameNums[n][y] == 0)
            {
                
                if(n <= 3)
                {
                    
                    n += 1;
                    up_W_scanf(gameNums, x, y, t, n);
                }
                //找了一组都没有找到不为0的数,说明后面都没数了,返回进入下一组
            }
        }
}

 那么这个界面图案是怎么打印出来的呢,废话不多说,直接贴代码

void game_printf(int (*gameNums)[4])
{
    int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p;
    a = gameNums[0][0], b = gameNums[0][1], c = gameNums[0][2], d = gameNums[0][3];
    e = gameNums[1][0], f = gameNums[1][1], g = gameNums[1][2], h = gameNums[1][3];
    i = gameNums[2][0], j = gameNums[2][1], k = gameNums[2][2], l = gameNums[2][3];
    m = gameNums[3][0], n = gameNums[3][1], o = gameNums[3][2], p = gameNums[3][3];
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),14);//设置文本颜色位黄色
    printf(".——————————————.———————————————.——————————————.——————————————.\n");
    printf("|              |               |              |              |\n");
    printf("|              |               |              |              |\n");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);//设置文本颜色为绿色
    printf("| %7d      | %7d       | %7d      | %7d      |\n",a,b,c,d);
    printf("|              |               |              |              |\n");
    printf("|              |               |              |              |\n");
    printf("·——————————————·———————————————·——————————————·——————————————·\n");
    printf("|              |               |              |              |\n");
    printf("|              |               |              |              |\n");
    printf("| %7d      | %7d       | %7d      | %7d      |\n",e,f,g,h);
    printf("|              |               |              |              |\n");
    printf("|              |               |              |              |\n");
    printf("·——————————————·———————————————·——————————————·——————————————·\n");
    printf("|              |               |              |              |\n");
    printf("|              |               |              |              |\n");
    printf("| %7d      | %7d       | %7d      | %7d      |\n",i,j,k,l);
    printf("|              |               |              |              |\n");
    printf("|              |               |              |              |\n");
    printf("·——————————————·———————————————·——————————————·——————————————·\n");
    printf("|              |               |              |              |\n");
    printf("|              |               |              |              |\n");
    printf("| %7d      | %7d       | %7d      | %7d      |\n",m,n,o,p);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),14);
    printf("|              |               |              |              |\n");
    printf("|              |               |              |              |\n");
    printf("·——————————————·———————————————·——————————————·——————————————·\n");
    

}

哈哈哈,我有点追求完美,我弄的东西一点要很完美,哪怕是一个小小的界面,我都会钻研几个小时。不过这也是我好久之前写的代码了,同志们也可以尝试自己去写一写,算是个C语言简单小项目!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值