2048项目总结
- 项目说明 (干什么的,什么效果)
左右移动,碰到相同的数求和。
- 项目技术点(关键的一些知识点)
1.合并和移动:二维数组变例操作,循环
2.排版显示:光标控制,vt100使用
3.无回车输入
- 项目实现思路 (分模块或者是流程)
先实现上下左右求和,然后实现移动,在空位置产生随机数
- 项目关键部分核心思路 与 代码 (关键代码部分做好注释)
移动求和
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] //什么问题?描述问题?怎么解决的,思路和对应关键处理步骤
问题:移动过程初始值给的不对
解决方法:对比,找出错误,一个一个的试,不可钻牛角尖。
- 项目心得(体会+收获(知识上,代码编写上,思路上,学习方法上,调试方法上等))
做项目很锻炼思维,运用的知识全面,认真对待感觉打通了七经八脉。
基础不扎实,还有待提高。