2048项目-2020.12.28

2048项目总结

  1. 项目说明 (干什么的,什么效果)

   左右移动,碰到相同的数求和。

  1. 项目技术点(关键的一些知识点)

    1.合并和移动:二维数组变例操作,循环

2.排版显示:光标控制,vt100使用

3.无回车输入

 

  1. 项目实现思路 (分模块或者是流程)

先实现上下左右求和,然后实现移动,在空位置产生随机数

  1. 项目关键部分核心思路 与 代码 (关键代码部分做好注释)

   移动求和

void up(int a[][4])

{

 int i,j,k;

 for(k=0;k<4;++k)

 {

  for(i=0;i<4;++i)

  {

   if(a[i][k]!=0)

   {

    for(j=0;j<i;++j)

    {

     if(0 == a[j][k])

     {

      a[j][k] = a[i][k];

      a[i][k] = 0;

      break;

     }

    }

   }

  }

 }

}

void down(int a[][4])

{

 int k,i,j;

 for(k=0;k<4;++k)

 {

  for(i=3;i>=0;--i)

  {

   if(a[i][k]!=0)

   {

    for(j=3;j>i;--j)

    {

     if(0 == a[j][k])

     {

      a[j][k] = a[i][k];

      a[i][k] = 0;

      break;

     }

    }

   }

  }

 }

}

void left(int a[][4])

{

 int k,i,j;

 for(k = 0;k < 4;++k)

 {

  for(i = 0;i < 4;++i)

  {

   if(a[k][i] != 0)

   {

    for(j = 0;j < i;++j)

    {

     if(0 == a[k][j])

     {

      a[k][j] = a[k][i];

      a[k][i] = 0;

      break;

     }

    }

   }

  }

 }

}

void right(int a[][4])

{

 int k,i,j;

 for(k = 0;k < 4;++k)

 {

  for(i = 3;i >= 0;--i)

  {

   if(a[k][i] != 0)

   {

    for(j = 3;j > i;--j)

    {

     if(0 == a[k][j])

     {

      a[k][j] = a[k][i];

      a[k][i] = 0;

      break;

     }

    }

   }

  }

 }

}

void up_move(int a[4][4])

{

 int i,j,k;

 for(k = 0;k < 4;++k)

 {

  for(i = 0;i < 4;++i)

  {

   if(a[i][k] == 0)

   {

    continue;

   }

   else

   {

    for(j = i+1;j < 4;++j)

    {

     if(a[j][k] == 0)

     {

      continue;

     }

     else

     {

      if(a[i][k] == a[j][k])

      {

       a[i][k] *= 2;

       a[j][k] = 0;

      }

      else

      {

       break;

      }

     }

    }

   }

  }

 }

 up(a);

}

void down_move(int a[4][4])

{

 int i,j,k;

 for(k = 0;k < 4;++k)

 {

  for(i = 0;i < 4;++i)

  {

   if(a[i][k] == 0)

   {

    continue;

   }

   else

   {

    for(j = i+1;j < 4;++j)

    {

     if(a[j][k] == 0)

     {

      continue;

     }

     else

     {

      if(a[j][k] == a[i][k])

      {

       a[j][k] *= 2;

       a[i][k] = 0;

      }

      else

      {

       break;

      }

     }

    }

   }

  }

 }

 down(a);

}

void left_move(int a[][4])

{

 int i,j,k;

 for(k = 0;k < 4;++k)

 {

  for(i = 0;i < 4;++i)

  {

   if(a[k][i] == 0)

   {

    continue;

   }

   else

   {

    for(j = i+1;j < 4;++j)

    {

     if(a[k][j] == 0)

     {

      continue;

     }

     else

     {

      if(a[k][j] == a[k][i])

      {

       a[k][i] *= 2;

       a[k][j] = 0;

      }

      else

      {

       break;

      }

     }

    }

   }

  }

 }

 left(a);

}

void right_move(int a[][4])

{

 int i,j,k;

 for(k = 0;k < 4;++k)

 {

  for(i = 0;i < 4;++i)

  {

   if(a[k][i] == 0)

   {

    continue;

   }

   else

   {

    for(j = i+1;j < 4;++j)

    {

     if(a[k][j] == 0)

     {

      continue;

     }

     else

     {

      if(a[k][j] == a[k][i])

      {

       a[k][j] *= 2;

       a[k][i] = 0;

      }

      else

      {

       break;

      }

     }

    }

   }

  }

 }

 right(a);

}

空位置产生随机数

void rand_newnumber(int a[4][4])

{

 int i,j;

 srandom(time(NULL));

 do

 {

  i = random()%4;

  j = random()%4;

 }while(a[i][j]!=0);

 

 if(random()%100 < 70)

 {

  a[i][j] = 2;

 }

 else

 {

  a[i][j] = 4;

 }

}

5.项目中遇到的问题

  [问题1] //什么问题?描述问题?怎么解决的,思路和对应关键处理步骤

问题:移动过程初始值给的不对

解决方法:对比,找出错误,一个一个的试,不可钻牛角尖。

  1. 项目心得(体会+收获(知识上,代码编写上,思路上,学习方法上,调试方法上等))  

做项目很锻炼思维,运用的知识全面,认真对待感觉打通了七经八脉。

基础不扎实,还有待提高。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

滴水之功

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值