「已注销」 2017-06-10 08:31 采纳率: 0%
浏览 1173

C++做2048的程序有问题

#include
#include
#include

int magic;
int block[4][4]={0};
char dir; //移动方向
int k=0; //可能位置计数器
int x; //随机数在可能位置中选取一个位置

void print();
void appear();
void move();

int main()
{
int i,j;
int count=16; //记录当前为0的个数
srand(time(NULL));
i=rand()%4;
j=rand()%4;
block[i][j]=2;
print();
for(;count!=0;)
{
move();
print();
}
printf("game over");
return 0;
}

void appear()
{
int i,j; //a为坐标
for(;magic=3;)
magic=rand()%5+2;
int a[15]={0};
int b[15]={0};
switch(dir)
{
case 'w':
{
k=0;
for(j=0;j<=3;j++)
{
for(i=0;i<=3;i++)
{
if(block[i][j]=0) //如果当前位置为0,分别记录下横纵坐标

{
a[k]=i;
b[k]=j;
k++;
}
}
}
x=rand()%k+1; //随机数为1到k
block[a[x]][b[x]]=magic; //可能位置赋值
}
case 'a':
{
k=0;
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
if(block[i][j]=0)
{
a[k]=i;
b[k]=j;
k++;
}
}
}
x=rand()%k+1; //随机数为1到k
block[a[x]][b[x]]=magic; //可能位置赋值
}
case 's':
{
k=0;
for(j=0;j<=3;j++)
{
for(i=0;i<=3;i++)
{
if(block[i][j]=0)
{
a[k]=i;
b[k]=j;
k++;
}
}
}
x=rand()%k+1; //随机数为1到k
block[a[x]][b[x]]=magic; //可能位置赋值
}
case 'd':
{
k=0;
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
if(block[i][j]=0)
{
a[k]=i;
b[k]=j;
k++;
}
}
}
x=rand()%k+1; //随机数为1到k
block[a[x]][b[x]]=magic; //可能位置赋值
}

}

}

void print()
{
int i,j; //i行 j列
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
printf("%d",block[i][j]);
printf("\t");
if(j==3)
printf("\n");
}
}
}

void move()
{
int i=0,j=0,k;
scanf("%c",dir);
getchar();
switch(dir)
{
case 'w':
{
for(i=0;i {
for(j=0;j {
if(block[i][j]!=0) //消除移动后i行可以叠加的数字
{
k=j;
for(;block[i][k]==0&&k block[i][j]=block[i][k];
block[i][k]=0;
}
if(block[i][j+1]==block[i][j])
{
block[i][j]=2*block[i][j];
block[i][j+1]=0;
}
}
}
appear();
}
case 'a':
{
for(j=0;j {
for(i=0;i {
if(block[i][j]!=0)
{
k=i;
for(;block[i][k]==0&&k block[i][j]=block[k][j];
block[k][j]=0;
}
if(block[i][j]==block[i+1][j])
{
block[i][j]=2*block[i][j];
block[i+1][j]=0;
}
}
}
appear();
}
case 's':
{
for(i=3;i>0;i--)

{
for(j=3;j>0;j--)

{
if(block[i][j]!=0)

{
k=j;
for(;block[i][k]==0&&k>0;k--)
block[i][j]=block[i][k];
block[i][k]=0;
}
}
if(block[i][j]==block[i][j-1])
{
block[i][j]=2*block[i][j];
block[i][j-1]=0;
}
}
appear();
}
case 'd':
{
for(j=3;j>0;j--)

{
for(i=0;i {
if(block[i][j]!=0)
{
k=i;
for(;block[i][k]==0&&k>0;k--)
block[i][j]=block[k][j];
block[k][j]=0;
}
if(block[i][j]==block[i-1][j])
{
block[i][j]=2*block[i][j];
block[i-1][j]=0;
}
}
}
appear();
}
}

}

  • 写回答

2条回答 默认 最新

  • 凝视深空 2017-06-10 09:56
    关注

    都不知道你有什么问题?你得说秦楚

    评论

报告相同问题?

悬赏问题

  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架